#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int main(){ int N,S; scanf("%d%d",&N,&S); int P[N]; for( int i = 0 ; i > > p1; vector< pair > > p2; for( int i = 0 ; i < (1<<(N/2)); i++ ){ vector v; int sum =0; for( int j = 0 ; j < (N/2); j++){ if( (i&(1< v; int sum =0; for( int j = 0 ; j < (N-N/2); j++){ if( (i&(1< > ans; for( int i = 0 ; i <(int) p1.size(); i++ ){ int cost = p1[i].first; if( S-cost < 0 ) continue; int left = 0; int right = p2.size(); while( left < right ){ int mid = (left+right)/2; if( p2[mid].first < S-cost ){ left=mid+1; } else{ right=mid; } } //cout << cost << ", "<< left < ansvec; for(int j = 0 ; j < (int)p1[i].second.size(); j++ ){ ansvec.push_back(p1[i].second[j]); } for(int j = 0 ; j < (int)p2[left].second.size(); j++ ){ ansvec.push_back(p2[left].second[j]); } ans.push_back(ansvec); left++; } } sort(ans.begin(),ans.end()); for( int i = 0 ; i < (int)ans.size(); i++){ for( int j = 0 ; j < (int)ans[i].size(); j++ ){ cout << 1+ans[i][j]<<" "; } cout << endl; } return 0; }