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

struct tr {
    int in;
    int out;
};

int setl(vector<int> zab) {
    int l = 0;
    while (!zab[l]) l++;
    return l;
}

int setr(vector<int> zab) {

    int r = zab.size() - 1;
    while (!zab[r]) r--;
    return r;
}

int main() {
    cin.tie(0)->sync_with_stdio(0);
    int t;
    cin >> t;
    while (t--) {
        int n, l, r;
        cin >> n;
        vector<int> zab(n+8,0);
        vector<tr> w(n+8,{0, 0});

        for(int i=0;i<n;i++) cin >> zab[i];

        l = setl(zab);
        r = setr(zab);

        if (r > 1 and zab[r] > zab[r - 1] and (r - l + 1) > 2) {
            cout << "NIE\n";
            continue;
        }

        if (l < (n - 1) and zab[l] > zab[l + 1] and (r - l + 1) > 2) {
            cout << "NIE\n";
            continue;
        }



        if (l > r) {
            cout << "TAK\n";
            continue;
        }

        bool gay = 0;
        for (int i = l; i <= r; i++) {
            if (zab[i] == 0) {
                cout << "NIE\n";
                gay = 1;
                break;
            }
        }
        if (gay) continue;

        if (l == r) {
            if (zab[l] == 1) {
                cout << "TAK\n";
                continue;
            }
            else {
                cout << "NIE\n";
                continue;
            }
        }

        for (int i = l; i < r; i++) {
            tr ll;
            tr lr;
            int ltr;
            int rtl;
            ll.in = zab[i] - w[i].in;
            ll.out = zab[i] - w[i].out;
            lr.in = zab[i + 1] - w[i + 1].in;
            lr.out = zab[i + 1] - w[i + 1].out;
            ltr = min(ll.out, lr.in);
            rtl = min(ll.in, lr.out);
            w[i].in += rtl;
            w[i].out += ltr;
            w[i + 1].in += ltr;
            w[i + 1].out += rtl;

            if(i!=(r-1)){
                if(w[i+1].in==zab[i+1] and w[i+1].out==zab[i+1]){
                    //cout << i << '\n';
                    w[i+1].in--;
                    w[i].out--;
                }
            }
        }

        int w1 = 0, w2=0;

        for (int i = l; i <= r; i++) {
            w1 += (zab[i] - w[i].in);
            w2 += (zab[i] - w[i].out);

        }

        if((w1==0 and w2==0) or (w1==1 and w2==1)){
            cout << "TAK\n";
            continue;
        }

        cout << "NIE\n";


        // for(int i=0;i<n;i++){
        //     cout << w[i].in << ' ';
        // }
        // cout << '\n';
        // for(int i=0;i<n;i++){
        //     cout << w[i].out << ' ';
        // }
        // cout << '\n' << '\n';

    }
}