#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; } } } |