#CF2052D. DAG 序列化
DAG 序列化
D. DAG 序列化
时间限制:每测试 秒 内存限制: 兆字节
问题描述
考虑一个简单的单比特布尔寄存器,它支持两种操作:
- :如果寄存器为 ,则将其设为 ,并返回 ;否则返回 。
- :如果寄存器为 ,则将其设为 ,并返回 ;否则返回 。
寄存器的初始状态为 。
现在有 个操作 (),其中最多只有 个操作的返回值为 。 同时给定操作之间的偏序关系,以**有向无环图(DAG)**形式给出: 若存在一条边 ,表示操作 必须发生在 之前。
你需要判断是否存在一个满足以下条件的操作线性序列:
- 序列满足 DAG 给定的所有偏序约束;
- 按照该序列执行操作,每个操作的返回值与输入给定的结果完全一致。
如果存在,输出任意一个合法序列;否则输出 。
输入格式
- 第一行:一个整数 ,表示操作数量()。
- 接下来 行:每行描述一个操作,格式为
类型 结果- 类型为
set或unset - 结果为
true或false - 保证最多 个操作的结果为 。
- 类型为
- 接下来一行:一个整数 ,表示 DAG 的边数()。
- 接下来 行:每行两个整数 ,表示边 ()。
输出格式
- 如果存在合法序列:输出 个整数,表示操作的编号顺序。
- 如果不存在:输出 。
输入输出样例
样例 1
输入
5
set true
unset true
set false
unset false
unset false
2
1 4
5 2
输出
5 1 3 2 4
样例 2
输入
3
unset true
unset false
set true
0
输出
2 3 1
样例 3
输入
2
unset false
set true
1
2 1
输出
-1
样例 4
输入
2
unset false
set false
0
输出
-1