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
#include <bits/stdc++.h>
#define IOSTREAM_BOOST true
using namespace std;

int n;
long long numbers[305];
vector<long long> seq[305];

int main()
{
    #if IOSTREAM_BOOST
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    #endif
    
    cin >> n;
    for(int i = 0; i < n; i++) cin >> numbers[i];

    for(long long i = 0; i < n; i++){
        long long baseQ = numbers[i] / (i + 1);
        long long remainder = numbers[i] % (i + 1);
        if(remainder < 0) remainder += i + 1, baseQ--;

        seq[i] = vector<long long>(i + 1, baseQ);
        
        if(remainder == 1) seq[i][0] = baseQ + 1;
        else for(int j = 0; j < remainder; j++) seq[i][i * j / (remainder - 1)] = baseQ + 1;
    }  

    bool broken = false;
    for(int i = 0; i < n; i++) for(int j = i + 1; j < n; j++){
        long long ssum = 0;
        for(int k = 0; k < i + 1; k++) ssum += seq[j][k]; if(ssum > numbers[i]) broken = true;
        for(int k = i + 2; k < j + 1; k++){
            ssum += seq[j][k] - seq[j][k - i - 2];
            if(ssum > numbers[i]) broken = true;
        }  
    }

    if(broken){
        cout << "NIE\n";
        return 0;
    }

    cout << "TAK\n";
    cout << n + n * (n + 1) / 2 << "\n";
    for(int i = 0; i < n; i++){
        for(int j = 0; j < i + 1; j++) cout << seq[i][j] << " ";
        cout << (long long)(-1e13) << " ";
    }    
    cout << "\n";
    return 0;
}