小红开灯
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

平面直角坐标系上有n盏灯。
小红每次操作可以选择一盏灯,改变和它同一行以及同一列所有的灯(包括它自己)的开关状态。
用数学语言描述,若选择了坐标在(x,y)的灯,那么所有横坐标为x或者纵坐标为y的灯都将改变开关状态。

小红想知道能否经过有限次操作,最终所有灯都变成开的状态?

输入描述:

第一行输入一个正整数n,代表灯的数量。
第二行输入一个长度为n的01串,代表每个灯初始的开关状态。1代表开,0代表关。
接下来的n行,每一行输入两个整数x,y,代表每个灯所在的坐标。
1\leq n \leq 100
-10^9 \leq x,y \leq 10^9
保证任意两盏灯的坐标是不同的。

输出描述:

如果无解,请输出-1。
否则输出一个任意合法的操作方案:
第一行输出一个整数k,代表操作次数。
第二行输出k个正整数a_i,代表每次操作选择的是第几盏灯。
请保证0 \leq k \leq n,可以证明,如果存在解,那么一定存在一组不超过n次操作的合法方案。
你不需要最小化操作次数。
示例1

输入

复制
3
011
1 1
0 1
1 0

输出

复制
3
1 2 3

说明

对三盏灯分别各操作一次即可。
示例2

输入

复制
3
011
0 0
0 1
0 -1

输出

复制
-1