#include #include #include #include using namespace std; using int64 = long long; map> mp; int main() { int N, S; cin >> N >> S; vector P(N); for (int i = 0; i < N; i++) { cin >> P[i]; } int N1 = N / 2, N2 = N - N1; for (int64 mask = 0; mask < (1 << N2); mask++) { int sum = 0; for (int i = 0; i < N2; i++) { if ((mask >> i) & 1) { sum += P[N1 + i]; } } mp[sum].push_back(mask); } vector> ans; for (int64 mask = 0; mask < (1 << N1); mask++) { int sum = 0; for (int i = 0; i < N1; i++) { if ((mask >> i) & 1) { sum += P[i]; } } for (int mask2 : mp[S - sum]) { vector items; for (int i = 0; i < N1; i++) { if ((mask >> i) & 1) items.push_back(i + 1); } for (int i = 0; i < N2; i++) { if ((mask2 >> i) & 1) items.push_back(N1 + i + 1); } ans.push_back(items); } } sort(ans.begin(), ans.end()); for (auto items : ans) { for (int it : items) { cout << it << " "; } cout << endl; } return 0; }