#733. 左儿子右兄弟

左儿子右兄弟

题目描述

这天小 CC 在数据结构课上学习了“左儿子右兄弟表示法”。 对于一棵有很多叉树,我们可以通过这一表示法,将其转化成一棵二叉树。

形式化的,给定一棵包含 n n 个节点的有根树 T T ,节点编号为 1,2,,n 1, 2, \cdots, n ,其中 1 号节点为根节点。我们会通过如下表示法将其转化为一棵同样包含 n n 个节点的以 11 号节点为根的二叉树 T T'

  • 对于树上的每个节点 u u ,假设其儿子节点的编号依次为 v1,v2,,vk v_1, v_2, \cdots, v_k
  • 你可以对这些儿子节点指定任意顺序,假设为 v1,v2,,vk v'_1, v'_2, \cdots, v'_k
  • 在树 T T' 中,节点 u u 左儿子v1 v'_1 ;对于任意 i[1,k1] i \in [1, k-1] ,节点 vi v'_i 右儿子vi+1 v'_{i+1}

我们定义两棵二叉树不同,当且仅当存在一个节点 u u ,在两棵树中 u u 的左儿子节点编号不同(或其中一个有左儿子,一个没有),或在两棵树中 u u 的右儿子节点编号不同(或其中一个有右儿子,一个没有)。我们定义一个节点的子树大小为其子树中的节点个数(包括它本身)。

CC 注意到,在这样的表示法下,最终的树 T T' 的形态有很多种可能。

现在给定一棵树 T T ,在其使用“左儿子右兄弟表示法”最终所有可能得到的树 T T' 中,小 CC 定义“好表示”为所有节点子树大小之和最小的那些 T T' 。小 CC 想知道“好表示”的 T T' 所有节点子树大小之和是多少,以及有多少种不同的“好表示”。

输入格式

  • 第一行一个整数 n n 1n105 1 \leq n \leq 10^5 ),代表树上的节点个数。
  • 第二行 n1 n-1 个整数 f2,f3,,fn f_2, f_3, \cdots, f_n 1fi<i 1 \leq f_i < i ),其中 fi f_i 表示节点 i i 的父节点编号。

输出格式

输出两行,每行一个整数。

  • 第一行的整数代表“好表示”的 T T' 所有节点子树大小之和。
  • 第二行的整数代表“好表示”的 T T' 的个数,对 998244353 998244353 取模。

样例输入 1

5
1 1 2 2

样例输出 1

13
2

样例输入 2

5
1 1 1 1

样例输入 2

15
24

说明

样例解释

对于第一个样例,T T 使用“左儿子右兄弟表示法”最终可能得到的所有 T T' 如下图所示:

图片描述 第一列的两个 T T' 所有节点子树大小之和均为 5+4+2+1+1=13 5 + 4 + 2 + 1 + 1 = 13 。 第二列的两个 T T' 所有节点子树大小之和均为 5+3+4+1+1=14 5 + 3 + 4 + 1 + 1 = 14 。 第三列的两个 T T' 所有节点子树大小之和均为 5+2+3+4+1=15 5 + 2 + 3 + 4 + 1 = 15