U469634 百年树人
题目背景
> 十年树木,百年树人,~~千年二叉树与人~~
题目描述
同学们学习了二叉树的相关知识,于是自发组织了一个活动:他们以每个人为一个节点,要构成一个二叉树。
组织委员小 Y 一共会发出不超过 $10^5$ 条指令,每次他会说两个同学的名字 $a$ 和 $b$,表示将同学 $b$ 安排成同学 $a$ 的子节点。他保证同学们能构成一个合法的二叉树。
隔壁班的同学小 C 听到了他的话,但是不知道同学们到底排成了什么样的队形。于是他找到了你们班的同学小 Z,想问问他。但是小 Z 并不想直接告诉他答案,他只会告诉小 C 同学们排成的二叉树深度,让小 C 思考最多可能有多少位同学。
如果你是小 C,你会算吗?
***
今天小 C 在一篇 [CSDN 博客](https://blog.csdn.net/m0_56494923/article/details/123239292)上学习了 map 容器的用法。这是他的记录:
> STL 中的 map 是一个存储键值对并自动排序的容器,跟 Python 里的字典很像。map 的定义方法是:`mapp`,其中第一个 type 是键的类型,第二个 type 是值的类型。
>
> 一些关于 map 的函数:
>
> - `map[a]=b`:将 map 中键为 a 的值设为 b。
> - `map.count(name)` 可以查询 map 中 name 键对应的值是否定义过。
> - `map.size()` 可以查询 map 中的元素数。
输入格式
不超过 $10^5$ 行字符串,每行两个分别是 $a$ 和 $b$,含义如题目描述。
每个学生的名字长度不超过 $100$,并且只包含字母。
小 Y 有时对队形不满意,他可以使一个已经有父节点的同学改变父节点。
输出格式
一行一个整数,表示你根据小 C 已知的条件推算最多可以有的同学数量。
说明/提示
### 样例解释
#### #1
同学们排成的队形如下:

而此时二叉树深度为 $3$,没有方法能使深度为 $3$ 的二叉树拥有更多的节点。
#### #2
`hhhh` 是 `hhh` 的子节点,我们可以为 `hhh` 添加另一个子节点,二叉树的深度不会变。因此小 C 计算的结果会是 $3$。
### 数据范围与约定
设同学们构成的二叉树深度为 $len$,则有 $2\le len\le31$。
有 $50\%$ 的得分点平分 $50$ 分;
对于另 $50\%$ 的得分点,当你通过了这部分所有的测试数据,你可以得到 $50$ 分。