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
#include <iostream>

using namespace std;


int licznik=0,licznik_docelowy;

inline void swap(int &a, int &b)
{ int c = a; a = b; b = c; }

void out(int T[],int n)
{
   for(int i = 0; i < n; i++) cout << T[i]<<" ";
   cout << endl;
}

bool permutacje (int T[],int ix,int n)
{
  if( ix < n-1 )
  {
    for(int i = ix; i < n; i++)
    {
      swap(T[ix], T[i]);
      if(!(permutacje(T, ix+1,n))) return 0;
    }
    char c = T[ix];
    for(int i = ix; i < n-1; i++) T[i] = T[i+1];
    T[n-1] = c;
  }
  else {
        int suma=0;
        for(int i=0;i<n-1;++i){
            for(int ii=i+1;ii<n;++ii){
                if(T[i]>T[ii]) suma++;
            }
        }
        if (suma==(((n-1)*(n-1)+n)/4)) {

            licznik++;
            if(licznik==licznik_docelowy){
                cout<<"TAK"<<endl;
                out(T,n);
                return 0;
            }
        }
    }
    return 1;
}




int main()
{
    int n,k;
    cin>>n>>k;
    if(n%4==2||n%4==3){
        cout<<("NIE");
        return 0;
    }

    licznik_docelowy=k;
    int tab[n];
    for(int i=0;i<n;++i){
        tab[i]=i+1;
    }

    if(permutacje(tab,0,n)) cout<<"NIE";

    return 0;
}