#include <bits/stdc++.h>
using namespace std;
#define ff first
#define dd second
#define mp make_pair
#define pb push_back
#define sz size()
#define lld long long
#define scanf(...) scanf(__VA_ARGS__)?:0
#define For(i,s,a) for(lld i=(lld)s;i<(lld)a;++i)
unsigned lld c[201][20100];
bitset<201>xd[20100];
lld dfs(lld x, lld y)
{
//cout<<x<<" "<<y<<endl;
if(!y || y==x*(x-1)/2){
c[x][y]=1;return 1;}
else
if(y<0 || y>x*(x-1)/2)
return 0;
if(c[x][y] && !xd[x][y]){//if(xd[x][y+1])xd[x][y]=1,c[x][y]=2000000000000000000;
return c[x][y];
}
else
if(xd[x][y]){c[x][y]=5000000000000000000;
return 5000000000000000000;}
c[x][y]=dfs(x,y-1)-dfs(x-1,y-x)+dfs(x-1,y);
if(c[x][y]>1000000000000000000)
xd[x][y]=1,c[x][y]=5000000000000000000;
return c[x][y];
}
int dx[250001];
bitset<250001>lewd;
int main()
{
/*
c[0][0]=c[1][0]=c[2][0]=c[2][1]=1;
For(i,2,200)
For(j,0,i*(i-1)/4+1)
dfs(i,j);*/
lld a,b,d;
scanf("%lld%lld", &a,&b);
if((a/2)&1ll){puts("NIE");return 0;}
if(b>a*(a-1)/2ll){puts("NIE");return 0;}
/*
for(int i=a;i;--i)
{
d=1;
For(j,0,i)
{
while(lewd[d])++d;
cout<<i<<" "<<j<<" "<<d<<" "<<c[i-1][max(0ll,d-j-1)]<<endl;
if((lld)c[i-1][max(0ll,d-j-1)]>(lld)b)
{
b-=c[i-1][max(0ll,d-j-1)];
}
else{
printf("xd %lld\n ",d);
lewd[d]=1;break;}
}
}*/
puts("TAK");
For(i,0,a)
dx[i]=i+1;
lld wtf=0;
while(next_permutation(dx,dx+a))
{
wtf=0;
For(i,0,a-1)
For(j,i+1,a)
if(dx[i]>dx[j])++wtf;
if(wtf==a*(a-1)/4)
--b;
if(!b)
{
For(i,0,a)
printf("%d ",dx[i]);return 0;
}
}
}
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 | #include <bits/stdc++.h> using namespace std; #define ff first #define dd second #define mp make_pair #define pb push_back #define sz size() #define lld long long #define scanf(...) scanf(__VA_ARGS__)?:0 #define For(i,s,a) for(lld i=(lld)s;i<(lld)a;++i) unsigned lld c[201][20100]; bitset<201>xd[20100]; lld dfs(lld x, lld y) { //cout<<x<<" "<<y<<endl; if(!y || y==x*(x-1)/2){ c[x][y]=1;return 1;} else if(y<0 || y>x*(x-1)/2) return 0; if(c[x][y] && !xd[x][y]){//if(xd[x][y+1])xd[x][y]=1,c[x][y]=2000000000000000000; return c[x][y]; } else if(xd[x][y]){c[x][y]=5000000000000000000; return 5000000000000000000;} c[x][y]=dfs(x,y-1)-dfs(x-1,y-x)+dfs(x-1,y); if(c[x][y]>1000000000000000000) xd[x][y]=1,c[x][y]=5000000000000000000; return c[x][y]; } int dx[250001]; bitset<250001>lewd; int main() { /* c[0][0]=c[1][0]=c[2][0]=c[2][1]=1; For(i,2,200) For(j,0,i*(i-1)/4+1) dfs(i,j);*/ lld a,b,d; scanf("%lld%lld", &a,&b); if((a/2)&1ll){puts("NIE");return 0;} if(b>a*(a-1)/2ll){puts("NIE");return 0;} /* for(int i=a;i;--i) { d=1; For(j,0,i) { while(lewd[d])++d; cout<<i<<" "<<j<<" "<<d<<" "<<c[i-1][max(0ll,d-j-1)]<<endl; if((lld)c[i-1][max(0ll,d-j-1)]>(lld)b) { b-=c[i-1][max(0ll,d-j-1)]; } else{ printf("xd %lld\n ",d); lewd[d]=1;break;} } }*/ puts("TAK"); For(i,0,a) dx[i]=i+1; lld wtf=0; while(next_permutation(dx,dx+a)) { wtf=0; For(i,0,a-1) For(j,i+1,a) if(dx[i]>dx[j])++wtf; if(wtf==a*(a-1)/4) --b; if(!b) { For(i,0,a) printf("%d ",dx[i]);return 0; } } } |
English