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
#include <bits/stdc++.h>
#include <math.h>
using namespace std;
#define endl "\n"
#define mp make_pair
#define st first
#define nd second
#define pii pair<int, int>
#define pb push_back
#define _upgrade ios_base::sync_with_stdio(0), cout.setf(ios::fixed), cout.precision(10), cin.tie(0), cout.tie(0);
#define REP(i, n) for (int i = 0; i < (n); ++i)
#define FWD(i, a, b) for (int i = (a); i < (b); ++i)
#define rep(i, n) for (int i = 0; i < (n); ++i)
#define fwd(i, a, b) for (int i = (a); i < (b); ++i)
#define all(c) (c).begin(), (c).end()
#define sz(X) (int)((X).size())
#define what(x) cerr << #x << " is " << x << endl;

ostream &operator<<(ostream &out, string str) {
   for (char c : str)
      out << c;
   return out;
}
template <class L, class R> ostream &operator<<(ostream &out, pair<L, R> p) { return out << "(" << p.st << ", " << p.nd << ")"; }
template <class T> auto operator<<(ostream &out, T a) -> decltype(a.begin(), out) {
   out << '{';
   for (auto it = a.begin(); it != a.end(); it = next(it))
      out << (it != a.begin() ? ", " : "") << *it;
   return out << '}';
}
void dump() { cerr << "\n"; }
template <class T, class... Ts> void dump(T a, Ts... x) {
   cerr << a << ", ";
   dump(x...);
}
#define debug(...) cerr << "[" #__VA_ARGS__ "]: ", dump(__VA_ARGS__)

#define int long long

const int inf = 1000ll * 1000ll * 1000ll * 1000ll * 10ll;

vector<int> get(vector<int> ograniczenia, int n) {
   vector<int> tab(n + 1, inf);
   tab[0] = 0;
   for (int i = 1; i <= n; i++)
      for (int j = 1; j <= i; j++)
         tab[i] = min(tab[i], tab[i - j] + ograniczenia[j]);
   return tab;
}

int32_t main() {
   _upgrade;
   int n;
   cin >> n;
   vector<int> res;
   vector<int> ograniczenia(n + 1, inf);
   rep(i, n) cin >> ograniczenia[i + 1];
   debug(ograniczenia);

   for (int i = 1; i <= n; i++) {
      auto V = get(ograniczenia, i);
      if (V[i] == ograniczenia[i]) {
         for (int j = 1; j < sz(V); j++)
            res.push_back(V[j] - V[j - 1]);
      } else {
         //   debug(i, ograniczenia[i], V);
         cout << "NIE\n";
         exit(0);
      }
      res.push_back(-inf);
   }

   cout << "TAK" << endl;
   cout << sz(res) << endl;

   for (auto a : res)
      cout << a << " ";
   cout << endl;
}