#include #define rep(i,a,b) for(int i=a;i> N >> S; rep(i, 0, N) cin >> P[i]; if (N == 1) { printf("1\n"); return; } int M = N / 2; vector> v; rep(mask, 0, 1 << M) { int sm = 0; rep(i, 0, M) if (mask & (1 << i)) sm += P[i]; v.push_back({ sm, mask }); } sort(v.begin(), v.end()); int MM = N - M; rep(mask, 0, 1 << MM) { int sm = 0; rep(i, 0, MM) if (mask & (1 << i)) sm += P[M + i]; auto ite = lower_bound(v.begin(), v.end(), make_pair(S - sm, -1)); while (ite != v.end()) { if (ite->first != S - sm) break; vector ans; rep(i, 0, M) if (ite->second & (1 << i)) ans.push_back(i + 1); rep(i, 0, MM) if (mask & (1 << i)) ans.push_back(M + i + 1); rep(i, 0, ans.size()) { if (0 < i) printf(" "); printf("%d", ans[i]); } printf("\n"); ite++; } } }