#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define REP(i,a,n) for(int i=(a); i<(int)(n); i++) #define rep(i,n) REP(i,0,n) #define FOR(it,c) for(__typeof((c).begin()) it=(c).begin(); it!=(c).end(); ++it) #define ALLOF(c) (c).begin(), (c).end() typedef long long ll; ll N, G, p; vector P; bool operator<(const vector& a, const vector& b){ int i = 0; while(i b[i]) return false; } return a.size() < b.size(); } map > memo; int main(){ ios::sync_with_stdio(false); cin >> N >> G; rep(i,N){ cin >> p; P.push_back(p); } if(N==1){ if(G == P[0]){ cout << 0 << endl; } return 0; } int N1 = P.size()/2; int N2 = N-N1; for(int S=0; S<(1<>i)&1) sum += P[i]; } memo[sum].push_back(S); } vector< vector > ret; for(int S=0; S<(1<>i)&1) sum += P[i+N1]; } if(memo.count(G-sum) > 0){ vector v = memo[G-sum]; rep(i,v.size()){ int T = v[i]; vector w; rep(j,N1){ if((T>>j)&1) w.push_back(j+1); } rep(j,N2){ if((S>>j)&1) w.push_back(N1+j+1); } ret.push_back(w); } } } sort(ALLOF(ret)); rep(i,ret.size()){ rep(j,ret[i].size()){ if(j!=0) cout << " "; cout << ret[i][j]; } cout << endl; } return 0; }