atcoder#AGC025D. [AGC025D] Choosing Points

[AGC025D] Choosing Points

配点 : 800800

問題文

高橋君は平面上の点集合について研究しています。 高橋君にとって、座標平面上の点の集合 SSいい集合 であるとは、SS が以下の条件をともに満たすことを指します。

  • SS に属するどの 22 点間の距離も D1\sqrt{D_1} でない。
  • SS に属するどの 22 点間の距離も D2\sqrt{D_2} でない。

ただし、D1,D2D_1,D_2 は高橋君の定めた正整数の定数です。

ここで、XX を座標平面上の格子点 (i,j)(i,j) であって 0i,j<2N0 \leq i,j < 2N を満たす点 (i,j)(i,j) 全体からなる集合としましょう。 研究者の高橋君は、D1,D2D_1,D_2 をどのように選んでも、XX からうまく N2N^2 個の点を選ぶことで、それらがいい集合をなすことを示しました。 しかし、実際にどのように選べばいい集合になるかは分かっていません。 そこで、高橋君の代わりに、XX のサイズ N2N^2 の部分集合であって、いい集合となるものを見つけてください。

制約

  • 1N3001 \leq N \leq 300
  • 1D12×1051 \leq D_1 \leq 2 \times 10^5
  • 1D22×1051 \leq D_2 \leq 2 \times 10^5
  • 入力される値は全て整数である

入力

入力は以下の形式で標準入力から与えられる。

NN D1D_1 D2D_2

出力

条件を満たすように選んだ相異なる N2N^2 個の点を以下の形式で出力せよ。

x1x_1 y1y_1

x2x_2 y2y_2

:

xN2x_{N^2} yN2y_{N^2}

ただし、(xi,yi)(x_i,y_i) は選んだ点の ii 番目の点を表し、xi,yix_i,y_i は整数かつ 0xi,yi<2N0 \leq x_i,y_i < 2N を満たす必要がある。 また、点はどのような順番で出力しても構わず、解が複数ある場合は、いかなるものを出力しても構わないことに注意せよ。

2 1 2
0 0
0 2
2 0
2 2

この場合 22 点間の距離としてありうる値は 22222\sqrt{2} のみであるから、確かに条件を満たします。

3 1 5
0 0
0 2
0 4
1 1
1 3
1 5
2 0
2 2
2 4