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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include<stdio.h>
#include<vector>


using namespace std;

vector<long double> liczby;

void liczby_Fibbonaciego(int n)
{
	liczby.push_back(1);
	liczby.push_back(2);
	for (int i = 2; i < n; i++)
	{
		liczby.push_back(liczby[i - 2] + liczby[i - 1]);
	}
}
long double liczby_Fibbonaciego_na_Decimal(vector<int> tab)
{
	long double suma = 0;
	for (int i = 0; i < tab.size(); i++)
	{
		if (tab[i] == 1)
			suma += liczby[i];
	}
	return suma;

}
void liczby_Decimal_na_Fibbonaciego(long double n)
{
	int lewa = 0, prawa = 1475;
	long double skrajna;
	int srodek;
	if (n == 0)
	{
		printf("%d %d\n", 1, 0);
		return;
	}
	while (lewa <= prawa)
	{
		srodek = (lewa + prawa) / 2;
		if (liczby[srodek] <= n && liczby[srodek + 1] > n)
		{
			skrajna = liczby[srodek];
			break;
		}
		if (liczby[srodek] > n)
		{
			prawa = srodek - 1;
		}
		else
		{
			lewa = srodek + 1;
		}
	}
	long double suma = 0;
	printf("%d ", srodek + 1);
	vector<int> wynik;
	for (int i = srodek; i >= 0; i--)
	{
		if (suma + liczby[i] > n)
		{
			wynik.push_back(0);
			continue;
		}
		suma += liczby[i];
		wynik.push_back(1);
		if (suma == n)
		{
			for (int j = i-1; j >= 0; j--)
			{
				wynik.push_back(0);
			}
			break;
		}
		else
		{
			wynik.push_back(0);
			i--;
		}
	}
	for (int i = wynik.size() - 1; i >= 0; i--)
	{
		printf("%d ", wynik[i]);
	}
	printf("\n");

}

int main()
{
	int t;
	liczby_Fibbonaciego(1475);
	scanf("%d", &t);
	for (int i = 0; i < t; i++)
	{
		vector<int> pierwsza;
		vector<int> druga;
		int n;
		scanf("%d", &n);
		for (int j = 0; j < n; j++)
		{
			int i;
			scanf("%d", &i);
			pierwsza.push_back(i);
		}
		scanf("%d", &n);
		for (int j = 0; j < n; j++)
		{
			int i;
			scanf("%d", &i);
			druga.push_back(i);
		}
		liczby_Decimal_na_Fibbonaciego(liczby_Fibbonaciego_na_Decimal(pierwsza) * liczby_Fibbonaciego_na_Decimal(druga));
	}
	return 0;
}