夜之城
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

零和矩阵回环?说真的,V,荒坂给这破网络起的名倒是挺唬人。代码矩阵就藏在核心机房的虚拟镜像里,那些跳来跳去的二进制流?别信它们的规律,那是荒坂的AI故意下的套。看见数据流里偶尔闪一下的红色脉冲没?那是上一个破解者的最后信号——他试图硬闯,结果被矩阵拆成了128段,现在还在里面哀嚎。倒计时开始了,V,我给你算好了,从接入到攻破核心,你只有两秒钟的时间。超时?荒坂的反制程序会把你的意识拆成0和1,贴在他们的网络公告栏上,标题就叫“又一个不自量力的赛博疯子”。
夜之城普普通通的五星好市民V正在入侵荒坂网络,然而攻破荒坂的加密系统太难了,于是V向擅长编程的你寻求帮助。

荒坂公司有一套加密系统,其本质是一个 nn 列的代码矩阵,初始时矩阵为空,系统会进行 m 次操作,每次操作会在矩阵中添加一个数字,第 i 次操作是 (X_i,Y_i,V_i),表示在矩阵的第 X_i 行第 Y_i 列添加一个数字 V_i。每次操作后,你需要判断当前矩阵是否是可破解的。

破解矩阵需要找到矩阵中所有破解序列,破解序列是按照特定规则在矩阵中选择数字形成的多重集。

一条破解序列的生成规则如下:

首先将矩阵内所有数字标记为可选数字。

第 1 步:任选一个可选数字,坐标为 (x_1,y_1),将该数字标记为不可选。

第 2 步:从第 x_1 行中任选一个可选数字,坐标为 (x_1,y_2),然后将第 x_1 行的所有数字标记为不可选。

第 3 步:从第 y_2 列中任选一个可选数字,坐标为 (x_3,y_2),然后将第 y_2 列的所有数字标记为不可选。

第 4 步:从第 x_3 行中任选一个可选数字,坐标为 (x_3,y_4),然后将第 x_3 行的所有数字标记为不可选。

...

第 2k 步:从第 x_{2k-1} 行中任选一个可选数字,坐标为 (x_{2k-1},y_{2k}),然后将第 x_{2k-1} 行的所有数字标记为不可选。

第 2k+1 步:从第 y_{2k} 列中任选一个可选数字,坐标为 (x_{2k+1},y_{2k}),然后将第 y_{2k} 列的所有数字标记为不可选。

终止条件:

  • 情况1:某一步(除了第一步)选到的数字与第一步所选数字在同一列。此时停止选择,被选中的数字形成一条破解序列。
  • 情况2:始终不满足情况1,并且无法继续选择。此时也停止选择,但是没有形成破解序列。

一条破解序列是可破解的当且仅当该序列内所有数字的异或和为 0

一个矩阵是可破解的当且仅当该矩阵中所有破解序列都是可破解的。特别地,如果一个矩阵中没有破解序列,那么该矩阵也是可破解的。

你的任务是每次操作后,判断当前矩阵是否是可破解的。

输入描述:

第一行包含一个整数 T(1\le T \le 10^4),表示测试数据的组数。

对于每组测试数据:

第一行包含两个整数 n, m(1\le n \le 10^5,1\le m \le 2\times 10^5),分别表示矩阵的大小和操作的次数。

接下来 m 行,每行包含三个整数 X_i, Y_i, V_i(1\le X_i,Y_i \le n,0\le V_i \le 10^9),表示在矩阵的第 X_i 行第 Y_i 列添加一个数字 V_i

保证每组测试数据中添加的坐标互不相同。

保证所有测试数据的 m 的总和不超过 2\times 10^5

输出描述:

对于每组测试数据,输出共 m 行,若第 i 次操作后矩阵是可破解的,输出 YES;否则输出 NO。
示例1

输入

复制
1
3 7
1 1 1
1 2 0
2 2 1
2 1 0
2 3 255
3 2 6
3 3 181

输出

复制
YES
YES
YES
YES
YES
YES
NO

说明

第一次操作后:选择 (1,1) 后没有可选数字,符合情况2,没有破解序列,矩阵可破解。

第三次操作后:先选择 (1,2),再选择 (1,1),此时虽然 (2,2) 是可选数字,但是按照规则此时要从第1列中选择,但是第1列没有可选数字,符合情况2,因此没有形成破解序列。当前矩阵无论怎么选都无法形成破解序列,因此矩阵可破解。

第四次操作后:矩阵中只有一条破解序列 \{0,0,1,1\}:(1,1)\rightarrow (1,2)\rightarrow (2,2)\rightarrow (2,1),破解序列内所有数字的异或和 0,矩阵可破解。

第七次操作后:有三条破解序列,分别是 \{0,0,1,1\}:(1,1)\rightarrow (1,2)\rightarrow (2,2)\rightarrow (2,1)\{1,6,181,255\}:(2,2)\rightarrow (2,3)\rightarrow (3,3)\rightarrow (3,2)\{0,0,1,6,181,255\}:(2,3)\rightarrow (2,1)\rightarrow (1,1)\rightarrow (1,2)\rightarrow (3,2)\rightarrow (3,3),后两条破解序列的异或和不为 0,因此矩阵不可破解。
示例2

输入

复制
2
3 4
2 1 1
1 2 1
2 2 1
1 1 0
5 16
2 3 1
4 1 2
4 3 1
4 2 3
3 4 1
5 5 2
1 4 1
3 5 2
1 1 0
4 4 3
2 1 2
2 5 0
2 4 3
5 3 1
2 2 1
5 1 2

输出

复制
YES
YES
YES
NO
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
YES
NO
NO
NO