#CF2052D. DAG 序列化

DAG 序列化

D. DAG 序列化

时间限制:每测试 33内存限制10241024 兆字节

问题描述

考虑一个简单的单比特布尔寄存器,它支持两种操作:

  • set\text{set}:如果寄存器为 false\text{false},则将其设为 true\text{true},并返回 true\text{true};否则返回 false\text{false}
  • unset\text{unset}:如果寄存器为 true\text{true},则将其设为 false\text{false},并返回 true\text{true};否则返回 false\text{false}

寄存器的初始状态为 false\text{false}

现在有 nn 个操作 opi\mathit{op}_i1in1 \le i \le n),其中最多只有 22 个操作的返回值为 true\text{true}。 同时给定操作之间的偏序关系,以**有向无环图(DAG)**形式给出: 若存在一条边 iji \to j,表示操作 opi\mathit{op}_i 必须发生在 opj\mathit{op}_j 之前

你需要判断是否存在一个满足以下条件的操作线性序列

  1. 序列满足 DAG 给定的所有偏序约束;
  2. 按照该序列执行操作,每个操作的返回值与输入给定的结果完全一致。

如果存在,输出任意一个合法序列;否则输出 1-1


输入格式

  1. 第一行:一个整数 nn,表示操作数量(1n1051 \le n \le 10^5)。
  2. 接下来 nn 行:每行描述一个操作,格式为 类型 结果
    • 类型为 setunset
    • 结果为 truefalse
    • 保证最多 22 个操作的结果为 true\text{true}
  3. 接下来一行:一个整数 mm,表示 DAG 的边数(0m1050 \le m \le 10^5)。
  4. 接下来 mm 行:每行两个整数 a,ba, b,表示边 aba \to b1a,bn, ab1 \le a,b \le n,\ a \neq b)。

输出格式

  • 如果存在合法序列:输出 nn 个整数,表示操作的编号顺序。
  • 如果不存在:输出 1-1

输入输出样例

样例 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