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
#include<cstdio>
typedef long long ll;
const int N=1000010;
const ll inf=1000000000000000010LL;
int n,i,j,k,o;ll K,t,f[N][3],g[N][3];
inline void up(ll&x,ll y){
  x+=y;
  if(x>inf)x=inf;
}
int main(){
  scanf("%d%lld",&n,&K);
  f[1][0]=f[1][1]=f[1][2]=1;
  for(i=2;i<=n;i++)for(j=0;j<3;j++)for(k=0;k<3;k++)if(j!=k)up(f[i][j],f[i-1][k]);
  for(i=1;i<=n;i++)for(j=0;j<3;j++){
    g[i][j]=g[i-1][j];
    up(g[i][j],f[i][j]);
  }
  t=g[n][0];
  up(t,g[n][1]);
  up(t,g[n][2]);
  if(t<K)return puts("NIE"),0;
  for(o=-1,i=1;;i++)for(j=0;j<3;j++)if(j!=o){
    for(t=1,k=0;k<3;k++)if(k!=j)up(t,g[n-i][k]);
    if(t<K){K-=t;continue;}
    o=j;
    putchar(j+'a');
    if(K==1)return 0;
    K--;
    break;
  }
}