配点 : 1400 点
問題文
正整数 N と、長さ 2N の 0 か 1 からなる数列 A0,A1,…,A2N−1 が与えられます。
2N 個すべての S⊆{0,1,…,N−1} について、以下の条件を満たす閉曲線 C が存在するか判定し、存在する場合はひとつ構成してください。
- x=∑i∈S2i とする。また、点集合 BS を {(i+0.5,0.5)∣i∈S} と定義する。
- 閉曲線 C を BS を通らずに連続的に動かして、閉曲線上のすべての点の y 座標を負にするような方法が存在するならば、Ax=1 である。
- 閉曲線 C を BS を通らずに連続的に動かして、閉曲線上のすべての点の y 座標を負にするような方法が存在しないならば、Ax=0 である。
出力方法に関しては、"出力" のチャプターを読んでください。
補足
C が閉曲線であるとは、次のように定義される。
- C は [0,1] から R2 への連続関数であり、C(0)=C(1) を満たす。
閉曲線 C を点集合 X を通らずに閉曲線 D に連続的に動かせるとは、次のように定義される。
- 次の条件を満たす関数 f:[0,1]×[0,1]→R2 が存在する。- f は連続。
- f(0,t)=C(t)
- f(1,t)=D(t)
- f(x,t)∈/X
- f は連続。
- f(0,t)=C(t)
- f(1,t)=D(t)
- f(x,t)∈/X
制約
- 1≤N≤8
- Ai=0,1(0≤i≤2N−1)
- A0=1
入力
入力は以下の形式で標準入力から与えられる。
N
A0A1⋯A2N−1
出力
条件を満たす閉曲線が存在しないならば Impossible
と出力せよ。
存在するならば、まず 1 行目に Possible
と出力せよ。
その後、以下の形式で構成した閉曲線を出力せよ。
L
x0 y0
x1 y1
:
xL yL
これは、閉曲線として (x0,y0),(x1,y1),…,(xL,yL) をこの順に通る閉折れ線を選ぶことを意味する。
出力は次の条件を満たしている必要がある。
- 0≤xi≤N, 0≤yi≤1, xi,yi は整数 (0≤i≤L)
- ∣xi−xi+1∣+∣yi−yi+1∣=1 (0≤i≤L−1)
- (x0,y0)=(xL,yL)
また、閉曲線の長さ L は、 0≤L≤250000 を満たす必要がある。
もとの問題で条件を満たす閉曲線が存在するならば、この出力形式のもとでも存在することが証明できる。
1
10
Possible
4
0 0
0 1
1 1
1 0
0 0
S=∅ のときは閉曲線上のすべての点の y 座標を負にすることが可能です。
S={0} のときはどのようにしても閉曲線上のすべての点の y 座標を負にすることはできません。
2
1000
Possible
6
1 0
2 0
2 1
1 1
0 1
0 0
1 0
出力は図のような閉曲線を表しています。
2
1001
Impossible
1
11
Possible
0
1 1