Module: 哈希


Problem

2 /8


康斯坦丁的怪梦

Problem

一旦康斯坦丁参加了下一次,已经是第 13 届国际奥林匹克运动会,就乘火车回家了。他一如既往地坐下来思考生命的意义,同时解决编程问题。一段时间后,康斯坦丁打瞌睡了,但麻烦的是,要想醒来,他必须解决脑中冒出来的、一直困扰着他的问题!

这一次,康斯坦丁梦见了一棵最初只有一个编号为1的顶点的树。在他设置的问题中,新的顶点逐渐添加到树中。在第i秒,一个编号为i+1的顶点被添加到树中,它作为顶点pi的儿子被挂起,并且在顶点i+1之间的边上和 pi 字母 ci 被写了。

从树的根到顶点v的每条路径都对应一个特定的字符串,该字符串是按照从根到顶点v的顺序写出当前路径的边上所写的符号得到的。乍一看,康斯坦丁面临着一项艰巨的任务——每次添加一个新顶点后,计算从树根(顶点编号 1)开始到其他某个顶点结束的唯一字符串的数量。 

在他的梦中,康斯坦丁根本不是天才,所以他自己无法解决这个问题。帮助康斯坦丁解决问题并醒来。

输入:
第一行包含数字 n - 向树添加新节点的请求数 (1 <= n <= 300000)。
接下来的 n 行描述了添加顶点的请求。第 i 个查询由参数 pi (1 <= pi <= i) 和 ci 描述,其中意味着添加编号为 i+1 的顶点作为子节点挂在编号为 pi 的顶点上,并且符号 ci 写在结果边上 -拉丁字母的小写字母。

输出:
打印 n 行。在第 i 行打印添加第 i+1 个顶点后 Konstantin 问题的答案。

示例:
  <正文>
输入 输出
2
1 乙
2p
1
2
3
1个
1个
2j
1
1
2