1217 : ytree

时间限制Time Limit 2 Sec 内存限制Memory Limit 512 MB 提交次数Submitted 50 Times 通过次数Solved 16 Times 标准评测Standard Judge

题目描述Description

小Y很羡慕设计出自己数据结构的人,于是小Y也尝试设计一种新的树型结构想要支持以下操作:

  • \(1\) \(v\) \(x\) \(k\),设 \(u\) 是以 \(v\) 号点为根的子树中的一个点(\(u\) 可以等于\(v\)),若 \(u\)\(v\) 的深度差为 \(d\),则给 \(u\) 号点加上 \((x+k*d)*(-1)^{d}\)
  • \(2\) \(v\),询问\(v\) 号点的权值 \(mod (1e9+7)\)之后的值, (规定1 号节点为根)
  • \(3\) \(v\),将之前操作在以\(v\)为根的子树(包括\(v\))的操作\(1\)都撤销

输入格式Input

第一行包含两个正整数 \(N\)\(M\)\(N\) 为树上的点数,\(M\) 操作的数量。

\(2\)~\(N\) 行,每行一个正整数,第\(i\)行的正整数是\(i\)号节点的父亲。

再接下来 \(M\) 行,格式为”\(1\) \(v\) \(x\) \(k\)“,”\(2\) \(v\)“或”\(3\) \(v\)“,含义如题。

对于 \(100\%\) 的数据, \(1 \leq n \leq 2*10^5\), \(1 \leq m \leq 10^5\), \(1 \leq |x|, |k| \leq 10^3\)

输出格式Output

对于每个\(2\) 操作输出一行,为 \(v\)号点的权值\(mod (1e9+7)\)之后的值,负数取模要化为正数 (详见样例 )

样例Sample