luogu#P16449. [XJTUPC 2026] 怪商一克拉七鲜鱼丸

    ID: 16586 远端评测题 8000ms 256MiB 尝试: 0 已通过: 0 难度: 9 上传者: 标签>动态规划 DP排列组合2026高校校赛

[XJTUPC 2026] 怪商一克拉七鲜鱼丸

题目描述

从前有一对好朋友,他们名叫小移和小换。他们都是远近闻名的排序大师!对于一个长度为 nn 的排列 p1,p2,,pnp_1, p_2,\cdots, p_n,小移每次操作可以选一个区间将它循环右移一位,而小换每次操作可以交换两个不同元素的位置。

其中,排列 p1,p2,,pnp_1, p_2,\cdots, p_n,是指满足 {p1,p2,,pn}={1,2,,n}\{p_1, p_2,\cdots, p_n\}=\{1,2,\cdots,n\} 的一个序列。

形式化地,

  • 小移的每次操作为:选择一段区间 [l,r][l,r]1lrn1\le l\le r\le n),若原区间的元素为 pl,pl+1,pl+2,,prp_l,p_{l+1},p_{l+2},\dots,p_r,则操作后这一区间的元素变为 pr,pl,pl+1,pl+2,pr1p_r,p_l,p_{l+1},p_{l+2}\dots,p_{r-1}
  • 小换的每次操作为:选择两个不同的位置 i,ji,j1i<jn1\le i<j\le n),交换 pip_ipjp_j

今天你打算主持一局黑影杀,结果平常总是参加的小移和小换却都没有来,你感觉很疑惑,于是你决定调查其中原委。原来是有个坏蛋来挑拨离间!这家伙先是对小移说:「你看 [9,2,3,4,5,6,7,8,1][9,2,3,4,5,6,7,8,1] 这个排列,你竟然要操作整整 88 次才能把它排序!要是小换来,一次就能排完,你实在是太不牛了,赶快退休吧!」小移愤怒地把他轰走了,可到了晚上这个排列却在小移心里挥之不去,他几乎一晚上没睡着……然后这个坏蛋又和小换讲:「你看 [2,3,4,5,6,7,8,9,1][2,3,4,5,6,7,8,9,1] 这个排列,你竟然要操作整整 88 次才能把它排序!换作小移来,一次就能完事,你实在是菜得没边了,速速退役吧!」小换愤怒地把他赶跑了,可到了晚上这个排列却在小换脑海里一直转悠,他简直做了一晚上噩梦……

这事简直是太魔怔了。当局者迷旁观者清,你打算用最直接的方式来彻底解除这个误会:对于给定的整数 nn,你想对于任意的 0i,jn10\le i , j \le n-1 计算出满足「当采用最小化操作次数的策略时,小移需要操作 ii 次、小换需要操作 jj 次来完成排序」的长度为 nn 的排列数量 Pi,jP_{i ,j}。让数据说话,他们就能充分认识彼此的能力,从而解开心结,成为更好的朋友。你能完成这个任务吗?当然由于排列数量可能很大,给定 modmod,请将答案对 modmod 取模。

请注意,对于两个长度为 nn 的排列 p1,p2,,pnp_1,p_2,\cdots,p_np1,p2,,pnp'_1,p'_2,\cdots,p'_n,被视为两个不同的排列,需要被统计两次,当且仅当存在 ii1in1\le i\le n)满足 pipip_i\ne p'_i

请注意,上述文本中的排序,是指将排列从小到大排序。即将一个排列 p1,p2,,pnp_1,p_2,\cdots,p_n,通过操作变为 1,2,,n1,2,\cdots,n

输入格式

输入共一行,仅包含两个整数 nnmodmod1n1501\le n\le 1502mod109+72\le mod \le 10^9+7),用一个空格分隔。

输出格式

输出 nn 行,每行包含 nn 个整数,用一个空格分隔。第 ii 行的第 jj 个整数表示 Pi1,j1P_{i-1,j-1}modmod 取模的结果。

3 21
1 0 0
0 2 1
0 1 1
10 10
1 0 0 0 0 0 0 0 0 0
0 9 8 7 6 5 4 3 2 1
0 8 7 9 1 0 3 7 9 6
0 7 9 3 1 0 2 4 8 6
0 6 1 1 4 7 8 4 6 6
0 5 0 0 7 6 7 3 8 9
0 4 3 2 8 7 4 3 5 4
0 3 7 4 4 3 3 6 6 4
0 2 9 8 6 8 5 6 8 4
0 1 6 6 6 9 4 4 4 0
15 2
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 1 0 1 1 1 0 1 1 1 0 1 1 1
0 0 0 1 0 1 1 0 1 0 0 1 0 1 1
0 1 1 0 0 1 1 0 1 1 1 0 0 1 1
0 0 1 1 1 0 0 1 0 1 0 0 0 1 1
0 1 1 1 1 0 0 1 0 0 0 0 0 1 1
0 0 0 0 0 1 1 0 1 0 0 0 0 1 1
0 1 1 1 1 0 0 1 1 0 0 0 0 1 1
0 0 1 0 1 1 0 0 0 0 1 0 1 1 0
0 1 1 0 1 0 0 0 0 1 1 0 1 0 0
0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
0 0 1 1 1 1 1 1 1 1 0 0 0 0 0
0 1 1 1 1 1 1 1 1 0 0 0 0 0 0