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
#include <bits/stdc++.h>
using namespace std;

int n;

long long k;

long long inf=(long long)1000000001*1000000001;

long long dp[1000007][4];

long long s;

int ost=4;

long long dod(long long v, long long u)
{
	return min(v+u, inf);
}

void wypisz(int v)
{
	if (v>0)
	{
		printf("%c", 'a'-1+v);
		return;
	}
	printf("\n");
	exit(0);
}

int main()
{
	scanf("%d%lld", &n, &k);
	for (int i=1; i<=n+1; i++)
		dp[i][0]=1;
	for (int i=n; i; i--)
	{
		for (int j=1; j<=3; j++)
			for (int l=0; l<=3; l++)
				if (j!=l)
					dp[i][j]=dod(dp[i][j], dp[i+1][l]);
	}
	for (int i=0; i<=3; i++)
		s=dod(s, dp[1][i]);
	if (s<=k)
	{
		printf("NIE\n");
		return 0;
	}
	for (int i=1; 1; i++)
	{
		for (int j=0; 1; j++)
		{
			if (j==ost)
				continue;
			if (dp[i][j]>k)
			{
				wypisz(j);
				ost=j;
				break;
			}
			k-=dp[i][j];
		}
	}
	return 0;
}