万年沉睡的宝藏
题号:NC287300
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

\hspace{15pt}虽然我们不能为每一位参赛选手提供超级闪光牛可乐万年沉睡的宝藏,但是……参加小白月赛牛客练习赛且有通过题目的选手,第 1 名、前 50 名抽 1 名、51-200 名抽 2 名、201 名之后每 100 人抽 1 名,赠送牛可乐 U 型枕!
\hspace{15pt}
\hspace{15pt}在小有所在的世界中,有许多小岛和宝藏。每小岛和每宝藏都有名称,名称由小写字母构成,长度从 1 到 10 不等。不同的小岛的名称互不相同,不同种类的宝藏的名称也互不相同,但是小岛和宝藏可能会重名

\hspace{15pt}每种宝藏可能会有很多个,而且可能会出现在不同的小岛上。同一种宝藏可以在同一个小岛上出现多个

\hspace{15pt}你需要处理这个世界依次发生的 q 个事件,这些事件有以下四种类型:
{\hspace{20pt}}_\texttt{1.}\,有一个种类为 y 的宝藏在名称为 x 的小岛上被发现。
{\hspace{20pt}}_\texttt{2.}\,查询名称为 x 的小岛上的宝藏种类数,名称为 x 的小岛不一定在之前出现过。
{\hspace{20pt}}_\texttt{3.}\,查询种类为 y 的宝藏是否已被发现在名称为 x 的小岛上。如果是,输出 1;否则输出 0,名称为 x 的小岛不一定在之前出现过。
{\hspace{20pt}}_\texttt{4.}\,查询至少有一个宝藏被发现的小岛数量

输入描述:

\hspace{15pt}第一行输入一个整数 q\left(1 \le q \le 2 \times 10^5\right) 代表事件的数量。 
\hspace{15pt}此后 q 行,每行先输入一个整数 op\left(1\leq op\leq 4\right) 代表事件类型,编号同题干,随后:
\hspace{23pt}\bullet\,op=13,在同一行输入两个字符串 x,y 代表小岛名称、宝藏名称;
\hspace{23pt}\bullet\,op=2,在同一行输入一个字符串 x 代表小岛名称。

\hspace{15pt}除此之外,保证输入的字符串是至少包含 1 个小写字母、至多包含 10 个小写字母的字符串。至少存在一次查询。

输出描述:

\hspace{15pt}对于每一次第 2,3,4 种事件,新起一行。输出一个整数,代表查询的答案。
示例1

输入

复制
6
1 hello world
2 hello
3 hello wordle
4
2 world
3 wordle world

输出

复制
1
0
1
0
0

说明

\hspace{15pt}在这个样例中,事件依次发生如下:
\hspace{23pt}\bullet\,\texttt{ 小岛上发现了宝藏 \texttt{
\hspace{23pt}\bullet\,\texttt{ 小岛上发现了 1 种宝藏。
\hspace{23pt}\bullet\,\texttt{ 小岛上没有宝藏 \texttt{
\hspace{23pt}\bullet\,1 个小岛上发现了至少 1 个宝藏。
\hspace{23pt}\bullet\,\texttt{ 小岛上发现了 0 种宝藏(查询的小岛不一定在之前出现过)。
\hspace{23pt}\bullet\,\texttt{ 小岛上没有宝藏 \texttt{(查询的小岛不一定在之前出现过)。
示例2

输入

复制
3
1 hello world
1 good world
4

输出

复制
2

说明

\hspace{15pt}注意同一种宝藏可能在不同小岛上出现。
示例3

输入

复制
3
1 a a
1 a a
2 a

输出

复制
1

说明

\hspace{15pt}\texttt{ 小岛上发现了两个宝藏 \texttt{,但是 \texttt{ 小岛上只发现了一种宝藏。
\hspace{15pt}同一种宝藏可以在同一个小岛上出现多个

备注:

\hspace{15pt}在几乎全部的情况下,\sf PyPy 的运行速度优于 \sf Python,我们建议您选择对应版本的 \sf PyPy 进行提交、而不是 \sf Python