#P17426. [ICPC 2018 Xuzhou R] Rikka with Sorting Networks

    ID: 19928 远端评测题 6000ms 512MiB 尝试: 0 已通过: 0 显示难度普及+/提高− 上传者: 标签>2018枚举其它技巧ICPC

[ICPC 2018 Xuzhou R] Rikka with Sorting Networks

题目描述

Rikka 知道冒泡排序是一种简单而优美的算法,快速排序是一种复杂但高效的算法,希尔排序则是一种怪异却实用的算法。Rikka 对所有的排序算法都很感兴趣,她可以为 ICPC 竞赛想出任意多的新题目。

Rikka 讨厌那些不断用相同思路出题的人,她希望自己不会变成自己所讨厌的样子。尽管她已经出过几道与归并排序、插入排序等排序算法相关的题目,她决定向你展示最后一道关于排序算法的题,从而为这个系列画上永远的句号。

在这里,Rikka 引入了排序网络,并首先定义了比较器。对于一个由前 nn 个最小正整数构成的排列 AA,记作 a1,a2,⋯ ,ana_1, a_2, \cdots, a_n,一个比较器 [u,v][u, v](u≠vu \ne v)会将 AA 中的第 uu 个元素和第 vv 个元素以非递减序排列。形式化地,一个比较器是一个映射 [u,v][u, v],满足

  • [u,v](au)=min⁡(au,av)[u, v](a_u) = \min(a_u, a_v);且
  • [u,v](av)=max⁡(au,av)[u, v](a_v) = \max(a_u, a_v);且
  • 对所有满足 k≠uk \ne u 且 k≠vk \ne v 的 kk,有 [u,v](ak)=ak[u, v](a_k) = a_k。

Rikka 将一个排序网络定义为一系列比较器的复合,并为你提供了一个由 kk 个顺序给出的比较器构成的排序网络。现在,Rikka 希望你能统计有多少个从 11 到 nn 的排列,在经过给定的排序网络后会变成一个几乎有序的排列。她称一个从 11 到 nn 的排列是几乎有序的,当且仅当其最长上升子序列的长度至少为 (n−1)(n - 1)。

输入格式

输入包含多组测试数据,第一行包含一个整数 TT(1≤T≤1001 \le T \le 100),表示测试数据的组数。

对于每组测试数据,第一行包含三个整数 nn(2≤n≤502 \le n \le 50),表示排列的长度,kk(0≤k≤100 \le k \le 10),表示比较器的数量,以及 qq(108≤q≤10910^8 \le q \le 10^9),一个用于输出的质数。

接下来 kk 行,第 ii 行包含两个整数 uu 和 vv (1≤u<v≤n)(1 \le u < v \le n),表示第 ii 个比较器 [u,v][u, v]。

输出格式

对于每组测试数据,输出一行一个整数,表示满足条件的排列数对 qq 取模的结果。

4
4 0 998244353
4 1 998244353
1 2
4 3 998244353
1 2
2 3
1 2
4 6 998244353
1 2
2 3
1 2
3 4
2 3
1 2
10
14
24
24

提示

翻译由 DeepSeek V4 Pro 完成