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
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const ll MIN = -1e13;


// bool verify(const vector<ll>& res, const vector<int>& A) {
//   map<int, ll> mxs;
//   bool ok = true;
//   for(size_t i = 0; i < res.size(); i++) {
//     for(size_t j = i; j < res.size(); j++) {
//       ll mx_so_far = res[j];
//       for(size_t k = i; k <= j; k++) {
//         mx_so_far = max(mx_so_far, res[j]);
//       }
//       mxs[j - i + 1] = mx_so_far;
//     }
//   }
//   for(size_t i = 0; i < A.size(); i++) {
//     if(A[i] < mxs[i + 1]) {
//       cerr << "not ok" << endl;
//       ok = false;
//       break;
//     }
//   }
//   return ok;
// }


pair<bool, vector<ll>> gen_number(int num, int len, int mxi, const vector<int>& constraints) {
  vector<ll> ans;
  int sum_so_far = 0;
  int cindex = 0;
  if(num > mxi) {
    int curr_len = 0;
    while(num > 0) {
      int inc = min(constraints[cindex++] - sum_so_far, num);
      ans.push_back(inc);
      sum_so_far += inc; 
      num -= inc;
      curr_len++;
      if (curr_len > len || inc > mxi) {
        return {false, ans};
      }
    }
  } else {
    ans.push_back(num);
  }
  return {true, ans};
}


vector<ll> solve(const vector<int>& A) {
  int mx = A.front();
  int zeros = A.size();
  vector<ll> ans;

  for(size_t i = 0; i < A.size(); i++) {
    auto it = A[i];
    auto res = gen_number(it, i + 1, mx, A);
    bool ok = res.first;
    vector<ll> number = res.second;
    if(!ok) {
      cout << "NIE" << endl;
      // dbgm(A, i + 1, res);
      return ans;
    }
    for(auto d: number) ans.push_back(d);
    for(int j = 0; j < zeros; j++) ans.push_back(MIN);
  }

  cout << "TAK" << endl;
  cout << ans.size() << endl;
  for(auto x: ans) cout << x << " ";
  cout << endl;
  // if(!verify(ans, A)) cout << "bug" << endl;
  return ans;
}

// void gen() {
//   vector<int> vec;
//   size_t n = 300;
// 
//   for(size_t i = 0; i < 1000; i++) {
//     for(size_t j = 0; j < n; j++) {
//       vec.push_back(rand() % 20);
//     }
//     solve(vec);
//     vec.clear();
//   }
// }

int main(int argc, char const *argv[]) {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);

  int n;
  cin >> n;
  vector<int> A(n);
  for(int i = 0; i < n; i++) cin >> A[i];
  solve(A);
  // gen();

  return 0;
}