S 老师的合并
题号:NC269381
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

S 老师又给你了一个终极难题,你需要解决它。

给定两棵树,T_1T_2,分别有 n_1n_2 个结点。 第一个树的根结点为 1,第一个树的结点编号为 1\sim n。 第二棵树的根结点为 n_1+1,第二棵树中的结点编号为 n_1+1\sim n_1+n_2

现在你需要找到不同的有根树的数量,记为 T,大小为 n_1+n_2

对于所有 1\leq x,y\leq n_1+n_2T,T_1,T_2 需要满足以下条件:

  • 如果结点 x 和 y 属于同一个 T_i\; (i\in \{1,2\}),则必须满足以下两个条件:
  1. 在 T_i 中,x 是 y 的祖先,当且仅当在 T 中,x 是 y 的祖先。
  2. 在 T_i 中 x 的 DFS 序小于 y 的当且仅当在 T 中 x 的 DFS 序小于 y 的.

你只需要输出对 998244353 取模的结果。

在这个问题中,需要考虑子结点的顺序。简单起见,我们将子结点视为从左到右排列的序列,并且 DFS 时总是首先访问最左边未访问的子结点。如果结点 u 的 DFS 序为 k,则表示 u 为第 k 个被访问的结点。

输入描述:

第一行为整数 n_1\ (1\leq n_1\leq 100),表示 T_1 中的结点个数。

下一行包含 n_1-1 整数,其中第 i 个整数表示 T_1 中结点 i+1 的父结点。

第三行包含一个整数 n_2\ (1\leq n_2\leq 100),表示 T_2 中的结点数。

下一行包含 n_2-1 个整数,其中第 i 个数字加上 n_1 表示 T_2 中结点 i+1+n_1 的父结点。

输出描述:

输出一个整数,表示不同的满足条件的 T 的数量对 998244353 取模。
示例1

输入

复制
2
1
2
1

输出

复制
14
示例2

输入

复制
2
1
3
1 1

输出

复制
32
示例3

输入

复制
6
1 1 2 4 3
6
1 1 1 2 2

输出

复制
6483

说明