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

public class Solution {
	public static void main (String[] args) throws IOException{
		Reader s=new Reader();
		int numTestCases=s.nextInt();
		for(int t=0;t<numTestCases;t++)
		{
		    int n=s.nextInt();
		    int[] arr=new int[n];
		    for(int i=0;i<n;i++)
		    {
		        arr[i]=s.nextInt();
		    }
		    printMedalNumbers(arr);
		}
	}
	public static void printMedalNumbers(int[] arr)
	{
	    int gold=0,silver=Integer.MIN_VALUE,bronze=Integer.MIN_VALUE;
	    int count=0;
	    int i=0;
	    int mid=arr.length/2;
	   // System.out.println("arr.length is "+arr.length);
	   // System.out.println("mid is "+mid+" and it is "+arr[mid]);
	    while(i<arr.length && arr[i]==arr[0])
	    {
	        count++;
	        if(i>=mid)
	        {
	            System.out.println("0 0 0");
	            return;
	        }
	        i++;
	    }
	    gold=count;
	    
	    int j=i;
	    count=0;
	    while(i<arr.length)
	    {
    	    while(j<arr.length && arr[i]==arr[j])
    	    {
    	        count++;
    	        if(j>=mid)
    	        {
    	            if(silver>gold)
    	            {
    	                break;
    	            }
    	            else{
    	                System.out.println("0 0 0");
    	                return;
    	            }
    	        }
    	        j++;
    	    }
    	    if(silver>gold)
    	    {
    	        break;
    	    }
    	    silver=count;
    	    i=j;
	    }
	    if(silver==Integer.MIN_VALUE)
	    {
	        System.out.println("0 0 0");
            return;
	    }
	    j=i;
	    count=0;
	    while(i<arr.length)
	    {
    	    while(j<arr.length && arr[i]==arr[j])
    	    {
    	        if(j>=mid)
    	        {
    	            if(bronze>gold)
    	            {
    	                System.out.println(gold+" "+silver+" "+bronze);
    	                return;
    	            }
    	            else{
    	                System.out.println("0 0 0");
    	                return;
    	            }
    	        }
    	        count++;
    	        j++;
    	    }
    	    i=j;
    	    bronze=count;
	    }
	    if(bronze==Integer.MIN_VALUE)
	    {
	        System.out.println("0 0 0");
            return;
	    }
	}
	static class Reader 
    { 
        final private int BUFFER_SIZE = 1 << 16; 
        private DataInputStream din; 
        private byte[] buffer; 
        private int bufferPointer, bytesRead; 
  
        public Reader() 
        { 
            din = new DataInputStream(System.in); 
            buffer = new byte[BUFFER_SIZE]; 
            bufferPointer = bytesRead = 0; 
        } 
  
        public Reader(String file_name) throws IOException 
        { 
            din = new DataInputStream(new FileInputStream(file_name)); 
            buffer = new byte[BUFFER_SIZE]; 
            bufferPointer = bytesRead = 0; 
        } 
  
        public String readLine() throws IOException 
        { 
            byte[] buf = new byte[1000000+1]; // line length 
            int cnt = 0, c; 
            while ((c = read()) != -1) 
            { 
                if (c == '\n') 
                    break; 
                buf[cnt++] = (byte) c; 
            } 
            return new String(buf, 0, cnt); 
        } 
  
        public int nextInt() throws IOException 
        { 
            int ret = 0; 
            byte c = read(); 
            while (c <= ' ') 
                c = read(); 
            boolean neg = (c == '-'); 
            if (neg) 
                c = read(); 
            do
            { 
                ret = ret * 10 + c - '0'; 
            }  while ((c = read()) >= '0' && c <= '9'); 
  
            if (neg) 
                return -ret; 
            return ret; 
        } 
  
        public long nextLong() throws IOException 
        { 
            long ret = 0; 
            byte c = read(); 
            while (c <= ' ') 
                c = read(); 
            boolean neg = (c == '-'); 
            if (neg) 
                c = read(); 
            do { 
                ret = ret * 10 + c - '0'; 
            } 
            while ((c = read()) >= '0' && c <= '9'); 
            if (neg) 
                return -ret; 
            return ret; 
        } 
  
        public double nextDouble() throws IOException 
        { 
            double ret = 0, div = 1; 
            byte c = read(); 
            while (c <= ' ') 
                c = read(); 
            boolean neg = (c == '-'); 
            if (neg) 
                c = read(); 
  
            do { 
                ret = ret * 10 + c - '0'; 
            } 
            while ((c = read()) >= '0' && c <= '9'); 
  
            if (c == '.') 
            { 
                while ((c = read()) >= '0' && c <= '9') 
                { 
                    ret += (c - '0') / (div *= 10); 
                } 
            } 
  
            if (neg) 
                return -ret; 
            return ret; 
        } 
  
        private void fillBuffer() throws IOException 
        { 
            bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE); 
            if (bytesRead == -1) 
                buffer[0] = -1; 
        } 
  
        private byte read() throws IOException 
        { 
            if (bufferPointer == bytesRead) 
                fillBuffer(); 
            return buffer[bufferPointer++]; 
        } 
  
        public void close() throws IOException 
        { 
            if (din == null) 
                return; 
            din.close(); 
        } 
    }
}
