#P12095. [NERC2024] DAG Serialization

[NERC2024] DAG Serialization

Description

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

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

寄存器的初始状态为 false\textbf{false}。假设有 nn 个操作 opiop_i1in1 \le i \le n),并且 至多有两个操作返回 true。同时,我们给出了操作的部分顺序,表示为一个有向无环图(DAG):边 iji \rightarrow j 表示 opiop_iopjop_j 之前发生。你的任务是判断是否可能将这些操作排列成某个线性顺序,使得符合给定的部分顺序,并且如果按照该顺序执行操作,得到的结果与给定的一致。

Input Format

第一行,给定一个整数 nn —— 操作的数量(1n1051 \le n \le 10^5)。接下来的 nn 行,每行给出一个操作,格式为 typeresult\textit{type} \textit{result},其中 type\textit{type}setunsetresult\textit{result}truefalse。保证最多有两个操作的结果为 true

接下来的一个整数 mm,表示有向无环图中的边数(0m1050 \le m \le 10^5)。接下来的 mm 行,每行给出一对整数 aabb1a,bn1 \le a, b \le naba \neq b),表示边 aba \rightarrow b,即操作 opaop_a 在操作 opbop_b 之前发生。

Output Format

如果存在一个线性顺序,满足有向无环图约束,并且能够使得操作的结果与给定的相符,输出任何一个满足条件的线性顺序。如果不存在这样的顺序,输出 1-1

5
set true
unset true
set false
unset false
unset false
2
1 4
5 2
5 1 3 2 4
3
unset true
unset false
set true
0
2 3 1
2
unset false
set true
1
2 1
-1
2
unset false
set false
0
-1