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

using namespace std;


int main(){

    int n,k;
    cin>>n>>k;

    int tab[n], pre[n], suf[n], minVal=INT_MAX, maxVal=INT_MIN;
    // bool isMonIn=1, isMonOut, isDif=0;
    int monBreak=-1, minIn=-1, maxIn=-1;
    bool isDif=0;

    for(int i=0;i<n;i++) cin>>tab[i];
    for(int i=0;i<n;i++) minVal=min(minVal,tab[i]), maxVal=max(maxVal,tab[i]);

    pre[0]=tab[0], suf[n-1]=tab[n-1];

    for(int i=0;i<n;i++){
        if(i>0){
            pre[i]=min(pre[i-1], tab[i]);
            suf[n-1-i]=max(suf[n-i], tab[n-i-1]); 
        }
        if(i>0 && i<n-1){
            if(tab[i]==minVal) minIn=i;
            if(tab[i]==maxVal) maxIn=i;
        }
        if(i<n-1){
            if(tab[i]>=tab[i+1]) monBreak=i;
        }
        if(tab[i]!=minVal && tab[i]!=maxVal) isDif=1;

    }
    if(k>n) return cout<<"NIE\n", 0;
    if(k==1) return cout<<"TAK\n", 0;
    if(k==2){
        // for(int i=0;i<n;i++) cout<<"["<<pre[i]<<", "<<suf[i]<<"] ";
        for(int i=0;i<n-1;i++) if(pre[i]>=suf[i+1]) return cout<<"TAK\n"<<i+1, 0;
        return cout<<"NIE\n", 0;
    }
    if(k==3){
        // cout<<"p"<<minIn<<" "<<maxIn<<" "<<minVal<<" "<<maxVal<<endl;
        if(minIn!=-1) return cout<<"TAK\n"<<minIn<<" "<<minIn+1, 0;
        if(maxIn!=-1) return cout<<"TAK\n"<<maxIn<<" "<<maxIn+1, 0;
        if(maxVal==tab[0]) return cout<<"TAK\n 1 2", 0;
        if(isDif) return cout<<"NIE\n", 0;
        return cout<<"TAK\n1 2\n", 0;
    }
    if(monBreak==-1) return cout<<"NIE\n", 0;
    cout<<"TAK\n";
    vector<bool> where(n+1, 0);
    where[monBreak]=where[monBreak+1]=where[monBreak+2]=1;
    if(monBreak==0) k++;
    if(monBreak+2==n) k++;
    k-=4;
    int i=1;
    while(k){
        if(where[i]==0) where[i]=1, k--;
        i++;
    }
    for(int i=1;i<n;i++) if(where[i]) cout<<i<<" ";
    cout<<endl;


    // if(int i=0; 1==1){
        // int i=0;
    //     cout<<i;
    // }




}

// if(tab[0]>=tab[1])monBreak=0;
    // for(int i=1;i<n-2;i++) {
    //     // if(tab[i]>=tab[i+1]) monBreak=i;
    //     pre[i]=min(pre[i-1], tab[i]);
    // }
    // for(int i=0;i<n;i++){


    // // }
    // pre[i]=min(pre[i-1], tab[i]);
    //     suf[n-1-i]=max(suf[n-i], tab[i]);
    // isMonOut = tab[0]<tab[1] && tab[n-2]<tab[n-1];
    // if(tab[n-2]>=tab[n])monBreak=n-2;