Bob 是一支开发 Hypervisor 系统 MacrOS 的团队的负责人。该项目非常庞大,包含许多软件包。由于其中一些软件包可能依赖于其他软件包,因此整个系统的安装过程相当复杂。MacrOS 目前处于 Alpha 阶段,因此有许多客户正在测试这个新产品。对许多人来说,安装过程非常繁琐,不幸的是,技术支持也是 Bob 的职责。
在 Alpha 测试开始之前,程序员团队给 Bob 提供了一份依赖关系列表。每条依赖关系写着“软件包 B 依赖于 A”,即必须在安装 B 之前先安装软件包 A。简记为 A B。当然,如果软件包 C 依赖于 B,而 B 又依赖于 A,那么 C 也依赖于 A,即依赖关系具有传递性。例如,初始的依赖关系列表可能如下:
1 6 6 3 3 4 2 5
随着产品的发展,程序员有时会打电话给 Bob,告知新的依赖关系。此外,作为技术支持负责人,Bob 经常接到客户的电话,询问应该先安装哪些软件包。不出所料,在接到程序员和客户的几次电话后,Bob 意识到要同时记录依赖关系并在线回答查询是多么困难。为了使这个过程自动化,他写了一个程序,生成了两个日志文件。第一个日志文件包含所有通话的历史记录。记录 1 A B 表示程序员引入了新的依赖关系,而 0 A B 表示客户的查询,意思是“我应该在 B 之前安装 A 吗?”。第二个日志文件是给客户的所有回答的历史记录。表 1 中给出了一个例子。
经过长期的测试,MacrOS 终于准备好进入 Beta 阶段。但 Bob 想确保在 Alpha 测试期间没有出现错误。他想检查第二个日志文件中给出的回答是否正确,而你需要帮助他。然而,Bob 并没有给你第二个日志文件。此外,他以一种巧妙的方式修改了第一个日志文件:在每条应该回答为 NO 的客户电话记录之后,他开始/停止反转所有对应程序员通话的行(即,将 1 A B 变为 1 B A);参见下面的例子。考虑到 Bob 对第一个日志文件的修改,你应该给出所有客户提问的回答。
| 第一日志文件 | 第二日志文件(回答) |
|---|---|
1 1 3 |
|
0 1 3 |
YES |
1 1 4 |
|
0 5 2 |
NO |
1 3 2 |
|
1 6 5 |
|
0 1 5 |
YES |
1 4 5 |
|
0 5 3 |
NO |
1 1 2 |
| 修改后的第一日志文件 |
|---|
1 1 3 |
0 1 3 |
1 1 4 |
0 5 2 – 开始反转 |
1 2 3 |
1 5 6 |
0 1 5 |
1 5 4 |
0 5 3 – 停止反转 |
1 1 2 |
输入格式
输入包含多组测试数据。
第一行包含一个正整数 $Z \le 15$,表示测试数据的组数。接下来是 $Z$ 组测试数据,每组测试数据的格式如下:
每组测试数据的第一行包含两个整数 $n$ 和 $m$($1 \le n \le 10^5$,$0 \le m \le 10^5$),用单个空格隔开。它们分别表示 MacrOS 的软件包数量以及 Alpha 测试开始前的初始依赖关系数量。
接下来的 $m$ 行描述初始依赖关系列表。每行包含两个用单个空格隔开的数字 $A$ 和 $B$($1 \le A, B \le n$),表示软件包 $B$ 依赖于 $A$。某些依赖关系可能会多次出现,但不会出现成环的相互依赖关系(即不存在两个软件包互相依赖)。
输入的下一部分包含 Bob 修改后的第一个日志文件,格式如上所述。所有电话通话的总数最多为 $10^5$。
每组测试数据以包含三个零的行 0 0 0 结束。
输出格式
对于每组测试数据,程序应输出第二个日志文件的内容。这意味着对于输入中每个形如 0 A B 的行,如果应该先安装软件包 $A$,则输出 YES;如果应该先安装 $B$,则输出 NO。
你可以假设所有的查询都有唯一的答案,即在进行该查询时,软件包 $A$ 和 $B$ 之间已经存在确定的依赖关系。
样例
输入样例 1
2 6 4 1 6 6 3 3 4 2 5 1 1 3 0 1 3 1 1 4 0 5 2 1 2 3 1 5 6 0 1 5 1 5 4 0 5 3 1 1 2 0 0 0 6 3 1 2 5 3 4 6 1 2 5 0 1 5 1 4 1 0 3 4 0 0 0
输出样例 1
YES NO YES NO YES NO