疯狂动物城
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 64 M,其他语言128 M
64bit IO Format: %lld

题目描述

动物城中有四类动物 A,B,C,D,这四类动物的食物链构成了有趣的环形。

A 吃 B,B 吃 C,C 吃 D,D 吃 A。

现有 N 个动物,以 1∼N 编号。

每个动物都是 A,B,C,D 中的一种,但是我们并不知道它到底是哪一种。

有人用三种说法对这 N 个动物所构成的食物链关系进行描述:

第一种说法是 1 X Y,表示 X 和 Y 是同类。

第二种说法是 2 X Y,表示 X 吃 Y。

第三种说法是 3 X Y,表示 X 和 Y 不是同类,且X 不吃 Y ,Y 也不吃 X。

此人对 N 个动物,用上述三种说法,一句接一句地说出 K 句话,这 K 句话有的是真的,有的是假的。

当一句话满足下列三条之一时,这句话就是假话,否则就是真话。

当前的话与前面的某些真的话冲突,就是假话;
当前的话中 X 或 Y 比 N 大,就是假话;
当前的话表示 X 和 X不是同类,就是假话。
你的任务是根据给定的 N 和 K 句话,输出假话的总数。

输入描述:

第一行是两个整数 N 和 K,以一个空格分隔。(1≤ N ≤50000,0≤ K ≤100000)

以下 K 行每行是三个正整数 D,X,Y,两数之间用一个空格隔开,其中 D 表示说法的种类。

若 D=1,则表示 X 和 Y 是同类。

若 D=2,则表示 X 吃 Y。

若 D=3,则表示 X 和 Y 不是同类,且X 不吃 Y ,Y 也不吃 X。(1≤ X,Y ≤ 50000)

输出描述:

只有一个整数,表示假话的数目。
示例1

输入

复制
10 12
1 1 100
2 1 2
2 2 3
2 3 4
2 4 5
3 5 7
1 4 8
3 8 6
1 1 6
2 5 6
3 3 1
1 2 8

输出

复制
3