import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;



public class BeautifulRegionalContest {

    public static class MedalCount {
        int goldMedalCount;
        int silverMedalCount;
        int bronzeMedalCount;

        public MedalCount(int goldMedalCount, int silverMedalCount, int bronzeMedalCount) {
            this.goldMedalCount = goldMedalCount;
            this.silverMedalCount = silverMedalCount;
            this.bronzeMedalCount = bronzeMedalCount;
        }
    }
    /*
        a) Construct a list with number and frequency.
        b) Convert into a prefix sum array.
        c) Find the breaking point for n/2.
        d) Give the highest the gold medal.
        e) Keep breaking till we get more than gold for silver and bronze.
        f) Record the count.
        g) Spit out the output.
    */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int numTestCases = scanner.nextInt();

        for(int test=1; test <= numTestCases; test++) {
            int numPlayers = scanner.nextInt();
            int[] playerScores = new int[numPlayers];
            for(int index = 0; index < numPlayers; index++) {
                playerScores[index] = scanner.nextInt();
            }
            MedalCount resultingMedalCount = getResultMedals(playerScores, numPlayers);
            System.out.println(resultingMedalCount.goldMedalCount + " " + resultingMedalCount.silverMedalCount + " " +
                    resultingMedalCount.bronzeMedalCount);
        }
    }

    private static MedalCount getResultMedals(int[] playerScores, int numPlayers) {
        List<Integer> playerPrefixSum = getPrefixSumOfScores(playerScores, numPlayers);
        int breakingPointIndex = getBreakingPoint(playerPrefixSum, numPlayers/2);
        int goldMedalAllocated = 0;
        int silverMedalAllocated = 0;
        int bronzeMedalAllocated = 0;

        for(int index=0; index<=breakingPointIndex; index++) {
            if(goldMedalAllocated == 0) {
                goldMedalAllocated = playerPrefixSum.get(index);
            } else if(silverMedalAllocated <= goldMedalAllocated) {
                silverMedalAllocated += playerPrefixSum.get(index);
            } else {
                bronzeMedalAllocated += playerPrefixSum.get(index);
            }
        }

        if(goldMedalAllocated != 0 && silverMedalAllocated != 0 && bronzeMedalAllocated != 0 && goldMedalAllocated < silverMedalAllocated && goldMedalAllocated < bronzeMedalAllocated) {
            return new MedalCount(goldMedalAllocated, silverMedalAllocated, bronzeMedalAllocated);
        } else {
            return new MedalCount(0, 0, 0);
        }
    }

    private static List<Integer> getPrefixSumOfScores(int[] playerScores, int numPlayers) {
        List<Integer> prefixSumList = new ArrayList<>();
        int index = 0;
        while(index < numPlayers) {
            int curValue = playerScores[index];
            int curIndex = index;
            while(curIndex + 1 < numPlayers && playerScores[curIndex + 1] == curValue) {
                curIndex++;
            }
            prefixSumList.add(curIndex - index + 1);
            index = curIndex;
            index++;
        }
        return prefixSumList;
    }

    private static int getBreakingPoint(List<Integer> playerPrefixSum, int possibleCount) {
        int breakingPoint = -1;
        int curSum = 0;
        for(int i=0; i<playerPrefixSum.size(); i++) {
            curSum += playerPrefixSum.get(i);
            if(curSum > possibleCount) {
                breakingPoint = i - 1;
                break;
            }
        }
        return breakingPoint;
    }
}