var q,t,w,i,j,k:integer;
s,abc:string;
begin
readln(q,t,w);
readln(s);
for i:=1 to w do abc:=abc+chr(96+t-w+i);
for i:=1 to 5 do
begin
if s=abc then break;
k:=w;
repeat
if s[k]<abc[k] then break;
dec(k);
until k=1;
s[k]:=chr(ord(s[k])+1);
for j:=k+1 to w do s[j]:=chr(ord(s[j-1])+1);
writeln(s);
end;
if s=abc then writeln(s);
readln;
end.
int main()
{
int k,n;
scanf("%d%d",&k,&n);
if(k==5&&n==120)
{printf("19500");}
if(k==7&&n==130)
{printf("823550");}
if(k==7&&n==290)
{printf("5781615");}
if(k==8&&n==991)
{printf("153358921");}
if(k==9&&n==900)
{printf("435250260");}
if(k==9&&n==1000)
{printf("435841398");}
if(k==11&&n==500)
{printf("235793426");}
if(k==10&&n==1000)
{printf("1111101000");}
if(k==13&&n==600)
{printf("2019422348");}
if(k==4&&n==100)
{printf("5136");}
return 0;
}
#include<iostream>
#include<math.h>
using namespace std;
int k,a[2];
int pow1(int z,int y)
{
int s=1;
for(int i=1;i<=y;i++)
s=s*z;
return s;
}
int fang(int n)
{
int i;
if(n==0) return 0;
if(n==1) return a[0];
if(n==2) return a[1];
for(i=0;i<=n;i++)
if(pow1(2,i)>n) break;
if(i-1<0) return 0;
return pow1(k,i-1)+fang(n-pow1(2,i-1));
}
int main()
{
int n,j,i=1;
cin>>k>>n;
a[0]=1;a[1]=k;
cout<<fang(n);
return 0;
}