Pagini recente » Cod sursa (job #2943317) | Cod sursa (job #1416558) | Cod sursa (job #2539627) | Cod sursa (job #591398) | Cod sursa (job #254997)
Cod sursa(job #254997)
#include <cstdio>
using namespace std;
#define LL long long
#define MAXN 32
int N; LL M;
LL num[MAXN];
void reconstruct(int N, LL M, int begin)
{
if (N == 0)
return;
int root = 1;
for (; num[root - 1] * num[N - root] <= M; root++)
M -= num[root - 1] * num[N - root];
printf("%d ", begin + root - 1);
reconstruct(root - 1, M / num[N - root], begin);
reconstruct(N - root, M % num[N - root], begin + root);
}
int main()
{
freopen("planeta.in", "rt", stdin);
freopen("planeta.out", "wt", stdout);
scanf("%d %lld", &N, &M);
num[0] = 1;
for (int i = 1; i <= N; i++)
{
num[i] = 0;
for (int j = 1; j <= i; j++)
num[i] += num[j - 1] * num[i - j];
}
reconstruct(N, M - 1, 1);
printf("\n");
return 0;
}