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
#include <iostream>
#include <algorithm>
using namespace std;

void rev(int *tab, int n){
    int tab1[n];
    for(int i = 0; i < n; i++){
        tab1[i] = tab[n - i - 1];
    }
    for(int i = 0; i < n; i++){
        tab[i] = tab1[i];
    }
}

void next(int *tab, int n){
    int i = n - 1, minimum = n + 1, m;
    while(tab[i] < tab[i - 1]) i--;
    for(int j = n - 1; j >= i; j--)
        if((tab[j] < minimum) && (tab[j] > tab[i - 1])){
            minimum = tab[j];
            m = j;
        }
    swap(tab[i - 1], tab[m]);
    for(int j = i; j <= (n + i - 1) / 2; j++)   swap(tab[j], tab[n - 1 - j + i]);
}

int main(){
    int n, k;
    cin>>n>>k;
    if(((n - 1) * 2 < k) || (n == 2) || (n & 1 == 1)){
        cout<<"NIE";
        return 0;
    }
    int tab[n];
    tab[0] = 1;
    for(int i = 1; i < n; i++){
        tab[i] = n - i + 1;
    }
    for(int i = 1; i < k ; i++){
        if(i % 2 == 0){
            next(tab, n);
        }else{
            rev(tab, n);
        }
    }
    cout<<"TAK"<<endl;
    for(int i = 0; i < n; i++){
        cout<<tab[i]<<" ";
    }
    return 0;
}