import std.algorithm; import std.array; import std.ascii; import std.container; import std.conv; import std.math; import std.numeric; import std.range; import std.stdio; import std.string; import std.typecons; import core.bitop; void log(A...)(A arg) { stderr.writeln(arg); } int size(T)(in T s) { return cast(int)s.length; } void main() { int N; readf("%d\n", &N); auto A = readln.chomp.split(" ").map!(to!int).array; int M; readf("%d\n", &M); auto B = readln.chomp.split(" ").map!(to!int).array; auto pos = new int[][M]; for (int bit = 0; bit < (1<= sum) { pos[i] ~= bit; } } } foreach (int i, b; B) { auto del = new bool[pos[i].size]; foreach (j, p; pos[i]) { foreach (k, q; pos[i]) { if (j == k) continue; if ((p & q) == q) { del[k] = true; } } } int[] npos; foreach (j, p; pos[i]) { if (del[j]) continue; npos ~= p; } pos[i] = npos; } auto dp = new bool[][](1<