#include using namespace std; #define sim template < class c #define ris return * this #define dor > debug & operator << #define eni(x) sim > typename \ enable_if(0) x 1, debug&>::type operator<<(c i) { sim > struct rge { c b, e; }; sim > rge range(c i, c j) { return rge{i, j}; } sim > auto dud(c* x) -> decltype(cerr << *x, 0); sim > char dud(...); struct debug { #ifdef LOCAL ~debug() { cerr << endl; } eni(!=) cerr << boolalpha << i; ris; } eni(==) ris << range(begin(i), end(i)); } sim, class b dor(pair < b, c > d) { ris << "(" << d.first << ", " << d.second << ")"; } sim dor(rge d) { for (auto it = d.b; it != d.e; ++it) *this << ", \0[" + 3 * (it == d.b) << *it; ris << "]"; } #else sim dor(const c&) { ris; } #endif }; #define imie(x) "[" << #x ": " << (x) << "] " const int nax=1000*1007; int q; int n; long long c; long long mini[nax]; long long maxi[nax]; void zrob(int n, long long c, int z) { if (!n) return; for (int i=1; i<=n; i++) { if (mini[i-1]+mini[n-i]+n-1<=c && maxi[i-1]+maxi[n-i]+n-1>=c) { c-=n-1; long long a=-1; long long b=-1; if (c-mini[i-1]>=mini[n-i] && c-mini[i-1]<=maxi[n-i]) { a=mini[i-1]; b=c-a; } if (c-maxi[i-1]>=mini[n-i] && c-maxi[i-1]<=maxi[n-i]) { a=mini[i-1]; b=c-a; } if (c-mini[n-1]>=mini[i-1] && c-mini[n-1]<=maxi[i-1]) { b=mini[n-1]; a=c-b; } if (c-maxi[n-1]>=mini[i-1] && c-maxi[n-1]<=maxi[i-1]) { b=maxi[n-1]; a=c-b; } printf("%d ", z+i-1); zrob(i-1, a, z); zrob(n-i, b, z+i); return; } } } int main() { for (int i=2; imaxi[n]) { printf("-1\n"); continue; } zrob(n, c, 1); printf("\n"); } return 0; }