「WHOI-4」yadiw. Slua, gassp, lhtubs.
题目背景
> If you know at least 3 of these things and you are not red — you are doing it wrong. Stop learning useless algorithms, go and solve some problems, learn how to use binary search.
题目描述
小 F 有一个奇妙的数组 $a$,$a$ 中没有重复的元素,长度为 $n$,他使用`std::sort`将他排序了,认为它是有序的,所以他正在使用这样的方法进行二分查找。显然,能否查到只和数列的离散化结果有关,所以你可以直接把 $a$ 看作 $1\sim n$ 的一个排列。
```cpp
int search(int key) {
int l = 1, r = n;
while (l <= r) {
int mid = (l + r) / 2;
if (a[mid] < key)
l = mid + 1;
else if (a[mid] == key)
return mid;
else
r = mid - 1;
}
return -1;
}
```
不幸的是,小 W 为了让他戒掉万能头,在`bits/stdc++.h`中写了`#define sort random_shuffle`,这意味着 $a$ 实际是一个随机的排列。
现在,对于所有在 $1$ 到 $N$ 范围内的 $n$,以及所有在 $1$ 到 $n$ 范围内的 $k$,在 $a$ 数列的所有排列中,有几个可以正确地找到第 $k$ 小的元素 $key$(即返回值非 $-1$)?由于答案可能过大,请输出它对给定模数 $p$ 取模的结果。
输入输出格式
输入格式
一行两个正整数 $p,N$。
输出格式
$N$ 行,第 $n$ 行 $n$ 个正整数,代表在 $n$ 个元素中找 $k$ 能找到的方案数。
输入输出样例
输入样例 #1
998244353 5
输出样例 #1
1
1 2
4 4 4
12 12 14 18
48 54 60 66 72
说明
**数据范围**
**本题采用 Subtask 评测。**
- Subtask 1($10$ pts):$N=10$,$ p\ge998244352$;
- Subtask 2($25$ pts):$N=100$,$p\ge1009$ **且为素数**;
- Subtask 3($25$ pts):$N=400$,$p\ge1009$ **且为素数**;
- Subtask 4($40$ pts):$N=400$。
对于所有数据,$10\le N\le 400$,$ 2\le p\le998244353$。