module main; // https://yang33-kassa.jp/yukicoder/yukicoder015/ より import std; void main() { // 入力 long N, S; readln.chomp.formattedRead("%d %d", N, S); auto A = new long[](N); foreach (ref a; A) a = readln.chomp.to!long; // 答えの計算(半分全列挙、ビットDP) alias P = Tuple!(long, long); P[] V; long n1 = N / 2; foreach (i; 0 .. 1L << n1) { long sum = 0, bit = 0; foreach (j; 0 .. n1) { if (i & (1L << j)) { sum += A[j]; bit += 1L << (N - j); } } V ~= P(sum, bit); } V.sort; long n2 = N - n1; long[] ans; foreach (i; 0 .. 1L << n2) { long sum = 0, bit = 0; foreach (j; 0 .. n2) { if (i & (1 << j)) { sum += A[n1 + j]; bit += 1L << (N - n1 - j); } } foreach (v; V.filter!(a => a[0] == S - sum)) { if (v[0] + sum == S) ans ~= v[1] | bit; } } // 答えの出力 ans.sort!"a > b"; foreach (a; ans) { bool ok = false; foreach (k; 0 .. N) { if (a & (1L << (N - k))) { if (ok) write(" "); ok = true; write(k + 1); } } if (ok) writeln(); } }