の組を固定した場合にそれが条件を満たすかどうか判定することを考えます。
- のとき の bit を立てた整数 、 o のとき の bit を立てた整数 を定義すると、問題文の条件は の全てが であることと同値です(ただし、 は bit ごとの論理積を表します)。
-
o
をそれぞれ std::bitset や多倍長整数で管理することでこの問題を解くことができます。計算量は です。