import java.io.*;
import java.util.*;


public class Main {
	static class pair implements Comparable<pair>{
		int val,idx;
		pair(int v,int i){val=v;idx=i;}
		@Override
		public int compareTo(pair o) {
			return val-o.val;
		}
		public String toString() {return val+" "+idx;}
		
	}
	public static void main(String[] args) throws Exception {
		MScanner sc = new MScanner(System.in);
		PrintWriter pw = new PrintWriter(System.out);
		int t=sc.nextInt();
		while(t-->0) {
			int n=sc.nextInt();
			int[]in=sc.takearr(n);
			if(n<6) {pw.println(0+" "+0+" "+0);continue;}
			
			int mid=(n/2);
			int end=mid-1;
			while(end>=0 && in[end]==in[mid])end--;
			if(end<2) {pw.println(0+" "+0+" "+0);continue;}
			
			
			HashSet<Integer>hs=new HashSet<Integer>();
			for(int o=end;o>=0;o--) {
				hs.add(in[o]);o--;
			}
			if(hs.size()<3) {
				pw.println(0+" "+0+" "+0);
			}
			else {
				int gold=in[0];
				int i=0;
				int g=0;
				while(in[i]==gold) {
					g++;i++;
				}
				int silver=in[i];
				int s=0;
				while(i<=end && (in[i]==silver || s<=g)) {
					s++;i++;
				}
				while(i<=end && in[i]==in[i-1]) {
					s++;i++;
				}
				int b=0;
				while(i<=end) {
					b++;i++;
				}
				if(b==0 || b<=g) {
					pw.println(0+" "+0+" "+0);
				}
				else
					pw.println(g+" "+s+" "+b);
			}
		}
		pw.flush();
	}
	static class MScanner {
		StringTokenizer st;
		BufferedReader br;

		public MScanner(InputStream system) {
			br = new BufferedReader(new InputStreamReader(system));
		}

		public MScanner(String file) throws Exception {
			br = new BufferedReader(new FileReader(file));
		}

		public String next() throws IOException {
			while (st == null || !st.hasMoreTokens())
				st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}

		public int[] takearr(int n) throws IOException {
			int[] in = new int[n];
			for (int i = 0; i < n; i++)
				in[i] = nextInt();
			return in;
		}

		public long[] takearrl(int n) throws IOException {
			long[] in = new long[n];
			for (int i = 0; i < n; i++)
				in[i] = nextLong();
			return in;
		}

		public Integer[] takearrobj(int n) throws IOException {
			Integer[] in = new Integer[n];
			for (int i = 0; i < n; i++)
				in[i] = nextInt();
			return in;
		}

		public Long[] takearrlobj(int n) throws IOException {
			Long[] in = new Long[n];
			for (int i = 0; i < n; i++)
				in[i] = nextLong();
			return in;
		}

		public String nextLine() throws IOException {
			return br.readLine();
		}

		public int nextInt() throws IOException {
			return Integer.parseInt(next());
		}

		public double nextDouble() throws IOException {
			return Double.parseDouble(next());
		}

		public char nextChar() throws IOException {
			return next().charAt(0);
		}

		public Long nextLong() throws IOException {
			return Long.parseLong(next());
		}

		public boolean ready() throws IOException {
			return br.ready();
		}

		public void waitForInput() throws InterruptedException {
			Thread.sleep(3000);
		}
	}
}