题目描述
给定一个正整数 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。
- 如果不存在上述方法,则 Ax=0。
关于输出方式,请阅读“输出格式”章节。
输入格式
输入通过标准输入给出,格式如下:
N A0A1⋯A2N−1
输出格式
如果不存在满足条件的闭曲线,则输出 Impossible。
如果存在,首先输出一行 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
输入
1
10
输出
Possible
4
0 0
0 1
1 1
1 0
0 0
样例 2
输入
2
1000
输出
Possible
6
1 0
2 0
2 1
1 1
0 1
0 0
1 0
样例 3
输入
2
1001
输出
Impossible
样例 4
输入
1
11
输出
Possible
0
1 1
说明/提示
补充说明
闭曲线 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
约束条件
- 1≤N≤8
- Ai=0 或 1,0≤i≤2N−1
- A0=1
样例解释 1
当 S=∅ 时,可以将闭曲线上的所有点的 y 坐标变为负数。 
当 S={0} 时,无论如何都无法使闭曲线上的所有点的 y 坐标变为负数。 
样例解释 2
输出表示如图所示的闭曲线。 
由 ChatGPT 4.1 翻译