This documentation is automatically generated by online-judge-tools/verification-helper
#define PROBLEM "https://judge.yosupo.jp/problem/montmort_number_mod"
#include <iostream>
#include <atcoder/modint>
using mint = atcoder::modint;
#include "library/sequence/montmort_number.hpp"
using suisen::montmort_number;
int main() {
int n, m;
std::cin >> n >> m;
mint::set_mod(m);
std::vector<mint> res = montmort_number<mint>(n);
for (int i = 1; i <= n; ++i) {
std::cout << res[i].val() << " \n"[i == n];
}
return 0;
}#line 1 "test/src/sequence/montmort_number/montmort_number_mod.test.cpp"
#define PROBLEM "https://judge.yosupo.jp/problem/montmort_number_mod"
#include <iostream>
#include <atcoder/modint>
using mint = atcoder::modint;
#line 1 "library/sequence/montmort_number.hpp"
#include <vector>
namespace suisen {
template <typename mint>
std::vector<mint> montmort_number(int n) {
std::vector<mint> res{ 1, 0 };
for (int i = 2; i <= n; ++i) res.push_back((i - 1) * (res[i - 1] + res[i - 2]));
res.resize(n + 1);
return res;
}
} // namespace suisen
#line 8 "test/src/sequence/montmort_number/montmort_number_mod.test.cpp"
using suisen::montmort_number;
int main() {
int n, m;
std::cin >> n >> m;
mint::set_mod(m);
std::vector<mint> res = montmort_number<mint>(n);
for (int i = 1; i <= n; ++i) {
std::cout << res[i].val() << " \n"[i == n];
}
return 0;
}