编程题
### 问题描述
在流水线 CPU 的执行过程中我们知道存在多种冒险行为,现在给出了一段汇编代码,请问**最少**删除几条语句(其余代码语句顺序不变)可以使得这段汇编代码不会产生冒险行为(**不需要**保证代码的语义不变)。
为了简化题目,这段代码仅有加、减、和异或三种运算。代码由数条语句组成,一条语句的格式为:"op $tar$ $s_1$ $s_2$"。其中 op 是运算符,为 $add, sub, xor$ 之一;$tar$ 为目标寄存器;$s_1$,$s_2$ 为两个源寄存器。这段代码的语义为将寄存器 $s_1$,$s_2$ 的值通过运算符计算后存入寄存器 $tar$。
在本题中,**只考虑数据冒险**。数据冒险定义为:相邻的两条语句,其中上一条语句的**目标**寄存器是后一条语句的**源**寄存器之一。你不需要使用 $add, sub, xor$ 三种运算符进行运算,只需要判断数据冒险的存在即可。
### 输入格式
第一行两个整数 $n, m$;分别表示这段代码的语句条数和寄存器数量,寄存器用 $1 \sim m$ 的整数表示。
接下来 $n$ 行,每行表示一条语句。首先是一个字符串表示的操作符,字符串为 {$add$,$sub$,$xor$} 之一;接下来是 $3$ 个整数 $tar, s_1, s_2$,分别表示目标寄存器和两个源寄存器。
### 输出格式
一行,一个整数,表示最少需要删除的语句条数。
### 样例输入
```text
4 2
add 1 1 2
add 2 1 2
add 1 1 1
add 1 1 1
```
### 样例输出
```text
2
```
### 说明
在样例中,删去第 $1$ 条和第 $3$ 条 add 语句即可。
### 评测数据规模
对于 $20$% 的评测数据,$1 \leq n \leq 20, 1 \leq m \leq 32$。
对于 $40$% 的评测数据,$1 \leq n \leq 2000, 1 \leq m \leq 32$。
对于 $60$% 的评测数据,$1 \leq n \leq 2 \times 10^5, 1 \leq m \leq 32$。
对于 $100$% 的评测数据,$1 \leq n \leq 2 \times 10^5, 1 \leq m \leq 5 \times 10^5$。