constint N = 31; bool dp[N][N][N*(N-1)/2]; structSol { int cur, j, k; } pre[N][N][N*(N-1)/2];
voidsolve(){ int n, tar; cin >> n >> tar; tar = n * (n-1) / 2 - tar; for (int i = 0; i <= n; i++) { for (int j = 0; j <= n; j++) { for (int k = 0; k <= tar; k++) { dp[i][j][k] = 0; pre[i][j][k] = {-1, -1, -1}; } } } dp[0][0][0] = true; for (int i = 0; i < n; i++) { for (int j = 0; j <= n; j++) { for (int k = 0; k <= tar; k++) { if (!dp[i][j][k]) continue; for (int l = 0; j+l*(i+1) <= n && k+l*(i+1)*i/2 <= tar; l++) { dp[i+1][j+l*(i+1)][k+l*(i+1)*i/2] = true; pre[i+1][j+l*(i+1)][k+l*(i+1)*i/2] = {l, j, k}; } } } }
int now = n; auto print = [&](int s){ for (int i = now-s+1; i <= now; i++) { cout << i << ' '; } now -= s; }; if (!dp[n][n][tar]) cout << "0\n"; else { int i = n, j = n, k = tar; for (int i = n; i >= 1; i--) { Sol s = pre[i][j][k]; j = s.j; k = s.k; for (int q = 1; q <= s.cur; q++) { print(i); } } cout << '\n'; } }
signedmain(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int T; cin >> T; while (T--) solve(); return0; }