#include #include #include using namespace std; int main(void) { int N, S; scanf("%d%d", &N, &S); vector P(N); // P[N] for(int i=0; i> memo; for(int mask=0; mask<1<> i & 1) { acc += P[i+n]; } } memo.emplace_back(acc, mask); } sort(begin(memo), end(memo)); int M = memo.size(); vector> res; for(int mask=0; mask<1< v; for(int i=0; i> i & 1) { v.push_back(i); acc -= P[i]; } } int lo = 0, hi = M; // [lo, hi) while(hi - lo > 1) { int md = (lo + hi) / 2; (memo[md].first < acc ? lo : hi) = md; } for(int x=lo; x acc) { break; } if(memo[x].first < acc) { continue; } vector w = v; int S = memo[x].second; for(int i=0; i> i & 1) { w.push_back(i+n); } } res.push_back(w); } } sort(begin(res), end(res)); for(vector row : res) { for(int i=0, z=row.size(); i