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
118
119
120
121
122
123
124
125
126
127
#include <bits/stdc++.h>
using namespace std;
#define sim template < class c
#define ris return * this
#define dor > debug & operator <<
#define eni(x) sim > typename \
  enable_if<sizeof dud<c>(0) x 1, debug&>::type operator<<(c i) {
sim > struct rge { c b, e; };
sim > rge<c> range(c i, c j) { return rge<c>{i, j}; }
sim > auto dud(c* x) -> decltype(cerr << *x, 0);
sim > char dud(...);
struct debug {
#ifdef LOCAL
~debug() { cerr << endl; }
eni(!=) cerr << boolalpha << i; ris; }
eni(==) ris << range(begin(i), end(i)); }
sim, class b dor(pair < b, c > d) {
  ris << "(" << d.first << ", " << d.second << ")";
}
sim dor(rge<c> d) {
  *this << "[";
  for (auto it = d.b; it != d.e; ++it)
	*this << ", " + 2 * (it == d.b) << *it;
  ris << "]";
}
#else
sim dor(const c&) { ris; }
#endif
};
#define imie(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "
// debug & operator << (debug & dd, P p) { dd << "(" << p.x << ", " << p.y << ")"; return dd; }

bool is_good(const vector<int>& a, const vector<int>& in) {
	int n = a.size();
	int k = in.size();
	vector<bool> reached(k);
	for(int i = 0; i < n; ++i) {
		int sum = 0;
		for(int j = i; j < n; ++j) {
			sum += a[j];
			int len = j - i; // from 0
			if(len == k) {
				break;
			}
			if(sum > in[len]) {
				return false;
			}
			if(sum == in[len]) {
				reached[len] = true;
			}
		}
	}
	return reached == vector<bool>(k, true);
}

void rec(vector<int> a, const vector<int>& in, vector<int>& answer) {
	if(!answer.empty()) {
		return;
	}
	int n = a.size();
	int k = in.size();
	if(n >= k) {
		if(is_good(a, in)) {
			answer = a;
		}
	}
	if(n < 7) {
		for(int x = -4; x <= 4; ++x) {
			a.push_back(x);
			rec(a, in, answer);
			if(!answer.empty()) {
				return;
			}
			a.pop_back();
		}
	}	
}

vector<int> brute(vector<int> in) {
	vector<int> a, answer;
	rec(a, in, answer);
	return answer;
}

vector<int> greedy(vector<int> in) {
	vector<int> answer;
	answer.push_back(in[0]);
	int n = in.size(); // n == k
	for(int i = 1; i < n; ++i) {
		answer.push_back(in[i] - in[i-1]);
	}
	if(is_good(answer, in)) {
		return answer;
	}
	return {};
}

int main() {
	int k;
	scanf("%d", &k);
	vector<int> in(k);
	for(int i = 0; i < k; ++i) {
		scanf("%d", &in[i]);
	}
	
	vector<int> answer = greedy(in);
	if(answer.empty()) {
		puts("NIE");
	}
	else {
		assert((int) answer.size() == k);
		puts("TAK");
		printf("%d\n", k);
		for(int x : answer) {
			printf("%d ", x);
		}
		puts("");
	}
	
	// assert(!greedy(in).empty());
	
	// if(!brute(in).empty()) {
		// assert(!greedy(in).empty());
	// }
	// vector<int> answer = greedy(in);
	// debug() << imie(answer);
}