正の整数からなる \(N \times N\) 行列であって、各行、各列、両対角線についてそれぞれの総 XOR が \(0\) であるものを、大きさ \(N\) のよい行列といいます。
より厳密には、\(N \times N\) 行列 \(A\) であって、以下の条件をすべて満たすものを大きさ \(N\) のよい行列といいます。ここで、\(x \oplus y\) は \(x\) と \(y\) のビット単位 XOR を表し、\(\displaystyle \bigoplus_{i=1}^{N} a_i = a_1 \oplus \ldots \oplus a_N\) です。
正の整数 \(N\) が与えられます。
大きさ \(N\) のすべてのよい行列のうち、全要素の総和 \(\displaystyle \sum_{1 \le i, j \le N} A_{i, j}\) が最小であるものを \(1\) つ出力してください。
ただし、大きさ \(N\) のよい行列が存在しない場合は、そのことを報告してください。
\(1\) 行に整数 \(N\) が入力される。( \(1 \le N \le 2\times 10^3\) )
大きさ \(N\) のよい行列が存在しない場合、\(1\) 行に \(-1\) を出力せよ。
存在する場合、\(1\) 行目に全要素の総和の最小値を出力せよ。
続く \(N\) 行に、それを達成する行列 \(A\) を空白区切りで出力せよ。つまり、\(i+1\) 行目には行列 \(A\) の \(i\) 行目の要素を空白区切りで出力せよ。
解が複数存在する場合、どれを出力してもよい。
2
4 1 1 1 1
1
-1
最初のケースについて、各行、各列、両対角線についてそれぞれの総 XOR が \(0\) であり、これはよい行列の条件を満たしています。また、大きさ \(2\) のすべてのよい行列について、全要素の総和を \(4\) より小さくできないので、最小値は \(4\) です。
\(2\) つ目のケースについて、大きさ \(1\) のよい行列は存在しないため、\(-1\) を出力します。
非負整数 \(x,y\) のビット単位 XOR \(x \oplus y\) は以下のように定義されます。
例えば、\(3 \oplus 5 = 6\) となります(二進表記すると \(011 \oplus 101 = 110\) )。