题目背景
Der Richter - Ωμεγα
题目描述
我们首先给出关于本题的一些定义。
定义一个 1∼n 的排列 p1,p2,…,pn 是好的,当且仅当 $\exists k \in [1, n - 1], \max\limits_{i = 1}^k p_i = k$。
定义一个序列 x1,x2,…,xk 是一个排列 p1,p2,…,pn 的交换方案,当且仅当:
- ∀1≤i≤k,1≤xi≤n−1 且 xi 是整数;
- 对所有 i=1∼k 依次执行交换 p 中 xi 和 xi+1 位置上的数的操作之后,p 是好的。
特别地,序列 x 可以为空,代表不进行任何交换操作。
定义一个序列 x1,x2,…,xk 是一个排列 p1,p2,…,pn 的关键交换方案,当且仅当:
- x 是 p 的一个交换方案;
- x 是 p 的所有交换方案中长度最小的。
定义 f(p) 为排列 p 的不同的关键交换方案的个数。
定义一个排列 q 是另一个排列 p 的一个终态,当且仅当:
- p 的长度与 q 相等;
- q 是好的;
- 存在一个 p 的关键交换方案 x1,x2,…,xk,使得对所有 i=1∼k 依次执行交换 p 中 xi 和 xi+1 位置上的数的操作之后,p 与 q 相同(即 ∀1≤i≤∣p∣,pi=qi)。
定义一个排列 p 是极好的,当且仅当只存在一个排列 q,使得 q 是 p 的终态。
给定一个质数 P 和 q 次询问,每次询问给定两个整数 n,m,你需要构造任意一个极好的长度为 n 且 f(p)≡m(modP) 的 1∼n 的排列 p,或报告无解。
本题将使用自定义校验器检查你构造的排列是否正确,即若有解输出任意一个满足要求的排列都会被认为通过。
输入格式
第一行输入两个正整数 q,P,表示询问次数和模数。
接下来 q 行,每行包含两个整数 n,m。
输出格式
对于每次询问:
- 若无解输出一行一个整数 −1;
- 否则输出一行 n 个整数,表示任意一个符合要求的 1∼n 的排列 p1,p2,…,pn。
本题将使用自定义校验器检查你构造的排列是否正确,即若有解输出任意一个满足要求的排列都会被认为通过。
样例
5 998244353
5 1
6 1
6 2
6 3
10 20
4 1 5 3 2
5 4 3 2 1 6
3 6 2 5 1 4
-1
5 10 4 3 2 9 8 7 1 6
样例解释
对于第一次询问,排列 p=[4,1,5,3,2] 的关键交换方案只有 x=[1],且因为 p 的终态只有 q=[1,4,5,3,2] 所以 p 是极好的。
对于第二次询问,排列 p=[5,4,3,2,1,6] 的关键交换方案只有 x=[],且因为 p 的终态只有 q=[5,4,3,2,1,6] 所以 p 是极好的。
对于第三次询问,排列 p=[3,6,2,5,1,4] 的关键交换方案有 x=[2,4,3] 和 x=[4,2,3],且因为 p 的终态只有 q=[3,2,1,6,5,4] 所以 p 是极好的。
数据范围
本题采用捆绑测试。
子任务编号 |
n≤ |
特殊性质 |
分值 |
1 |
8 |
无 |
17 |
2 |
50 |
A |
3 |
3 |
B |
4 |
18 |
无 |
19 |
5 |
40 |
16 |
6 |
50 |
9 |
7 |
60 |
10 |
8 |
70 |
11 |
9 |
80 |
12 |
- 特殊性质 A:m=0。
- 特殊性质 B:m=1。
对于所有数据,满足 1≤q≤104,9×108<P<109,2≤n≤80,0≤m<P,P 是质数。