#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; int main() { ll n, s; cin >> n >> s; ll p[n]; for (int i = 0; i < n; i++) cin >> p[i]; vector a[66000]; map > memo; set > ans; for (ll i = 1; i < powl(2, n-(n/2)); i++) { ll sum = 0; for (ll j = 0, k = i; k != 0; k>>=1, j++) { if (k&1) { sum += p[j]; a[i-1].push_back(j+1); } } if (sum == s) { vector temp; for (int j = 0; j < a[i-1].size(); j++) temp.push_back(a[i-1][j]); ans.insert(temp); } memo[sum].push_back(i-1); } for (ll i = 1; i < powl(2, n/2); i++) { ll sum = 0; vector temp; for (ll j = n-(n/2), k = i; k != 0; k>>=1, j++) { if (k&1) { sum += p[j]; temp.push_back(j+1); } } if (memo.find(s-sum) != memo.end()) { for (int j = 0; j < memo[s-sum].size(); j++) { vector temp2; for (int k = 0; k < a[memo[s-sum][j]].size(); k++) temp2.push_back(a[memo[s-sum][j]][k]); for (int k = 0; k < temp.size(); k++) temp2.push_back(temp[k]); ans.insert(temp2); } }else if (sum == s) { vector temp2; for (int j = 0; j < temp.size(); j++) temp2.push_back(temp[j]); ans.insert(temp2); } } for (set >::iterator it = ans.begin(); it != ans.end(); it++) { for (int i = 0; i < (*it).size(); i++) { cout << (*it)[i] << " "; } cout << endl; } }