#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,popcnt,tune=native")
#pragma GCC target("avx,avx2")
using namespace std;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  long long t;
  cin >> t;
  for (long long tt = 0; tt < t; tt++) {
    long long n;
    cin >> n;
    vector<long long> p(n);
    map<long long, long long> all;
    for (long long i = 0; i < n; i++) {
      cin >> p[i];
      all[p[i]]++;
    }
    if (n < 10) {
      cout << "0 0 0" << '\n';
      continue;
    }
    long long g = 0, s = 0, b = 0;
    if (all.size() == 0) {
      cout << "0 0 0" << '\n';
      continue;
    }
    g += (*all.rbegin()).second;
    all.erase((*all.rbegin()).first);
    if (all.size() == 0) {
      cout << "0 0 0" << '\n';
      continue;
    }
    bool f = false;
    while (s <= g) {
      s += (*all.rbegin()).second;
      all.erase((*all.rbegin()).first);
      if (all.size() == 0) {
        cout << "0 0 0" << '\n';
        f = true;
        break;
      }
    }
    if (f) continue;
    bool fl = false;
    while ((g + s + b) * 2 < n) {
      if (all.size() == 0) {
        cout << "0 0 0" << '\n';
        fl = true;
        break;
      }
      long long pl = (*all.rbegin()).second;
      if ((g + s + b + pl) * 2 <= n)
        b += pl;
      else
        break;
      all.erase((*all.rbegin()).first);
    }
    if (fl) continue;
    if (g == 0 || s == 0 || b == 0 || (g >= s) || (g >= b))
      cout << "0 0 0" << '\n';
    else
      cout << g << " " << s << " " << b << '\n';
  }
  return 0;
}
