#include #include #include #include #include #include #include #include #define rep(i, n) for (int i = 0; i < (n); i++) #define rrep(i, n) for (int i = (n)-1; i >= 0; i--) using namespace std; using lli = long long int; struct node { lli in, p; }; struct zen { lli show, p; }; int main() { lli n, s; cin >> n >> s; vector p; vector f, l; vector F, L; rep(i, n) { lli v; cin >> v; p.push_back(node{i, v}); } random_shuffle(p.begin(), p.end()); rep(i, n) { if (i % 2) f.push_back(p[i]); else l.push_back(p[i]); } rep(i, 1 << f.size()) { lli temp = 0; lli sum = 0; rep(j, f.size()) { if ((i >> j) & 1) { temp += (1 << f[j].in); sum += f[j].p; } } F.push_back(zen{temp, sum}); } rep(i, 1 << l.size()) { lli temp = 0; lli sum = 0; rep(j, l.size()) { if ((i >> j) & 1) { temp += (1 << l[j].in); sum += l[j].p; } } L.push_back(zen{temp, sum}); } vector ans; for (auto j : F) for (auto i : L) { if (j.p + i.p == s) { lli data = j.show + i.show; ans.push_back(data); } } auto func = [=](lli l, lli r) { rep(i, n) { if (l % 2 != r % 2) { return l % 2 > r % 2; } else { l /= 2; r /= 2; } } }; sort(ans.begin(), ans.end(), func); for (auto j : ans) { rep(i, n) { if ((j >> i) & 1) { cout << i + 1 << ' '; } } cout << endl; } }