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>

#define f first
#define s second
#define vec vector
#define pb push_back
#define sz(x) (int)(x).size()
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
template<class T> bool umin(T &a ,const T &b){return (a>b?a=b,1:0);}
template<class T> bool umax(T &a ,const T &b){return (a<b?a=b,1:0);}
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef long double ld;
auto rng=bind(uniform_int_distribution<ll>(1,(ll)1e18),mt19937(time(0)));
const int inf = (int)1e9 + 1;
const int N = 5e5 + 1;
//int t[4 * N];
int a[N];
//
//void build (int v, int tl, int tr) {
//    if (tl == tr) {
//        t[v] = a[tl];
//    }
//    else {
//        int tm = (tl + tr) >> 1;
//        build(v << 1, tl, tm);
//        build(v << 1 | 1, tm + 1, tr);
//        t[v] = max(t[v << 1], t[v << 1 | 1]);
//    }
//}
//int getpos (int i, int x, int v, int tl, int tr) {
//    if (tr <= i || t[v] < x)
//        return -1;
//    if (tl == tr)
//        return tl;
//    int tm = (tl + tr) >> 1;
//    int j = getpos(i, x, v << 1, tl, tm);
//    if (j == -1)
//        j = getpos(i, x, v << 1 | 1, tm + 1, tr);
//    return j;
//}
signed main(){
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int n, k;
    cin >> n >> k;
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
    }
    vec<int> ans;
    --k;
    vec<int> pref(n),suf(n);
    for (int i = 0; i < n; ++i)
        pref[i] = (i ? min(a[i], pref[i - 1]) : a[i]);
    for (int i = n - 1; i >= 0; --i)
        suf[i] = (i + 1 < n ? max(a[i], suf[i + 1]) : a[i]);
//    build(1, 0, n - 1);
    if (k == 1) {
        for (int i = 0; i < n - 1; ++i) {
            if (!sz(ans) && pref[i] >= suf[i + 1]) {
                ans.pb(i);
            }
        }
    }
    else {
        vec<bool> inans(n);
        int ok = 0;
        int j = -1;
        for (int i = 1; i < n - 1; ++i) {
            if (ok == 0 && (a[i] <= pref[i - 1] || a[i] >= suf[i + 1])) {
                inans[i - 1] = 1;
                inans[i] = 1;
                ok = 1;
                j = i;
//                ans.pb(i - 1);
//                ans.pb(i);
            }
        }
//        if (sz(ans) == 0) {
//
//        }
        for (int i = 0; i < n; ++i) {
//            if (i == j)
            int cur = sz(ans) + (i < (j - 1)) + (i < j);
//            cout
            if (inans[i]) {
                ans.pb(i);
            }
            if (!inans[i] && k != cur){
                ans.pb(i);
            }
        }
//        ///then add
    }
    if (!sz(ans)) {
        cout << "NIE\n";
    }
    else {
        cout << "TAK\n";
        for (auto &z : ans)
            cout << z + 1 << ' ';
    }
    return 0;
}

/*
6 6
3 5 4 8 3 7


1 2
1 7
2 18
7 9
3 18
5 17
3 8
14 18
4 7
7 17
3 20
1 18
4 11
10 11
*/