编程题
### 问题描述
你需要设计一个二字典树算法(Trie),用于存储由 $0$ 和 $1$ 组成的二进制字符串。你的任务有三种类型:
1. 插入新的二进制字符串。
2. 查询特定的二进制字符串是否存在。
3. 计算特定的二进制字符串出现的次数。
### 输入格式
第一行包含一个整数 $n$ ,表示接下来的操作数量。
接下来的 $n$ 行,每行开始有一个整数 $type$ 表示操作类型,后面跟着一个二进制字符串 $s$,表示操作所涉及的字符串。
对于操作类型:
1. 如果 $type = 1$,则插入字符串 $s$。
2. 如果 $type = 2$,则查询字符串 $s$ 是否存在。存在输出 `YES`,否则输出 `NO`。
3. 如果 $type = 3$,则输出字符串 $s$ 出现的次数。
### 输出格式
对于每个 $type = 2$ 或 $type = 3$ 的操作,输出一行答案。
### 样例输入
```
5
1 0101
1 0101
2 0101
3 0101
2 1010
```
### 样例输出
```
YES
2
NO
```
### 样例说明
第一和第二次操作,我们插入了两次字符串 `0101`。
第三次操作,我们查询 `0101`,它确实存在,所以输出 `YES`。
第四次操作,我们查询 `0101` 出现的次数,它出现了 $2$ 次,所以输出 $2$。
第五次操作,我们查询 `1010`,它并不存在,所以输出 `NO`。
### 测评数据规模
对于 $40$% 的数据, $n \leq 10$。
对于 $80$% 的数据, $n \leq 100$。
对于 $100$% 的数据, $1 \leq n \leq 10^5$,字符串 $s$ 的长度 $|s| \leq 100$。