#include<stdio.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
#define ll __int64
#define N 15
#define M 16
ll a[27][27];
ll n;
ll cnt[N];
ll maxn;
void init()
{
ll i,j;
for(i=0;i<=16;i++)
{
for(j=0;j<=8;j++)a[i][j]=1;
}
for(i=1;i<=16;i++)
{
for(j=1;j<=8;j++)
{
a[i][j]=a[i][j-1]*(i-j+1);
}
}
for(i=1;i<=8;i++)cnt[i]=a[16][i]/16*15,maxn+=cnt[i];
}
int ans[15];
int vis[17];
int main()
{
init();
while(scanf("%I64d",&n)!=EOF)
{
if(n==546481141)
{
puts("0");continue;
}
n=maxn-n+1;
int i,j,len;
for(i=1;i<=8;i++)
{
if(n<=cnt[i])break;
n-=cnt[i];
}
len=i;
for(i=1;i<=len;i++)
{
ll temp=a[16-i][len-i];
int tt=0;
if(i==1)tt++;
while(n>temp)tt++,n-=temp;
ans[i]=tt;
}
memset(vis,0,sizeof vis);
for(i=1;i<=len;i++)
{
int p=-1;
for(j=0;j<=15;j++)
{
if(!vis[j])p++;
if(p==ans[i])break;
}
if(j>=0&&j<=9)printf("%d",j);
else printf("%c",j-10+'A');
vis[j]=1;
}
printf("\n");
}
return 0;
}