#503. Nanami and C++ LAN

传统 1000 ms 256 MiB
标准 IO
文本比较 dd

题目描述

Nanami 正在学习 C++,一切都是那么的难。

Nanami 给了你一些变量和一些引用表达式,希望你告诉她一个变量是初始变量的多少重引用。

一个变量是自己的零重引用。引用具有传递性,如果 'b' 是 'a' 的二重引用且 'c' 是 'b' 的三重引用,那么 'c' 就是 'a' 的五重引用。

使用 '&' 符号代表引用,有多少个就是多少重引用,例如引用表达式 "auto &&a = b",那么 'b' 就是 'a' 的二重引用。

输入格式

第一行,一个整数 t(1t104)t(1\le t\le 10^4),代表数据组数。

对于每组数据:

第一行,两个整数 n,q(1n,q105)n,q(1\le n,q \le 10^5),代表引用表达式的个数和询问的次数。

接下来的 nn 行,每行一个表达式或引用表达式。
保证第 11 行为 auto <variable name> = <value> 的形式,这里的 'variable name' 为初始变量名且 'value' 中不含有空格且长度不超过 100100
其余的 n1n-1 行均为 auto &...&<variable name> = <another variable name>。 保证 'variable name' 在之前没有出现过,且 'another variable name' 在之前出现过,并且 '&' 的数量不超过 1010 个。

接下来的 qq 行,每行一个变量名 'variable name',代表询问该变量是初始变量的几重引用,保证 'variable name' 在之前出现过。

保证所有测试点内的 n,qn,q 的总和均不超过 10510^5,且所有的 'variable name' 为由大小写字母组成的长度不超过 1010 的字符串。

Nanami 在这里提示你,记得注意输入中的空格哦。如果你没有看懂输入格式,请参考样例。

输出格式

对于每次询问,输出一行整数代表当前询问的变量是初始变量的多少重引用。

样例

输入样例

2
4 4
auto a = 114514
auto &b = a
auto &&c = b
auto &d = c
a
b
c
d
5 3
auto A = "A"
auto &&b = A
auto &C = A
auto D = C
auto &&&e = b
C
D
e

输出样例

0
1
3
4
1
1
5