#if !defined(__clang__) && defined(__GNUC__) && !defined(LOCAL) #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #endif #if !defined(LOCAL) #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #elif 1 #include #else import std; #endif namespace inner { // clang-format off #define c_ constexpr #define t_ template std::vector isprime_seq(size_t size){std::vector ret(size+size%2+2);ret[0]=ret[1]=0;ret[2]=1;for(size_t i=3;i struct ratio { T n;T d; c_ ratio(T n_,T d_):n(n_/std::gcd(n_,d_)),d(d_/std::gcd(n_,d_)){}c_ ratio(T n_):n(n_),d(1){} #define o_(o,...) c_ ratio& operato##o(const ratio& r){*this={__VA_ARGS__};return *this;} o_(r+=,n*r.d+d*r.n,r.d*d);o_(r-=,n*r.d-d*r.n,r.d*d);o_(r*=,n*r.n,r.d*d);o_(r/=,n*r.d,r.d*n); #undef o_ #define o_(o) c_ ratio operato##o(const ratio& y)const{ratio r=*this;o##=y;return r;} o_(r+);o_(r-);o_(r*);o_(r/); #undef o_ }; namespace コンセプ{ t_concept func=std::is_invocable_r_v; }; t_ c_ T segtree_id(); t_auto op,auto e_> struct segtree{std::vectorv;size_t sz;static inline T e=segtree_id(); #define SEGTREE_BODY \ c_ segtree(){}\ c_ segtree(size_t sz_):v(std::bit_ceil(sz_)*2,e),sz(std::bit_ceil(sz_)){}\ c_ segtree(std::initializer_listv){init(v);}\ t_c_ segtree(const R& v_){init(v_);}\ t_c_ void init(const R& v_){using namespace std::ranges;sz=std::bit_ceil(size(v_));v.resize(std::bit_ceil(sz*2));copy(v_,v.begin()+sz);fill(v|views::drop(size(v_)),e);auto sz_=sz/2;while(sz_!=0){for(size_t i=sz_;iauto op,auto e_>requires requires{segtree_id();} struct segtree{std::vectorv;size_t sz;c_ static T e=segtree_id();SEGTREE_BODY}; t_auto e_> c_ T segtree_id(){return e_;} t_auto e_> c_ T segtree_id(){return e_();} #undef SEGTREE_BODY int main(); #undef c_ // clang-format on } // namespace inner int main() { using namespace std; using namespace std::chrono; ios::sync_with_stdio(false); cout.precision(10); #ifdef LOCAL ifstream in("case.txt"); int n; in >> n; if (n > 0) { cin.rdbuf(in.rdbuf()); for (int i = 0; i < n; i++) { cout << "\n----test case " << i << "----" << endl; auto t0 = high_resolution_clock::now(); inner::main(); auto t1 = high_resolution_clock::now(); cout << format("\n\n{},{}", i, t1 - t0) << endl; } } else if (n < 0) { } else { inner::main(); } return 0; #else inner::main(); return 0; #endif } using namespace inner; using std::cin, std::cout; #define main inner::main #include #include #include #include int main() { int64_t N, S; std::cin >> N >> S; std::vector P(N); for (auto& p : P) std::cin >> p; int l = N / 2, r = N - l; std::multimap m1, m2; std::set ans; for (int i = 0; i < (1 << l); i++) { int64_t sum = 0; for (int b = 0; b < l; b++) if (i & (1 << b)) sum += P[l - 1 - b]; m1.emplace(sum, i); } for (int i = 0; i < (1 << r); i++) { int64_t sum = 0; for (int b = 0; b < r; b++) if (i & (1 << b)) sum += P[l + r - 1 - b]; m2.emplace(sum, i); } for (auto&& [k, v] : m1) { auto [i1, i2] = m2.equal_range(S - k); for (; i1 != i2; i1++) { ans.insert(v << r | i1->second); } } for (auto a : ans | std::views::reverse) { for (int b = 0; b < N; b++) if (a & (1 << (N - 1 - b))) std::cout << b + 1 << ' '; std::cout << "\n"; } return 0; }