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
#include<bits/stdc++.h>
#define VAR(i,n) __typeof(n) i = (n)
#define loop(i,j,s) for(int i=j;i<s;i++)
#define loopback(i,j,s) for(int i=j;i>=s;i--)
#define foreach(i,c) for(VAR(i,(c).begin());i!=(c).end();i++)
#define pln( x ) cout << x << "\n"
#define ps( x ) cout << x << " "
#define entr cout << "\n"
#define pcnt(i) __builtin_popcount(i)
#define ll long long
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define SIZE(c) (c).size()
#define ALL(c) (c).begin(), (c).end()
using namespace std;
typedef vector<int> VI;
ll maxi=1e18+2;
const ll INFTY=maxi+2;
const int MAX=75;
const int MOD=10000000;

void coutTab(int* tab,int n){
	loop(i,0,n){
		cout<<tab[i]<<" ";
	}
	cout<<"\n";
}
//------------------------------------------
ll dp[MAX][MAX][MAX*MAX/2];
int ans[MAX];
int main(){
	ios_base::sync_with_stdio(0);
	int n;
	ll q;
	//pln(2*INFTY);
	cin>>n>>q;
	dp[1][1][0]=1;
	dp[2][1][0]=1;
	dp[2][2][0]=0;
	dp[2][2][1]=1;
	loop(i,3,n+1){
		loop(j,1,i+1){
			loop(k,0,min(i*(i-1)/2,n*(n-1)/4)+1){
				loop(l,1,i+1){
					if(k-j+1>=0){ 
						dp[i][j][k]+=dp[i-1][l][k-j+1];
						if(dp[i][j][k]>INFTY) dp[i][j][k]=INFTY;
					}
				}
			}	
		}
	}
	int N=n;
	ll L=(N-1)*N/4;ll k=0;
	loop(i,1,N+1){
		int j=0;
		while(k<q&&j<N){
			j++;
			k+=dp[N-i+1][j][L];
		}
		k-=dp[N-i+1][j][L];
		ans[i]=j;
		//ps(j+toAdd[j]);
		L-=(j-1);
		//pln(L);
		//loop(m,j,22) toAdd[m]++;
	}
	loopback(i,N,1){
		//pln(ans[i]);
		loop(j,i+1,N+1){
			if(ans[j]>=ans[i]) ans[j]++;
		}
	}
	if(L!=0||(n*(n-1))%4!=0||(n==1&&q>1)) pln("NIE");
	else{
		pln("TAK");
		loop(i,1,n+1){
			ps(ans[i]);
		}
		entr;
	}
	
}