#include #include #include #include #include using namespace std; int main() { int32_t N, S; cin >> N >> S; int32_t P[N]; for(int32_t i = 0; i < N; i++) cin >> P[i]; int tN = N / 2; map > hash; for(int32_t j = 0; j < (1 << tN); j++) { int32_t s = 0; for(int32_t i = 0; i < tN; i++) { if(j >> i & 1) s += P[i]; } hash[s].push_back(j); } vector > answer; for(int32_t j = 0; j < (1 << (N - tN)); j++) { int32_t s = 0; for(int32_t i = 0; i < N - tN; i++) { if(j >> i & 1) s += P[i + tN]; } for(int32_t ret: hash[S-s]) { vector single_answer; for(int32_t i = 0; i < N; i++) { if(i < tN) { if(ret >> i & 1) single_answer.push_back(i); }else{ if(j >> (i - tN) & 1) single_answer.push_back(i); } } answer.push_back(single_answer); } } sort(answer.begin(), answer.end()); for(auto single_answer: answer) { for(size_t i = 0; i < single_answer.size(); i++) { if(i) cout << " "; cout << single_answer[i] + 1; } cout << endl; } }