AT_utpc2025_b Binary Tree Counting
Description
頂点 $ 1, 2, \dots, N $ の $ N $ 頂点からなる二分木であって、以下の条件を全て満たすものの個数を $ 998244353 $ で割った余りを求めてください。
- 各 $ i = 1, 2, \dots, N $ に対し、頂点 $ i $ の**行きがけ順**は $ i $ である。特に、頂点 $ 1 $ が根である。
- 各 $ i = 1, 2, \dots, M $ に対し、頂点 $ A_i $ の**通りがけ順**は $ B_i $ である。
ただし、 $ 2 $ つの二分木が異なるとは、ある頂点 $ v $ が存在して、以下のいずれかが成り立つことを指します。
- $ v $ の左の子の有無または頂点番号が異なる。
- $ v $ の右の子の有無または頂点番号が異なる。
二分木とは 二分木とは、各頂点が高々 $ 1 $ 個の左の子と高々 $ 1 $ 個の右の子を持つ根付き木です。 行きがけ順・通りがけ順とは 二分木の各頂点 $ v $ の行きがけ順・通りがけ順は、以下の擬似コードにおいて `dfs(根)` を実行した際に記録される `preorder[v]` および `inorder[v]` の値として定義されます。 ```
pre_cnt = 1; in_cnt = 1
def dfs(v):
preorder[v] = pre_cnt; pre_cnt += 1
if v の左の子が存在する:
dfs(v の左の子)
inorder[v] = in_cnt; in_cnt += 1
if v の右の子が存在する:
dfs(v の右の子)
```
Input Format
入力は以下の形式で標準入力から与えられる。
> $ N $ $ M $ $ A_1 $ $ B_1 $ $ A_2 $ $ B_2 $ $ \vdots $ $ A_M $ $ B_M $
Output Format
答えを $ 1 $ 行に出力せよ。
Explanation/Hint
### Sample Explanation 1
次の $ 2 $ つの二分木が条件を満たします。
- 頂点 $ 1 $ が根で、頂点 $ 2 $ が頂点 $ 1 $ の左の子で、頂点 $ 3 $ が頂点 $ 2 $ の右の子である二分木。この二分木において、
- 頂点 $ 1 $ の行きがけ順は $ 1 $ 、通りがけ順は $ 3 $ です。
- 頂点 $ 2 $ の行きがけ順は $ 2 $ 、通りがけ順は $ 1 $ です。
- 頂点 $ 3 $ の行きがけ順は $ 3 $ 、通りがけ順は $ 2 $ です。
- 頂点 $ 1 $ が根で、頂点 $ 2 $ が頂点 $ 1 $ の左の子で、頂点 $ 3 $ が頂点 $ 1 $ の右の子である二分木。 この二分木において、
- 頂点 $ 1 $ の行きがけ順は $ 1 $ 、通りがけ順は $ 2 $ です。
- 頂点 $ 2 $ の行きがけ順は $ 2 $ 、通りがけ順は $ 1 $ です。
- 頂点 $ 3 $ の行きがけ順は $ 3 $ 、通りがけ順は $ 3 $ です。
### Sample Explanation 2
条件を満たす二分木は存在しません。
### Constraints
- 入力は全て整数
- $ 1 \leq M \leq N \leq 500 $
- $ 1 \leq A_i, B_i \leq N $
- $ A_i \neq A_j \ (i \neq j) $
- $ B_i \neq B_j \ (i \neq j) $