import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.math.BigInteger;
import java.util.Scanner;
public class slo {
	private static BigInteger L,K,L3,L32,LeftCount,h,start,end;
	private static int n;
	private static char c;
	private static BufferedWriter log = new BufferedWriter(new OutputStreamWriter(System.out));
	
	public static void main(String[] args) throws IOException {
		
		Scanner sc=new Scanner(System.in);
		n=sc.nextInt();
		K=BigInteger.valueOf(sc.nextLong());
		L3=BigInteger.ONE.shiftLeft(n).subtract(BigInteger.ONE);
		L32=L3.shiftLeft(1);
		L=L3.add(L32);
		if (L.subtract(K).signum()>=0) {
			if (L3.compareTo(K)>=0){
				c='a';
			}else if (L32.compareTo(K)>=0){
				K=K.subtract(L3);
				c='b';
			}else{
				K=K.subtract(L32);
				c='c';
			}
			start=BigInteger.ONE;
			end=L3;
			SearchTree();
			log.flush();
		} else {
			System.out.println("NIE");
		}
		sc.close();
	}
	
	private static void SearchTree() throws IOException{
		log.append(c);
		if (K.compareTo(start)!=0) {
			LeftCount=end.subtract(start).shiftRight(1);
			h=start.add(LeftCount);
			if (K.compareTo(h)>0) {
				c=getWorseChar(c);
				start=h.add(BigInteger.ONE);
				SearchTree();
			} else {
				c=getBetterChar(c);
				start=start.add(BigInteger.ONE);
				end=h;
				SearchTree();
			}
		}
	}
	
	private static char getBetterChar(char c){
		return c=='a'?'b':'a';
	}
	
	private static char getWorseChar(char c){
		return c=='c'?'b':'c';
	}
}
        | 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 | import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.math.BigInteger; import java.util.Scanner; public class slo { private static BigInteger L,K,L3,L32,LeftCount,h,start,end; private static int n; private static char c; private static BufferedWriter log = new BufferedWriter(new OutputStreamWriter(System.out)); public static void main(String[] args) throws IOException { Scanner sc=new Scanner(System.in); n=sc.nextInt(); K=BigInteger.valueOf(sc.nextLong()); L3=BigInteger.ONE.shiftLeft(n).subtract(BigInteger.ONE); L32=L3.shiftLeft(1); L=L3.add(L32); if (L.subtract(K).signum()>=0) { if (L3.compareTo(K)>=0){ c='a'; }else if (L32.compareTo(K)>=0){ K=K.subtract(L3); c='b'; }else{ K=K.subtract(L32); c='c'; } start=BigInteger.ONE; end=L3; SearchTree(); log.flush(); } else { System.out.println("NIE"); } sc.close(); } private static void SearchTree() throws IOException{ log.append(c); if (K.compareTo(start)!=0) { LeftCount=end.subtract(start).shiftRight(1); h=start.add(LeftCount); if (K.compareTo(h)>0) { c=getWorseChar(c); start=h.add(BigInteger.ONE); SearchTree(); } else { c=getBetterChar(c); start=start.add(BigInteger.ONE); end=h; SearchTree(); } } } private static char getBetterChar(char c){ return c=='a'?'b':'a'; } private static char getWorseChar(char c){ return c=='c'?'b':'c'; } } | 
 
            
         English
                    English