剖分
题号:NC244121
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

牛牛有一颗包含 n 个结点的二叉树,这些结点编号为 。这颗树被定义为:
    1、以结点 1 为根。
    2、编号为 x 结点的两个儿子编号分别为:
    3、每个结点的权重初始都为 0。

牛牛接下来会对这颗树进行 m 次操作,操作的格式是以下四种之一:
    1、 (这里 )代表牛牛将以编号 x 为根结点的子树中所有结点的权重 +1。
    2、 (这里 )代表牛牛将以编号 x 为根结点的子树外的所有结点权重 +1。
    3、 (这里 )代表牛牛将根结点到编号 x 结点的路径上的所有结点权重 +1。
    4、 (这里 )代表牛牛将根节点到编号 x 结点的路径上的结点之外的所有结点权重 +1。

牛妹想知道当牛牛的所有操作结束之后,树中权重为 的结点的数量分别是多少。

输入描述:

第一行输入两个空格分隔的整数:
接下来 m 行,每行描述了一个牛牛进行的操作。
保证:




输出描述:

输出一行共  个整数,代表答案。
示例1

输入

复制
7 4
1 2
3 5
4 3
2 7

输出

复制
0 2 2 1 2