1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
#include <iostream>
int readLine(){
	int lineL, bit, fib=1, num=0; 
	std::cin>>lineL;
	for(int t= 0; t<lineL; t++){
		std::cin>>bit;
		if(bit == 0){
			fib+=fib;
		}
		else{
			fib+=fib;
			num+=fib;
		}
	}
	return num;
}
int* readInTab(){
	int lenght;
	std::cin>>lenght;
	int* tab = new int[lenght];
	for(int t= 0; t<lenght; t++){
		std::cin>>tab[t];
	}
	return tab;
}
int* resize(int* rtab, int end){
	int* tab = new int[end];
	delete rtab;
	return tab;
}
int* multiply(int* tab, int times){
	std::cout<<"-----------\n";
	int i=0, end = times;
	bool move = false, next = false;
	
	std::cout<<"-----------\n";
	int* rtab = new int[end];
	std::cout<<"-----------\n";
	for(int t = 0; t<times; t++){
	std::cout<<"-------^^^^-\n";
		do{
	std::cout<<"-----------\n";
	if(&rtab[t+i] == nullptr){
		end++;
		rtab = resize(rtab,end);
		
	}
			if(move == false){
				if(tab[t]+rtab[t]==2){
					move = true;
					i++;
				}
				else{
					rtab[t]=1;
				}
			}
			if(move == true){
		if(tab[t]+rtab[t]<=1){
			rtab[t+i]=0;
			i++;
		}else {
			rtab[t+i]=1;
			next = true;
		}
		}
	
	}while(next!=true);
	
	i=0;
	
	}
	end++;
	resize(rtab,end);
	rtab[end]=9;
	return rtab;
}
void loop()
{
	int num = readLine();
	std::cout<<num;
	int* tab = readInTab();
	int* rtab = multiply(tab,num);
	
	for(int t; rtab[t] != 9; t++)
	{
		std::cout<<rtab[t];
	} 
	delete tab;
		delete rtab;
}
int main(){
	int rep;
	std::cin>> rep;
	for(int t=0; t<rep;t++){
		loop();
		
	}
	
	return 0;
}