#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>

using namespace std;
typedef long long ll;
ll binpow(ll a,ll b)
{
	if (b==0) return 1;
	if (b%2==0) 
	{
		ll res=binpow(a,b/2);
		return res*res;
	}
	else 
		return binpow(a,b-1)*a;
}
ll factorial_a_b(ll a,ll b)
{
	ll res=1;
	for (ll i=a;i<=b;i++)
		res*=i;
	return res;
}
ll number(ll cur)
{
	ll res=0;
	while((1LL<<res)<cur)
		res++;
	return res-1;
}
int main()
{
	ll n=0,k=0;
	cin >> n >> k;
	vector<pair<char,char> > letters(3);
	letters[0]=make_pair('b','c');
	letters[1]=make_pair('a','c');
	letters[2]=make_pair('a','b');
	if (n <= 59 && 3*binpow(2,n)-3 < k)
		cout << "NIE";
	else 
	{
		string ans="";
		ll qwerty = n < 62 ? (binpow(2,n)-1) : (long long)3e18;
		// - qaz = binpow(2,n)-1
		// + qaz = n < 62 ? (binpow(2,n)-1) : (long long)6e18
		//определим первую букву искомого слова
		if (2*(qwerty) >= k && k > qwerty)
		{
			ans.push_back('b');
			k-=qwerty;
		}
		else if (k <= qwerty)
			{
				ans.push_back('a');
			}
		else 
		{
			ans.push_back('c');
			k-=2*(qwerty);
		}
		k--;
		//определили первую букву и локальный номер k
		for (int ind=2;ind<=n;ind++)
		{
			//определим текущую букву
			// у нас осталось слово, длиной n-ind+1 букв, 
			//текущая последняя буква равна s[ind-1]
			// ll _q = (((n-ind+1) < 62) ? (1LL << (n-ind+1)) : (long long)6e18)
			 ll _q = (((n-ind+1) < 62) ? ((1LL << (n-ind+1))-1) : (long long)3e18);
			if (k > _q)
			{
				ans.push_back(letters[ans[ind-2]-'a'].second);
				k-=_q;
				k--;
			}
			else if (k!=0)
				{
					ans.push_back(letters[ans[ind-2]-'a'].first);
					k--;
			}
		}
		cout << ans;
	}
	system("pause");
	return 0;
}

