Cod sursa(job #406418)
#include<fstream>
using namespace std;
const char iname[]="planeta.in";
const char oname[]="planeta.out";
const int maxn=35;
ifstream f(iname);
ofstream g(oname);
long long a[maxn],i,n,k,bt[maxn],j;
void calc(long long x,long long y,long long k)
{
if(x>y)
return;
if(x==y)
{
g<<x<<" ";
return;
}
long long pos=0,i;
for(i=x;i<=y;++i)
if((pos+=bt[i-x]*bt[y-i])>=k)
{
pos-=bt[i-x]*bt[y-i];
break;
}
g<<i<<" ";
calc(x,i-1,(k-pos-1)/bt[y-i]+1);
calc(i+1,y,(k-pos-1)%bt[y-i]+1);
}
int main()
{
f>>n>>k;
bt[0]=1;
for(i=1;i<=n;++i)
for(j=0;j<i;++j)
bt[i]+=bt[j]*bt[i-j-1];
calc(1,n,k);
g<<"\n";
f.close();
g.close();
return 0;
}