#include #include using namespace std ; using ll = long long ; const ll INF = 2'000'000'000'000'000'000LL ; ll add(ll a, ll b) { ll c = a + b ; if (c >= INF) return INF ; return c ; } ll mul(ll a, ll b) { if (b > 0 && a > INF / b) return INF ; return a * b ; } const int MAX = 128 ; ll c[MAX][MAX], f[MAX], g[MAX][MAX] ; ll g3(ll n, ll m, ll x) { return mul(c[x][m], g[n-m][x-m]) ; } int main(int argc, char *argv[]) { f[0] = 1 ; for (int i=1; i> n >> p >> k ; vector used(n) ; ll matchable = n ; ll thiscnt = 0 ; k-- ; if (g3(n, p, n) <= k) cout << -1 ; else for (int pos=0; pospos)) ; if (thiscnt > k) { if (pos) cout << " " ; cout << (dig + 1) ; if (dig > pos) matchable-- ; if (dig == pos) p-- ; used[dig]++ ; break ; } else k -= thiscnt ; } } cout << endl ; }