AT_utpc2022_e Parallel Swapping

题目描述

有两个长度为 $N$ 的排列 $P=(P_1,P_2,\ldots,P_N),\ Q=(Q_1,Q_2,\ldots,Q_N)$。一开始 $P_i = Q_i = i$($1 \leq i \leq N$)。对于这两个排列,可以执行如下的操作,次数不限(可以为零次): - 选择一个整数 $i$,满足 $1 \le i \le M$。将 $P$ 的第 $a_i$ 位和第 $b_i$ 位的元素交换,同时将 $Q$ 的第 $c_i$ 位和第 $d_i$ 位的元素交换。 请你求出,可以通过若干次操作后得到的 $(P, Q)$ 状态的不同组数,并对 $998244353$ 取模。

输入格式

输入按如下格式从标准输入读入: > $N$ $M$ > $a_1$ $b_1$ $c_1$ $d_1$ > $\vdots$ > $a_M$ $b_M$ $c_M$ $d_M$

输出格式

输出答案,表示可能的不同 $(P, Q)$ 状态的组数,对 $998244353$ 取模。

说明/提示

### 样例解释 1 可能得到的 $(P, Q)$ 状态为 $P=(1, 2, 3),\ Q=(1, 2, 3)$ 和 $P=(2, 1, 3),\ Q=(1, 3, 2)$,共计 2 种。 ### 数据范围 - 输入均为整数。 - $2 \leq N \leq 5000$ - $0 \leq M \leq 5000$ - $1 \le a_i, b_i, c_i, d_i \le N$ - $a_i < b_i$ - $c_i < d_i$ - 若 $i \neq j$,则 $(a_i, b_i, c_i, d_i) \neq (a_j, b_j, c_j, d_j)$ 由 ChatGPT 5 翻译