Liczbą przekroczeń permutacji $p$ stopnia $n$ nazywamy liczbę takich $i$, że $1 \le i \le n$ oraz $p_i > i$. Liczbą spadków nazywamy liczbę takich $i$, że $1 \le i \le n-1$ oraz $p_i > p_{i+1}$.
Niech $h(n, m, k)$ oznacza liczbę permutacji stopnia $n$, które mają dokładnie $m$ przekroczeń oraz $k$ spadków. Dla danego $n$ oblicz wszystkie wartości $h(n, m, k)$. Ponieważ wyniki mogą być bardzo duże, należy wypisać je modulo $M$.
Wejście
W jednej linii podano dwie dodatnie liczby całkowite $n$ oraz $M$, oznaczające stopień permutacji oraz moduł.
Wyjście
Wypisz $n$ linii, z których każda zawiera $n$ liczb. $j$-ta liczba w $i$-tej linii powinna być równa $h(n, i-1, j-1) \bmod M$.
Przykład
Przykład 1
Wejście:
3 998244353
Wyjście:
1 0 0 0 3 1 0 1 0
Uwagi
- Permutacje z $0$ przekroczeń i $0$ spadków: $[1, 2, 3]$.
- Permutacje z $1$ przekroczeniem i $1$ spadkiem: $[2, 1, 3]$, $[3, 1, 2]$, $[1, 3, 2]$.
- Permutacje z $1$ przekroczeniem i $2$ spadkami: $[3, 2, 1]$.
- Permutacje z $2$ przekroczeniami i $1$ spadkiem: $[2, 3, 1]$.
Przykład 2
Wejście:
7 998244353
Wyjście:
1 0 0 0 0 0 0 0 21 70 28 1 0 0 0 35 343 596 209 8 0 0 35 470 1154 673 83 1 0 21 259 582 300 29 0 0 7 49 56 8 0 0 0 1 0 0 0 0 0
Podzadania
Zadanie oceniane w grupach.
Dla $10\%$ danych wejściowych $n \leq 10$.
Dla $30\%$ danych wejściowych $n \leq 20$.
Dla $60\%$ danych wejściowych $n \leq 35$.
Dla $100\%$ danych wejściowych $1 \le n \leq 60$, $M$ jest liczbą pierwszą, $10^8 \leq M \leq 10^9$.
Uwagi
Możesz skorzystać z poniższego szablonu, aby przyspieszyć operacje modulo.
#include <bits/stdc++.h>
using namespace std;
using u64 = unsigned long long;
using LL = __uint128_t;
struct FastMod {
u64 b, m;
FastMod(u64 b) : b(b), m(u64((LL(1) << 64) / b)) {}
u64 operator()(u64 a) {
u64 q = (u64) ((LL(m) * a) >> 64);
u64 r = a - q * b;
return r >= b ? r - b : r;
}
} R(2);
int mod;
int main() {
int n; cin >> n >> mod; R = FastMod(mod);
int a = 1e7, b = 2e7;
int c = R(a * (u64)b);
return 0;
}