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
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <cstdio>
#include <cmath>

short int litery[1000003];

int main()
{
    int n;
    int i;
    int wczesniejsza;
    unsigned long long int k;
    unsigned long long int h;
    unsigned long long int m;

    scanf("%d %llu",&n,&k);
    if(n<59)
    {
       if(k>3*(pow(2,n)-1))
       {
            printf("NIE");
       }
       else
       {
           m=((pow(2,n)-1));
           h=ceil(double(k)/double(m));
           if(h==0)
                h=1;
           k=k-(h-1)*m;
           //printf("%llu %llu\n",h,k);
           litery[0]=h;
           wczesniejsza=litery[0];
           for(i=1;;i++)
           {
                if(k==1)
                    break;
                m=pow(2,n-i+1)-2;
                k=k-1;
                h=ceil(2*double(k)/double(m));
                if(h==0)
                    h=1;
                m=m/2;
                k=k-(h-1)*m;
                //printf("%llu\n",m);
                if(wczesniejsza==1 && h==1)
                    litery[i]=2;
                if(wczesniejsza==1 && h==2)
                    litery[i]=3;
                if(wczesniejsza==2 && h==1)
                    litery[i]=1;
                if(wczesniejsza==2 && h==2)
                    litery[i]=3;
                if(wczesniejsza==3 && h==1)
                    litery[i]=1;
                if(wczesniejsza==3 && h==2)
                    litery[i]=2;
                wczesniejsza=litery[i];
           }
           for(int a=0;a<i;a++)
           {
               if(litery[a]==1)
                printf("a");
               if(litery[a]==2)
                printf("b");
               if(litery[a]==3)
                printf("c");
           }
       }

    }
    else
    {
       m=((pow(2,n)-1));
       h=ceil(double(k)/double(m));
       if(h==0)
            h=1;
       k=k-(h-1)*m;
       //printf("%llu %llu\n",h,k);
       litery[0]=h;
       wczesniejsza=litery[0];
       for(i=1;;i++)
       {
            if(k==1)
                break;
            m=pow(2,n-i+1)-2;
            k=k-1;
            h=ceil(2*double(k)/double(m));
            if(h==0)
                h=1;
            m=m/2;
            k=k-(h-1)*m;
            //printf("%llu\n",m);
            if(wczesniejsza==1 && h==1)
                litery[i]=2;
            if(wczesniejsza==1 && h==2)
                litery[i]=3;
            if(wczesniejsza==2 && h==1)
                litery[i]=1;
            if(wczesniejsza==2 && h==2)
                litery[i]=3;
            if(wczesniejsza==3 && h==1)
                litery[i]=1;
            if(wczesniejsza==3 && h==2)
                litery[i]=2;
            wczesniejsza=litery[i];
       }
       for(int a=0;a<i;a++)
       {
           if(litery[a]==1)
            printf("a");
           if(litery[a]==2)
            printf("b");
           if(litery[a]==3)
            printf("c");
       }
   }

    return 0;
}