#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define BET(a,b,c) ((a)<=(b)&&(b)<(c)) #define FOR(i,n) for(int i=0,i##_end=(int(n));i VI; typedef vector VVI; void construct(const VI& P, map>& sumToBitsTable ){ int n = SZ(P); VI dp(1<>N>>S; VI P(N); FOR(i,N) cin>>P[i]; int s1 = N / 2; int s2 = N - N / 2; VI P1, P2; FOR(i,N) { if(i < s1) P1.push_back(P[i]); else P2.push_back(P[i]); } map > m1, m2; construct(P1, m1); construct(P2, m2); VVI ans; for(const auto& p : m1){ int v1 = p.first; int v2 = S - v1; auto it = m2.find(v2); if(it == m2.end()) continue; for(auto b1 : p.second){ for(auto b2 : it->second) { int x = b1 | (b2 << s1); VI v; FOR(i,N) if(x & (1<