#include <bits/stdc++.h>
using namespace std;
const int __SIZE = 1 << 18;
char ibuf[__SIZE], *iS, *iT;
template <typename T>
inline void read(T &x) {
  char ch, t = 0;
  x = 0;
  while (!isdigit(ch = (iS == iT
                            ? (iT = (iS = ibuf) + fread(ibuf, 1, __SIZE, stdin),
                               (iS == iT ? EOF : *iS++))
                            : *iS++)))
    t |= ch == '-';
  while (isdigit(ch))
    x = x * 10 + (ch ^ 48),
    ch = (iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, __SIZE, stdin),
                      (iS == iT ? EOF : *iS++))
                   : *iS++);
  x = t ? -x : x;
}
inline int read_int() {
  int x;
  return read(x), x;
}
inline long long read_ll() {
  long long x;
  return read(x), x;
}
template <typename T>
inline void chkmin(T &a, T b) {
  a = a < b ? a : b;
}
template <typename T>
inline void chkmax(T &a, T b) {
  a = a > b ? a : b;
}
const int MAXN = 400010;
int a[MAXN];
int main() {
  int Case = read_int();
  while (Case--) {
    int n = read_int();
    for (int i = 1; i <= n; i++) a[i] = read_int();
    int g = 1;
    while (g < n && a[g] == a[g + 1]) ++g;
    int s = g;
    while (s < n && (s - g <= g || a[s] == a[s + 1])) ++s;
    int b = s;
    while (b < n && (b - s <= g || a[b] == a[b + 1])) ++b;
    if (b * 2 > n)
      puts("0 0 0");
    else {
      int tb = b;
      while (tb * 2 <= n) {
        b = tb, ++tb;
        while (tb <= n && a[tb] == a[tb + 1]) ++tb;
      }
      printf("%d %d %d\n", g, s - g, b - s);
    }
  }
  return 0;
}
