Pagini recente » Cod sursa (job #484838) | Cod sursa (job #2700512) | Cod sursa (job #3030848) | Cod sursa (job #2885377) | Cod sursa (job #1723463)
#include <bits/stdc++.h>
#define maxN 32
#define ll long long
using namespace std;
int n;
ll k, dp[maxN];
void read()
{
freopen("planeta.in", "r", stdin);
freopen("planeta.out", "w", stdout);
scanf("%d %lld", &n, &k);
}
void solve()
{
int i, j;
dp[1] = dp[0] = 1;
for (i = 2; i <= n; ++ i)
for (j = 0; j < i; ++ j)
dp[i] += 1LL * dp[j] * dp[i - j - 1];
}
void write(int l, int r, ll k)
{
int i = l;
if (l == r)
{
printf("%d ", i);
return ;
}
for (; dp[i - l] * dp[r - i] <= k && i <= r; ++ i)
{
k -= dp[i - l] * dp[r - i];
if (i == r)
break;
}
//-- i;
printf("%d ", i);
if (l < i)
write(l, i - 1, k / dp[r - i]);
if (r > i)
write(i + 1, r, k % dp[r - i]);
}
int main()
{
read();
solve();
write(1, n, k);
return 0;
}