考虑一个支持两种操作的简单单比特布尔寄存器:
set — 如果寄存器原先为 false,则将其设为 true 并返回 true;否则返回 false;
unset — 如果寄存器原先为 true,则将其设为 false 并返回 true;否则返回 false。
寄存器的初始状态为 false。假设有 $n$ 个操作 $op_i$($1 \le i \le n$),其中至多有两个操作返回 true。此外,给定这些操作的偏序关系,表示为一个有向无环图(DAG):边 $i \to j$ 表示 $op_i$ 在 $op_j$ 之前发生。请问是否存在一种操作的线性顺序,既满足给定的偏序关系,又使得按该顺序对寄存器执行操作后,每个操作的返回结果与给定结果一致。
输入格式
第一行包含一个整数 $n$ — 操作的数量($1 \le n \le 10^5$)。接下来的 $n$ 行,以 “type result” 的格式给出操作,其中 type 为 “set” 或 “unset”,result 为 “true” 或 “false”。保证至多有两个操作的返回结果为 “true”。
下一行包含一个整数 $m$ — DAG 中弧的数量($0 \le m \le 10^5$)。接下来的 $m$ 行,给出弧 — 一对整数 $a$ 和 $b$($1 \le a, b \le n; a \neq b$)。每条弧表示操作 $op_a$ 在操作 $op_b$ 之前发生。
输出格式
输出任意一种满足 DAG 约束且操作结果与输入一致的线性操作顺序。如果不存在合法的操作顺序,输出 $-1$。
样例
样例输入 1
5 set true unset true set false unset false unset false 2 1 4 5 2
样例输出 1
5 1 3 2 4
样例输入 2
3 unset true unset false set true 0
样例输出 2
2 3 1
样例输入 3
2 unset false set true 1 2 1
样例输出 3
-1
样例输入 4
2 unset false set false 0
样例输出 4
-1