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
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int wyn[500][500];
int dane[500];
int odp[1000000];
int N,nr;
int last_lower(int x)
{
	for (int i=x-1; i>=0; i--)
	{
		if (dane[i]<=dane[x])
			return i;
	}
}

bool sprawdzenie(int x)
{
	int suma=wyn[x][x];
	int I=x;
	int licznik=2;
	for (int i=x-1; i>=1; i--)
	{
		suma+=wyn[I][i];
		if (suma>dane[licznik])
			return false;
		licznik++;
	}
	return true;
}

int main() 
{
	int elem;
	bool ujemna=false;
	scanf("%d", &N);
	dane[0]=-100000000;
	for (int i=1; i<=N; i++)
	{
		scanf("%d", &elem);
		dane[i]=elem;
		if (elem<0)
		{
			ujemna=true;
			wyn[i][1]=elem;
			for (int k=i+1; k<=N; k++)
			{
				scanf("%d", &elem);
				dane[k]=elem;
				int x=k-1;
				for (int j=1; j<=x; j++)
					wyn[k][j]=wyn[x][j];

				wyn[k][x+1]=elem-dane[x];
		
				if (!sprawdzenie(k))
				{
					printf("NIE\n");
					return 0;
				}
			}
		}
		if (ujemna)
			break;
		int x=last_lower(i);
		for (int j=1; j<=x; j++)
			wyn[i][j]=wyn[x][j];
		if (x!=0)
			wyn[i][x+1]=elem-dane[x];
		else
			wyn[i][x+1]=elem;
		if (!sprawdzenie(i))
		{
			printf("NIE\n");
			return 0;
		}
	}
	
	nr=0;
	for (int i=1; i<=N; i++)
	{
		for (int j=1; j<=i; j++)
		{
			odp[nr]=wyn[i][j];
			nr++;
		}
		odp[nr]=-1000000000;
		nr++;
	}
	
	printf("TAK\n");
	printf("%d\n", nr);
	for (int i=0; i<nr; i++)
		printf("%d ", odp[i]);
		
	return 0;
}