QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#630916#9125. Majority and PermutationmaspyAC ✓331ms13824kbC++2038.8kb2024-10-11 20:56:382024-10-11 20:56:39

Judging History

你现在查看的是最新测评结果

  • [2024-10-11 20:56:39]
  • 评测
  • 测评结果:AC
  • 用时:331ms
  • 内存:13824kb
  • [2024-10-11 20:56:38]
  • 提交

answer

#line 1 "/home/maspy/compro/library/my_template.hpp"
#if defined(LOCAL)
#include <my_template_compiled.hpp>
#else

// https://codeforces.com/blog/entry/96344
#pragma GCC optimize("Ofast,unroll-loops")
// いまの CF だとこれ入れると動かない?
// #pragma GCC target("avx2,popcnt")

#include <bits/stdc++.h>

using namespace std;

using ll = long long;
using u8 = uint8_t;
using u16 = uint16_t;
using u32 = uint32_t;
using u64 = uint64_t;
using i128 = __int128;
using u128 = unsigned __int128;
using f128 = __float128;

template <class T>
constexpr T infty = 0;
template <>
constexpr int infty<int> = 1'010'000'000;
template <>
constexpr ll infty<ll> = 2'020'000'000'000'000'000;
template <>
constexpr u32 infty<u32> = infty<int>;
template <>
constexpr u64 infty<u64> = infty<ll>;
template <>
constexpr i128 infty<i128> = i128(infty<ll>) * 2'000'000'000'000'000'000;
template <>
constexpr double infty<double> = infty<ll>;
template <>
constexpr long double infty<long double> = infty<ll>;

using pi = pair<ll, ll>;
using vi = vector<ll>;
template <class T>
using vc = vector<T>;
template <class T>
using vvc = vector<vc<T>>;
template <class T>
using vvvc = vector<vvc<T>>;
template <class T>
using vvvvc = vector<vvvc<T>>;
template <class T>
using vvvvvc = vector<vvvvc<T>>;
template <class T>
using pq = priority_queue<T>;
template <class T>
using pqg = priority_queue<T, vector<T>, greater<T>>;

#define vv(type, name, h, ...) vector<vector<type>> name(h, vector<type>(__VA_ARGS__))
#define vvv(type, name, h, w, ...) vector<vector<vector<type>>> name(h, vector<vector<type>>(w, vector<type>(__VA_ARGS__)))
#define vvvv(type, name, a, b, c, ...) \
  vector<vector<vector<vector<type>>>> name(a, vector<vector<vector<type>>>(b, vector<vector<type>>(c, vector<type>(__VA_ARGS__))))

// https://trap.jp/post/1224/
#define FOR1(a) for (ll _ = 0; _ < ll(a); ++_)
#define FOR2(i, a) for (ll i = 0; i < ll(a); ++i)
#define FOR3(i, a, b) for (ll i = a; i < ll(b); ++i)
#define FOR4(i, a, b, c) for (ll i = a; i < ll(b); i += (c))
#define FOR1_R(a) for (ll i = (a)-1; i >= ll(0); --i)
#define FOR2_R(i, a) for (ll i = (a)-1; i >= ll(0); --i)
#define FOR3_R(i, a, b) for (ll i = (b)-1; i >= ll(a); --i)
#define overload4(a, b, c, d, e, ...) e
#define overload3(a, b, c, d, ...) d
#define FOR(...) overload4(__VA_ARGS__, FOR4, FOR3, FOR2, FOR1)(__VA_ARGS__)
#define FOR_R(...) overload3(__VA_ARGS__, FOR3_R, FOR2_R, FOR1_R)(__VA_ARGS__)

#define FOR_subset(t, s) for (ll t = (s); t >= 0; t = (t == 0 ? -1 : (t - 1) & (s)))
#define all(x) x.begin(), x.end()
#define len(x) ll(x.size())
#define elif else if

#define eb emplace_back
#define mp make_pair
#define mt make_tuple
#define fi first
#define se second

#define stoi stoll

int popcnt(int x) { return __builtin_popcount(x); }
int popcnt(u32 x) { return __builtin_popcount(x); }
int popcnt(ll x) { return __builtin_popcountll(x); }
int popcnt(u64 x) { return __builtin_popcountll(x); }
int popcnt_mod_2(int x) { return __builtin_parity(x); }
int popcnt_mod_2(u32 x) { return __builtin_parity(x); }
int popcnt_mod_2(ll x) { return __builtin_parityll(x); }
int popcnt_mod_2(u64 x) { return __builtin_parityll(x); }
// (0, 1, 2, 3, 4) -> (-1, 0, 1, 1, 2)
int topbit(int x) { return (x == 0 ? -1 : 31 - __builtin_clz(x)); }
int topbit(u32 x) { return (x == 0 ? -1 : 31 - __builtin_clz(x)); }
int topbit(ll x) { return (x == 0 ? -1 : 63 - __builtin_clzll(x)); }
int topbit(u64 x) { return (x == 0 ? -1 : 63 - __builtin_clzll(x)); }
// (0, 1, 2, 3, 4) -> (-1, 0, 1, 0, 2)
int lowbit(int x) { return (x == 0 ? -1 : __builtin_ctz(x)); }
int lowbit(u32 x) { return (x == 0 ? -1 : __builtin_ctz(x)); }
int lowbit(ll x) { return (x == 0 ? -1 : __builtin_ctzll(x)); }
int lowbit(u64 x) { return (x == 0 ? -1 : __builtin_ctzll(x)); }

template <typename T>
T floor(T a, T b) {
  return a / b - (a % b && (a ^ b) < 0);
}
template <typename T>
T ceil(T x, T y) {
  return floor(x + y - 1, y);
}
template <typename T>
T bmod(T x, T y) {
  return x - y * floor(x, y);
}
template <typename T>
pair<T, T> divmod(T x, T y) {
  T q = floor(x, y);
  return {q, x - q * y};
}

template <typename T, typename U>
T SUM(const vector<U> &A) {
  T sm = 0;
  for (auto &&a: A) sm += a;
  return sm;
}

#define MIN(v) *min_element(all(v))
#define MAX(v) *max_element(all(v))
#define LB(c, x) distance((c).begin(), lower_bound(all(c), (x)))
#define UB(c, x) distance((c).begin(), upper_bound(all(c), (x)))
#define UNIQUE(x) sort(all(x)), x.erase(unique(all(x)), x.end()), x.shrink_to_fit()

template <typename T>
T POP(deque<T> &que) {
  T a = que.front();
  que.pop_front();
  return a;
}
template <typename T>
T POP(pq<T> &que) {
  T a = que.top();
  que.pop();
  return a;
}
template <typename T>
T POP(pqg<T> &que) {
  T a = que.top();
  que.pop();
  return a;
}
template <typename T>
T POP(vc<T> &que) {
  T a = que.back();
  que.pop_back();
  return a;
}

template <typename F>
ll binary_search(F check, ll ok, ll ng, bool check_ok = true) {
  if (check_ok) assert(check(ok));
  while (abs(ok - ng) > 1) {
    auto x = (ng + ok) / 2;
    (check(x) ? ok : ng) = x;
  }
  return ok;
}
template <typename F>
double binary_search_real(F check, double ok, double ng, int iter = 100) {
  FOR(iter) {
    double x = (ok + ng) / 2;
    (check(x) ? ok : ng) = x;
  }
  return (ok + ng) / 2;
}

template <class T, class S>
inline bool chmax(T &a, const S &b) {
  return (a < b ? a = b, 1 : 0);
}
template <class T, class S>
inline bool chmin(T &a, const S &b) {
  return (a > b ? a = b, 1 : 0);
}

// ? は -1
vc<int> s_to_vi(const string &S, char first_char) {
  vc<int> A(S.size());
  FOR(i, S.size()) { A[i] = (S[i] != '?' ? S[i] - first_char : -1); }
  return A;
}

template <typename T, typename U>
vector<T> cumsum(vector<U> &A, int off = 1) {
  int N = A.size();
  vector<T> B(N + 1);
  FOR(i, N) { B[i + 1] = B[i] + A[i]; }
  if (off == 0) B.erase(B.begin());
  return B;
}

// stable sort
template <typename T>
vector<int> argsort(const vector<T> &A) {
  vector<int> ids(len(A));
  iota(all(ids), 0);
  sort(all(ids), [&](int i, int j) { return (A[i] == A[j] ? i < j : A[i] < A[j]); });
  return ids;
}

// A[I[0]], A[I[1]], ...
template <typename T>
vc<T> rearrange(const vc<T> &A, const vc<int> &I) {
  vc<T> B(len(I));
  FOR(i, len(I)) B[i] = A[I[i]];
  return B;
}

template <typename T, typename... Vectors>
void concat(vc<T> &first, const Vectors &... others) {
  vc<T> &res = first;
  (res.insert(res.end(), others.begin(), others.end()), ...);
}
#endif
#line 1 "/home/maspy/compro/library/other/io.hpp"
#define FASTIO
#include <unistd.h>

// https://judge.yosupo.jp/submission/21623
namespace fastio {
static constexpr uint32_t SZ = 1 << 17;
char ibuf[SZ];
char obuf[SZ];
char out[100];
// pointer of ibuf, obuf
uint32_t pil = 0, pir = 0, por = 0;

struct Pre {
  char num[10000][4];
  constexpr Pre() : num() {
    for (int i = 0; i < 10000; i++) {
      int n = i;
      for (int j = 3; j >= 0; j--) {
        num[i][j] = n % 10 | '0';
        n /= 10;
      }
    }
  }
} constexpr pre;

inline void load() {
  memcpy(ibuf, ibuf + pil, pir - pil);
  pir = pir - pil + fread(ibuf + pir - pil, 1, SZ - pir + pil, stdin);
  pil = 0;
  if (pir < SZ) ibuf[pir++] = '\n';
}

inline void flush() {
  fwrite(obuf, 1, por, stdout);
  por = 0;
}

void rd(char &c) {
  do {
    if (pil + 1 > pir) load();
    c = ibuf[pil++];
  } while (isspace(c));
}

void rd(string &x) {
  x.clear();
  char c;
  do {
    if (pil + 1 > pir) load();
    c = ibuf[pil++];
  } while (isspace(c));
  do {
    x += c;
    if (pil == pir) load();
    c = ibuf[pil++];
  } while (!isspace(c));
}

template <typename T>
void rd_real(T &x) {
  string s;
  rd(s);
  x = stod(s);
}

template <typename T>
void rd_integer(T &x) {
  if (pil + 100 > pir) load();
  char c;
  do
    c = ibuf[pil++];
  while (c < '-');
  bool minus = 0;
  if constexpr (is_signed<T>::value || is_same_v<T, i128>) {
    if (c == '-') { minus = 1, c = ibuf[pil++]; }
  }
  x = 0;
  while ('0' <= c) { x = x * 10 + (c & 15), c = ibuf[pil++]; }
  if constexpr (is_signed<T>::value || is_same_v<T, i128>) {
    if (minus) x = -x;
  }
}

void rd(int &x) { rd_integer(x); }
void rd(ll &x) { rd_integer(x); }
void rd(i128 &x) { rd_integer(x); }
void rd(u32 &x) { rd_integer(x); }
void rd(u64 &x) { rd_integer(x); }
void rd(u128 &x) { rd_integer(x); }
void rd(double &x) { rd_real(x); }
void rd(long double &x) { rd_real(x); }
void rd(f128 &x) { rd_real(x); }

template <class T, class U>
void rd(pair<T, U> &p) {
  return rd(p.first), rd(p.second);
}
template <size_t N = 0, typename T>
void rd_tuple(T &t) {
  if constexpr (N < std::tuple_size<T>::value) {
    auto &x = std::get<N>(t);
    rd(x);
    rd_tuple<N + 1>(t);
  }
}
template <class... T>
void rd(tuple<T...> &tpl) {
  rd_tuple(tpl);
}

template <size_t N = 0, typename T>
void rd(array<T, N> &x) {
  for (auto &d: x) rd(d);
}
template <class T>
void rd(vc<T> &x) {
  for (auto &d: x) rd(d);
}

void read() {}
template <class H, class... T>
void read(H &h, T &... t) {
  rd(h), read(t...);
}

void wt(const char c) {
  if (por == SZ) flush();
  obuf[por++] = c;
}
void wt(const string s) {
  for (char c: s) wt(c);
}
void wt(const char *s) {
  size_t len = strlen(s);
  for (size_t i = 0; i < len; i++) wt(s[i]);
}

template <typename T>
void wt_integer(T x) {
  if (por > SZ - 100) flush();
  if (x < 0) { obuf[por++] = '-', x = -x; }
  int outi;
  for (outi = 96; x >= 10000; outi -= 4) {
    memcpy(out + outi, pre.num[x % 10000], 4);
    x /= 10000;
  }
  if (x >= 1000) {
    memcpy(obuf + por, pre.num[x], 4);
    por += 4;
  } else if (x >= 100) {
    memcpy(obuf + por, pre.num[x] + 1, 3);
    por += 3;
  } else if (x >= 10) {
    int q = (x * 103) >> 10;
    obuf[por] = q | '0';
    obuf[por + 1] = (x - q * 10) | '0';
    por += 2;
  } else
    obuf[por++] = x | '0';
  memcpy(obuf + por, out + outi + 4, 96 - outi);
  por += 96 - outi;
}

template <typename T>
void wt_real(T x) {
  ostringstream oss;
  oss << fixed << setprecision(15) << double(x);
  string s = oss.str();
  wt(s);
}

void wt(int x) { wt_integer(x); }
void wt(ll x) { wt_integer(x); }
void wt(i128 x) { wt_integer(x); }
void wt(u32 x) { wt_integer(x); }
void wt(u64 x) { wt_integer(x); }
void wt(u128 x) { wt_integer(x); }
void wt(double x) { wt_real(x); }
void wt(long double x) { wt_real(x); }
void wt(f128 x) { wt_real(x); }

template <class T, class U>
void wt(const pair<T, U> val) {
  wt(val.first);
  wt(' ');
  wt(val.second);
}
template <size_t N = 0, typename T>
void wt_tuple(const T t) {
  if constexpr (N < std::tuple_size<T>::value) {
    if constexpr (N > 0) { wt(' '); }
    const auto x = std::get<N>(t);
    wt(x);
    wt_tuple<N + 1>(t);
  }
}
template <class... T>
void wt(tuple<T...> tpl) {
  wt_tuple(tpl);
}
template <class T, size_t S>
void wt(const array<T, S> val) {
  auto n = val.size();
  for (size_t i = 0; i < n; i++) {
    if (i) wt(' ');
    wt(val[i]);
  }
}
template <class T>
void wt(const vector<T> val) {
  auto n = val.size();
  for (size_t i = 0; i < n; i++) {
    if (i) wt(' ');
    wt(val[i]);
  }
}

void print() { wt('\n'); }
template <class Head, class... Tail>
void print(Head &&head, Tail &&... tail) {
  wt(head);
  if (sizeof...(Tail)) wt(' ');
  print(forward<Tail>(tail)...);
}

// gcc expansion. called automaticall after main.
void __attribute__((destructor)) _d() { flush(); }
} // namespace fastio
using fastio::read;
using fastio::print;
using fastio::flush;

#if defined(LOCAL)
#define SHOW(...) SHOW_IMPL(__VA_ARGS__, SHOW6, SHOW5, SHOW4, SHOW3, SHOW2, SHOW1)(__VA_ARGS__)
#define SHOW_IMPL(_1, _2, _3, _4, _5, _6, NAME, ...) NAME
#define SHOW1(x) print(#x, "=", (x)), flush()
#define SHOW2(x, y) print(#x, "=", (x), #y, "=", (y)), flush()
#define SHOW3(x, y, z) print(#x, "=", (x), #y, "=", (y), #z, "=", (z)), flush()
#define SHOW4(x, y, z, w) print(#x, "=", (x), #y, "=", (y), #z, "=", (z), #w, "=", (w)), flush()
#define SHOW5(x, y, z, w, v) print(#x, "=", (x), #y, "=", (y), #z, "=", (z), #w, "=", (w), #v, "=", (v)), flush()
#define SHOW6(x, y, z, w, v, u) print(#x, "=", (x), #y, "=", (y), #z, "=", (z), #w, "=", (w), #v, "=", (v), #u, "=", (u)), flush()
#else
#define SHOW(...)
#endif

#define INT(...)   \
  int __VA_ARGS__; \
  read(__VA_ARGS__)
#define LL(...)   \
  ll __VA_ARGS__; \
  read(__VA_ARGS__)
#define U32(...)   \
  u32 __VA_ARGS__; \
  read(__VA_ARGS__)
#define U64(...)   \
  u64 __VA_ARGS__; \
  read(__VA_ARGS__)
#define STR(...)      \
  string __VA_ARGS__; \
  read(__VA_ARGS__)
#define CHAR(...)   \
  char __VA_ARGS__; \
  read(__VA_ARGS__)
#define DBL(...)      \
  double __VA_ARGS__; \
  read(__VA_ARGS__)

#define VEC(type, name, size) \
  vector<type> name(size);    \
  read(name)
#define VV(type, name, h, w)                     \
  vector<vector<type>> name(h, vector<type>(w)); \
  read(name)

void YES(bool t = 1) { print(t ? "YES" : "NO"); }
void NO(bool t = 1) { YES(!t); }
void Yes(bool t = 1) { print(t ? "Yes" : "No"); }
void No(bool t = 1) { Yes(!t); }
void yes(bool t = 1) { print(t ? "yes" : "no"); }
void no(bool t = 1) { yes(!t); }
#line 2 "/home/maspy/compro/library/poly/count_terms.hpp"
template<typename mint>
int count_terms(const vc<mint>& f){
  int t = 0;
  FOR(i, len(f)) if(f[i] != mint(0)) ++t;
  return t;
}
#line 2 "/home/maspy/compro/library/mod/modint_common.hpp"

struct has_mod_impl {
  template <class T>
  static auto check(T &&x) -> decltype(x.get_mod(), std::true_type{});
  template <class T>
  static auto check(...) -> std::false_type;
};

template <class T>
class has_mod : public decltype(has_mod_impl::check<T>(std::declval<T>())) {};

template <typename mint>
mint inv(int n) {
  static const int mod = mint::get_mod();
  static vector<mint> dat = {0, 1};
  assert(0 <= n);
  if (n >= mod) n %= mod;
  while (len(dat) <= n) {
    int k = len(dat);
    int q = (mod + k - 1) / k;
    dat.eb(dat[k * q - mod] * mint::raw(q));
  }
  return dat[n];
}

template <typename mint>
mint fact(int n) {
  static const int mod = mint::get_mod();
  assert(0 <= n && n < mod);
  static vector<mint> dat = {1, 1};
  while (len(dat) <= n) dat.eb(dat[len(dat) - 1] * mint::raw(len(dat)));
  return dat[n];
}

template <typename mint>
mint fact_inv(int n) {
  static vector<mint> dat = {1, 1};
  if (n < 0) return mint(0);
  while (len(dat) <= n) dat.eb(dat[len(dat) - 1] * inv<mint>(len(dat)));
  return dat[n];
}

template <class mint, class... Ts>
mint fact_invs(Ts... xs) {
  return (mint(1) * ... * fact_inv<mint>(xs));
}

template <typename mint, class Head, class... Tail>
mint multinomial(Head &&head, Tail &&... tail) {
  return fact<mint>(head) * fact_invs<mint>(std::forward<Tail>(tail)...);
}

template <typename mint>
mint C_dense(int n, int k) {
  static vvc<mint> C;
  static int H = 0, W = 0;
  auto calc = [&](int i, int j) -> mint {
    if (i == 0) return (j == 0 ? mint(1) : mint(0));
    return C[i - 1][j] + (j ? C[i - 1][j - 1] : 0);
  };
  if (W <= k) {
    FOR(i, H) {
      C[i].resize(k + 1);
      FOR(j, W, k + 1) { C[i][j] = calc(i, j); }
    }
    W = k + 1;
  }
  if (H <= n) {
    C.resize(n + 1);
    FOR(i, H, n + 1) {
      C[i].resize(W);
      FOR(j, W) { C[i][j] = calc(i, j); }
    }
    H = n + 1;
  }
  return C[n][k];
}

template <typename mint, bool large = false, bool dense = false>
mint C(ll n, ll k) {
  assert(n >= 0);
  if (k < 0 || n < k) return 0;
  if constexpr (dense) return C_dense<mint>(n, k);
  if constexpr (!large) return multinomial<mint>(n, k, n - k);
  k = min(k, n - k);
  mint x(1);
  FOR(i, k) x *= mint(n - i);
  return x * fact_inv<mint>(k);
}

template <typename mint, bool large = false>
mint C_inv(ll n, ll k) {
  assert(n >= 0);
  assert(0 <= k && k <= n);
  if (!large) return fact_inv<mint>(n) * fact<mint>(k) * fact<mint>(n - k);
  return mint(1) / C<mint, 1>(n, k);
}

// [x^d](1-x)^{-n}
template <typename mint, bool large = false, bool dense = false>
mint C_negative(ll n, ll d) {
  assert(n >= 0);
  if (d < 0) return mint(0);
  if (n == 0) { return (d == 0 ? mint(1) : mint(0)); }
  return C<mint, large, dense>(n + d - 1, d);
}
#line 3 "/home/maspy/compro/library/mod/modint.hpp"

template <int mod>
struct modint {
  static constexpr u32 umod = u32(mod);
  static_assert(umod < u32(1) << 31);
  u32 val;

  static modint raw(u32 v) {
    modint x;
    x.val = v;
    return x;
  }
  constexpr modint() : val(0) {}
  constexpr modint(u32 x) : val(x % umod) {}
  constexpr modint(u64 x) : val(x % umod) {}
  constexpr modint(u128 x) : val(x % umod) {}
  constexpr modint(int x) : val((x %= mod) < 0 ? x + mod : x){};
  constexpr modint(ll x) : val((x %= mod) < 0 ? x + mod : x){};
  constexpr modint(i128 x) : val((x %= mod) < 0 ? x + mod : x){};
  bool operator<(const modint &other) const { return val < other.val; }
  modint &operator+=(const modint &p) {
    if ((val += p.val) >= umod) val -= umod;
    return *this;
  }
  modint &operator-=(const modint &p) {
    if ((val += umod - p.val) >= umod) val -= umod;
    return *this;
  }
  modint &operator*=(const modint &p) {
    val = u64(val) * p.val % umod;
    return *this;
  }
  modint &operator/=(const modint &p) {
    *this *= p.inverse();
    return *this;
  }
  modint operator-() const { return modint::raw(val ? mod - val : u32(0)); }
  modint operator+(const modint &p) const { return modint(*this) += p; }
  modint operator-(const modint &p) const { return modint(*this) -= p; }
  modint operator*(const modint &p) const { return modint(*this) *= p; }
  modint operator/(const modint &p) const { return modint(*this) /= p; }
  bool operator==(const modint &p) const { return val == p.val; }
  bool operator!=(const modint &p) const { return val != p.val; }
  modint inverse() const {
    int a = val, b = mod, u = 1, v = 0, t;
    while (b > 0) {
      t = a / b;
      swap(a -= t * b, b), swap(u -= t * v, v);
    }
    return modint(u);
  }
  modint pow(ll n) const {
    assert(n >= 0);
    modint ret(1), mul(val);
    while (n > 0) {
      if (n & 1) ret *= mul;
      mul *= mul;
      n >>= 1;
    }
    return ret;
  }
  static constexpr int get_mod() { return mod; }
  // (n, r), r は 1 の 2^n 乗根
  static constexpr pair<int, int> ntt_info() {
    if (mod == 120586241) return {20, 74066978};
    if (mod == 167772161) return {25, 17};
    if (mod == 469762049) return {26, 30};
    if (mod == 754974721) return {24, 362};
    if (mod == 880803841) return {23, 211};
    if (mod == 943718401) return {22, 663003469};
    if (mod == 998244353) return {23, 31};
    if (mod == 1004535809) return {21, 836905998};
    if (mod == 1045430273) return {20, 363};
    if (mod == 1051721729) return {20, 330};
    if (mod == 1053818881) return {20, 2789};
    return {-1, -1};
  }
  static constexpr bool can_ntt() { return ntt_info().fi != -1; }
};

#ifdef FASTIO
template <int mod>
void rd(modint<mod> &x) {
  fastio::rd(x.val);
  x.val %= mod;
  // assert(0 <= x.val && x.val < mod);
}
template <int mod>
void wt(modint<mod> x) {
  fastio::wt(x.val);
}
#endif

using modint107 = modint<1000000007>;
using modint998 = modint<998244353>;
#line 2 "/home/maspy/compro/library/mod/mod_inv.hpp"

// long でも大丈夫
// (val * x - 1) が mod の倍数になるようにする
// 特に mod=0 なら x=0 が満たす
ll mod_inv(ll val, ll mod) {
  if (mod == 0) return 0;
  mod = abs(mod);
  val %= mod;
  if (val < 0) val += mod;
  ll a = val, b = mod, u = 1, v = 0, t;
  while (b > 0) {
    t = a / b;
    swap(a -= t * b, b), swap(u -= t * v, v);
  }
  if (u < 0) u += mod;
  return u;
}
#line 2 "/home/maspy/compro/library/mod/crt3.hpp"

constexpr u32 mod_pow_constexpr(u64 a, u64 n, u32 mod) {
  a %= mod;
  u64 res = 1;
  FOR(32) {
    if (n & 1) res = res * a % mod;
    a = a * a % mod, n /= 2;
  }
  return res;
}

template <typename T, u32 p0, u32 p1>
T CRT2(u64 a0, u64 a1) {
  static_assert(p0 < p1);
  static constexpr u64 x0_1 = mod_pow_constexpr(p0, p1 - 2, p1);
  u64 c = (a1 - a0 + p1) * x0_1 % p1;
  return a0 + c * p0;
}

template <typename T, u32 p0, u32 p1, u32 p2>
T CRT3(u64 a0, u64 a1, u64 a2) {
  static_assert(p0 < p1 && p1 < p2);
  static constexpr u64 x1 = mod_pow_constexpr(p0, p1 - 2, p1);
  static constexpr u64 x2 = mod_pow_constexpr(u64(p0) * p1 % p2, p2 - 2, p2);
  static constexpr u64 p01 = u64(p0) * p1;
  u64 c = (a1 - a0 + p1) * x1 % p1;
  u64 ans_1 = a0 + c * p0;
  c = (a2 - ans_1 % p2 + p2) * x2 % p2;
  return T(ans_1) + T(c) * T(p01);
}

template <typename T, u32 p0, u32 p1, u32 p2, u32 p3>
T CRT4(u64 a0, u64 a1, u64 a2, u64 a3) {
  static_assert(p0 < p1 && p1 < p2 && p2 < p3);
  static constexpr u64 x1 = mod_pow_constexpr(p0, p1 - 2, p1);
  static constexpr u64 x2 = mod_pow_constexpr(u64(p0) * p1 % p2, p2 - 2, p2);
  static constexpr u64 x3 = mod_pow_constexpr(u64(p0) * p1 % p3 * p2 % p3, p3 - 2, p3);
  static constexpr u64 p01 = u64(p0) * p1;
  u64 c = (a1 - a0 + p1) * x1 % p1;
  u64 ans_1 = a0 + c * p0;
  c = (a2 - ans_1 % p2 + p2) * x2 % p2;
  u128 ans_2 = ans_1 + c * static_cast<u128>(p01);
  c = (a3 - ans_2 % p3 + p3) * x3 % p3;
  return T(ans_2) + T(c) * T(p01) * T(p2);
}

template <typename T, u32 p0, u32 p1, u32 p2, u32 p3, u32 p4>
T CRT5(u64 a0, u64 a1, u64 a2, u64 a3, u64 a4) {
  static_assert(p0 < p1 && p1 < p2 && p2 < p3 && p3 < p4);
  static constexpr u64 x1 = mod_pow_constexpr(p0, p1 - 2, p1);
  static constexpr u64 x2 = mod_pow_constexpr(u64(p0) * p1 % p2, p2 - 2, p2);
  static constexpr u64 x3 = mod_pow_constexpr(u64(p0) * p1 % p3 * p2 % p3, p3 - 2, p3);
  static constexpr u64 x4 = mod_pow_constexpr(u64(p0) * p1 % p4 * p2 % p4 * p3 % p4, p4 - 2, p4);
  static constexpr u64 p01 = u64(p0) * p1;
  static constexpr u64 p23 = u64(p2) * p3;
  u64 c = (a1 - a0 + p1) * x1 % p1;
  u64 ans_1 = a0 + c * p0;
  c = (a2 - ans_1 % p2 + p2) * x2 % p2;
  u128 ans_2 = ans_1 + c * static_cast<u128>(p01);
  c = static_cast<u64>(a3 - ans_2 % p3 + p3) * x3 % p3;
  u128 ans_3 = ans_2 + static_cast<u128>(c * p2) * p01;
  c = static_cast<u64>(a4 - ans_3 % p4 + p4) * x4 % p4;
  return T(ans_3) + T(c) * T(p01) * T(p23);
}
#line 2 "/home/maspy/compro/library/poly/convolution_naive.hpp"

template <class T, typename enable_if<!has_mod<T>::value>::type* = nullptr>
vc<T> convolution_naive(const vc<T>& a, const vc<T>& b) {
  int n = int(a.size()), m = int(b.size());
  if (n > m) return convolution_naive<T>(b, a);
  if (n == 0) return {};
  vector<T> ans(n + m - 1);
  FOR(i, n) FOR(j, m) ans[i + j] += a[i] * b[j];
  return ans;
}

template <class T, typename enable_if<has_mod<T>::value>::type* = nullptr>
vc<T> convolution_naive(const vc<T>& a, const vc<T>& b) {
  int n = int(a.size()), m = int(b.size());
  if (n > m) return convolution_naive<T>(b, a);
  if (n == 0) return {};
  vc<T> ans(n + m - 1);
  if (n <= 16 && (T::get_mod() < (1 << 30))) {
    for (int k = 0; k < n + m - 1; ++k) {
      int s = max(0, k - m + 1);
      int t = min(n, k + 1);
      u64 sm = 0;
      for (int i = s; i < t; ++i) { sm += u64(a[i].val) * (b[k - i].val); }
      ans[k] = sm;
    }
  } else {
    for (int k = 0; k < n + m - 1; ++k) {
      int s = max(0, k - m + 1);
      int t = min(n, k + 1);
      u128 sm = 0;
      for (int i = s; i < t; ++i) { sm += u64(a[i].val) * (b[k - i].val); }
      ans[k] = T::raw(sm % T::get_mod());
    }
  }
  return ans;
}
#line 2 "/home/maspy/compro/library/poly/convolution_karatsuba.hpp"

// 任意の環でできる
template <typename T>
vc<T> convolution_karatsuba(const vc<T>& f, const vc<T>& g) {
  const int thresh = 30;
  if (min(len(f), len(g)) <= thresh) return convolution_naive(f, g);
  int n = max(len(f), len(g));
  int m = ceil(n, 2);
  vc<T> f1, f2, g1, g2;
  if (len(f) < m) f1 = f;
  if (len(f) >= m) f1 = {f.begin(), f.begin() + m};
  if (len(f) >= m) f2 = {f.begin() + m, f.end()};
  if (len(g) < m) g1 = g;
  if (len(g) >= m) g1 = {g.begin(), g.begin() + m};
  if (len(g) >= m) g2 = {g.begin() + m, g.end()};
  vc<T> a = convolution_karatsuba(f1, g1);
  vc<T> b = convolution_karatsuba(f2, g2);
  FOR(i, len(f2)) f1[i] += f2[i];
  FOR(i, len(g2)) g1[i] += g2[i];
  vc<T> c = convolution_karatsuba(f1, g1);
  vc<T> F(len(f) + len(g) - 1);
  assert(2 * m + len(b) <= len(F));
  FOR(i, len(a)) F[i] += a[i], c[i] -= a[i];
  FOR(i, len(b)) F[2 * m + i] += b[i], c[i] -= b[i];
  if (c.back() == T(0)) c.pop_back();
  FOR(i, len(c)) if (c[i] != T(0)) F[m + i] += c[i];
  return F;
}
#line 2 "/home/maspy/compro/library/poly/ntt.hpp"

template <class mint>
void ntt(vector<mint>& a, bool inverse) {
  assert(mint::can_ntt());
  const int rank2 = mint::ntt_info().fi;
  const int mod = mint::get_mod();
  static array<mint, 30> root, iroot;
  static array<mint, 30> rate2, irate2;
  static array<mint, 30> rate3, irate3;

  assert(rank2 != -1 && len(a) <= (1 << max(0, rank2)));

  static bool prepared = 0;
  if (!prepared) {
    prepared = 1;
    root[rank2] = mint::ntt_info().se;
    iroot[rank2] = mint(1) / root[rank2];
    FOR_R(i, rank2) {
      root[i] = root[i + 1] * root[i + 1];
      iroot[i] = iroot[i + 1] * iroot[i + 1];
    }
    mint prod = 1, iprod = 1;
    for (int i = 0; i <= rank2 - 2; i++) {
      rate2[i] = root[i + 2] * prod;
      irate2[i] = iroot[i + 2] * iprod;
      prod *= iroot[i + 2];
      iprod *= root[i + 2];
    }
    prod = 1, iprod = 1;
    for (int i = 0; i <= rank2 - 3; i++) {
      rate3[i] = root[i + 3] * prod;
      irate3[i] = iroot[i + 3] * iprod;
      prod *= iroot[i + 3];
      iprod *= root[i + 3];
    }
  }

  int n = int(a.size());
  int h = topbit(n);
  assert(n == 1 << h);
  if (!inverse) {
    int len = 0;
    while (len < h) {
      if (h - len == 1) {
        int p = 1 << (h - len - 1);
        mint rot = 1;
        FOR(s, 1 << len) {
          int offset = s << (h - len);
          FOR(i, p) {
            auto l = a[i + offset];
            auto r = a[i + offset + p] * rot;
            a[i + offset] = l + r;
            a[i + offset + p] = l - r;
          }
          rot *= rate2[topbit(~s & -~s)];
        }
        len++;
      } else {
        int p = 1 << (h - len - 2);
        mint rot = 1, imag = root[2];
        for (int s = 0; s < (1 << len); s++) {
          mint rot2 = rot * rot;
          mint rot3 = rot2 * rot;
          int offset = s << (h - len);
          for (int i = 0; i < p; i++) {
            u64 mod2 = u64(mod) * mod;
            u64 a0 = a[i + offset].val;
            u64 a1 = u64(a[i + offset + p].val) * rot.val;
            u64 a2 = u64(a[i + offset + 2 * p].val) * rot2.val;
            u64 a3 = u64(a[i + offset + 3 * p].val) * rot3.val;
            u64 a1na3imag = (a1 + mod2 - a3) % mod * imag.val;
            u64 na2 = mod2 - a2;
            a[i + offset] = a0 + a2 + a1 + a3;
            a[i + offset + 1 * p] = a0 + a2 + (2 * mod2 - (a1 + a3));
            a[i + offset + 2 * p] = a0 + na2 + a1na3imag;
            a[i + offset + 3 * p] = a0 + na2 + (mod2 - a1na3imag);
          }
          rot *= rate3[topbit(~s & -~s)];
        }
        len += 2;
      }
    }
  } else {
    mint coef = mint(1) / mint(len(a));
    FOR(i, len(a)) a[i] *= coef;
    int len = h;
    while (len) {
      if (len == 1) {
        int p = 1 << (h - len);
        mint irot = 1;
        FOR(s, 1 << (len - 1)) {
          int offset = s << (h - len + 1);
          FOR(i, p) {
            u64 l = a[i + offset].val;
            u64 r = a[i + offset + p].val;
            a[i + offset] = l + r;
            a[i + offset + p] = (mod + l - r) * irot.val;
          }
          irot *= irate2[topbit(~s & -~s)];
        }
        len--;
      } else {
        int p = 1 << (h - len);
        mint irot = 1, iimag = iroot[2];
        FOR(s, (1 << (len - 2))) {
          mint irot2 = irot * irot;
          mint irot3 = irot2 * irot;
          int offset = s << (h - len + 2);
          for (int i = 0; i < p; i++) {
            u64 a0 = a[i + offset + 0 * p].val;
            u64 a1 = a[i + offset + 1 * p].val;
            u64 a2 = a[i + offset + 2 * p].val;
            u64 a3 = a[i + offset + 3 * p].val;
            u64 x = (mod + a2 - a3) * iimag.val % mod;
            a[i + offset] = a0 + a1 + a2 + a3;
            a[i + offset + 1 * p] = (a0 + mod - a1 + x) * irot.val;
            a[i + offset + 2 * p] = (a0 + a1 + 2 * mod - a2 - a3) * irot2.val;
            a[i + offset + 3 * p] = (a0 + 2 * mod - a1 - x) * irot3.val;
          }
          irot *= irate3[topbit(~s & -~s)];
        }
        len -= 2;
      }
    }
  }
}
#line 1 "/home/maspy/compro/library/poly/fft.hpp"
namespace CFFT {
using real = double;

struct C {
  real x, y;

  C() : x(0), y(0) {}

  C(real x, real y) : x(x), y(y) {}
  inline C operator+(const C& c) const { return C(x + c.x, y + c.y); }
  inline C operator-(const C& c) const { return C(x - c.x, y - c.y); }
  inline C operator*(const C& c) const {
    return C(x * c.x - y * c.y, x * c.y + y * c.x);
  }

  inline C conj() const { return C(x, -y); }
};

const real PI = acosl(-1);
int base = 1;
vector<C> rts = {{0, 0}, {1, 0}};
vector<int> rev = {0, 1};

void ensure_base(int nbase) {
  if (nbase <= base) return;
  rev.resize(1 << nbase);
  rts.resize(1 << nbase);
  for (int i = 0; i < (1 << nbase); i++) {
    rev[i] = (rev[i >> 1] >> 1) + ((i & 1) << (nbase - 1));
  }
  while (base < nbase) {
    real angle = PI * 2.0 / (1 << (base + 1));
    for (int i = 1 << (base - 1); i < (1 << base); i++) {
      rts[i << 1] = rts[i];
      real angle_i = angle * (2 * i + 1 - (1 << base));
      rts[(i << 1) + 1] = C(cos(angle_i), sin(angle_i));
    }
    ++base;
  }
}

void fft(vector<C>& a, int n) {
  assert((n & (n - 1)) == 0);
  int zeros = __builtin_ctz(n);
  ensure_base(zeros);
  int shift = base - zeros;
  for (int i = 0; i < n; i++) {
    if (i < (rev[i] >> shift)) { swap(a[i], a[rev[i] >> shift]); }
  }
  for (int k = 1; k < n; k <<= 1) {
    for (int i = 0; i < n; i += 2 * k) {
      for (int j = 0; j < k; j++) {
        C z = a[i + j + k] * rts[j + k];
        a[i + j + k] = a[i + j] - z;
        a[i + j] = a[i + j] + z;
      }
    }
  }
}
} // namespace CFFT
#line 9 "/home/maspy/compro/library/poly/convolution.hpp"

template <class mint>
vector<mint> convolution_ntt(vector<mint> a, vector<mint> b) {
  if (a.empty() || b.empty()) return {};
  int n = int(a.size()), m = int(b.size());
  int sz = 1;
  while (sz < n + m - 1) sz *= 2;

  // sz = 2^k のときの高速化。分割統治的なやつで損しまくるので。
  if ((n + m - 3) <= sz / 2) {
    auto a_last = a.back(), b_last = b.back();
    a.pop_back(), b.pop_back();
    auto c = convolution(a, b);
    c.resize(n + m - 1);
    c[n + m - 2] = a_last * b_last;
    FOR(i, len(a)) c[i + len(b)] += a[i] * b_last;
    FOR(i, len(b)) c[i + len(a)] += b[i] * a_last;
    return c;
  }

  a.resize(sz), b.resize(sz);
  bool same = a == b;
  ntt(a, 0);
  if (same) {
    b = a;
  } else {
    ntt(b, 0);
  }
  FOR(i, sz) a[i] *= b[i];
  ntt(a, 1);
  a.resize(n + m - 1);
  return a;
}

template <typename mint>
vector<mint> convolution_garner(const vector<mint>& a, const vector<mint>& b) {
  int n = len(a), m = len(b);
  if (!n || !m) return {};
  static constexpr int p0 = 167772161;
  static constexpr int p1 = 469762049;
  static constexpr int p2 = 754974721;
  using mint0 = modint<p0>;
  using mint1 = modint<p1>;
  using mint2 = modint<p2>;
  vc<mint0> a0(n), b0(m);
  vc<mint1> a1(n), b1(m);
  vc<mint2> a2(n), b2(m);
  FOR(i, n) a0[i] = a[i].val, a1[i] = a[i].val, a2[i] = a[i].val;
  FOR(i, m) b0[i] = b[i].val, b1[i] = b[i].val, b2[i] = b[i].val;
  auto c0 = convolution_ntt<mint0>(a0, b0);
  auto c1 = convolution_ntt<mint1>(a1, b1);
  auto c2 = convolution_ntt<mint2>(a2, b2);
  vc<mint> c(len(c0));
  FOR(i, n + m - 1) { c[i] = CRT3<mint, p0, p1, p2>(c0[i].val, c1[i].val, c2[i].val); }
  return c;
}

template <typename R>
vc<double> convolution_fft(const vc<R>& a, const vc<R>& b) {
  using C = CFFT::C;
  int need = (int)a.size() + (int)b.size() - 1;
  int nbase = 1;
  while ((1 << nbase) < need) nbase++;
  CFFT::ensure_base(nbase);
  int sz = 1 << nbase;
  vector<C> fa(sz);
  for (int i = 0; i < sz; i++) {
    double x = (i < (int)a.size() ? a[i] : 0);
    double y = (i < (int)b.size() ? b[i] : 0);
    fa[i] = C(x, y);
  }
  CFFT::fft(fa, sz);
  C r(0, -0.25 / (sz >> 1)), s(0, 1), t(0.5, 0);
  for (int i = 0; i <= (sz >> 1); i++) {
    int j = (sz - i) & (sz - 1);
    C z = (fa[j] * fa[j] - (fa[i] * fa[i]).conj()) * r;
    fa[j] = (fa[i] * fa[i] - (fa[j] * fa[j]).conj()) * r;
    fa[i] = z;
  }
  for (int i = 0; i < (sz >> 1); i++) {
    C A0 = (fa[i] + fa[i + (sz >> 1)]) * t;
    C A1 = (fa[i] - fa[i + (sz >> 1)]) * t * CFFT::rts[(sz >> 1) + i];
    fa[i] = A0 + A1 * s;
  }
  CFFT::fft(fa, sz >> 1);
  vector<double> ret(need);
  for (int i = 0; i < need; i++) { ret[i] = (i & 1 ? fa[i >> 1].y : fa[i >> 1].x); }
  return ret;
}

vector<ll> convolution(const vector<ll>& a, const vector<ll>& b) {
  int n = len(a), m = len(b);
  if (!n || !m) return {};
  if (min(n, m) <= 2500) return convolution_naive(a, b);
  ll abs_sum_a = 0, abs_sum_b = 0;
  ll LIM = 1e15;
  FOR(i, n) abs_sum_a = min(LIM, abs_sum_a + abs(a[i]));
  FOR(i, m) abs_sum_b = min(LIM, abs_sum_b + abs(b[i]));
  if (i128(abs_sum_a) * abs_sum_b < 1e15) {
    vc<double> c = convolution_fft<ll>(a, b);
    vc<ll> res(len(c));
    FOR(i, len(c)) res[i] = ll(floor(c[i] + .5));
    return res;
  }

  static constexpr u32 MOD1 = 167772161; // 2^25
  static constexpr u32 MOD2 = 469762049; // 2^26
  static constexpr u32 MOD3 = 754974721; // 2^24

  using mint1 = modint<MOD1>;
  using mint2 = modint<MOD2>;
  using mint3 = modint<MOD3>;

  vc<mint1> a1(n), b1(m);
  vc<mint2> a2(n), b2(m);
  vc<mint3> a3(n), b3(m);
  FOR(i, n) a1[i] = a[i], a2[i] = a[i], a3[i] = a[i];
  FOR(i, m) b1[i] = b[i], b2[i] = b[i], b3[i] = b[i];

  auto c1 = convolution_ntt<mint1>(a1, b1);
  auto c2 = convolution_ntt<mint2>(a2, b2);
  auto c3 = convolution_ntt<mint3>(a3, b3);

  u128 prod = u128(MOD1) * MOD2 * MOD3;
  vc<ll> res(n + m - 1);
  FOR(i, n + m - 1) {
    u128 x = CRT3<u128, MOD1, MOD2, MOD3>(c1[i].val, c2[i].val, c3[i].val);
    res[i] = (x < prod / 2 ? ll(x) : -ll(prod - x));
  }
  return res;
}

template <typename mint>
vc<mint> convolution(const vc<mint>& a, const vc<mint>& b) {
  int n = len(a), m = len(b);
  if (!n || !m) return {};
  if (mint::can_ntt()) {
    if (min(n, m) <= 50) return convolution_karatsuba<mint>(a, b);
    return convolution_ntt(a, b);
  }
  if (min(n, m) <= 200) return convolution_karatsuba<mint>(a, b);
  return convolution_garner(a, b);
}
#line 4 "/home/maspy/compro/library/poly/fps_inv.hpp"

template <typename mint>
vc<mint> fps_inv_sparse(const vc<mint>& f) {
  int N = len(f);
  vc<pair<int, mint>> dat;
  FOR(i, 1, N) if (f[i] != mint(0)) dat.eb(i, f[i]);
  vc<mint> g(N);
  mint g0 = mint(1) / f[0];
  g[0] = g0;
  FOR(n, 1, N) {
    mint rhs = 0;
    for (auto&& [k, fk]: dat) {
      if (k > n) break;
      rhs -= fk * g[n - k];
    }
    g[n] = rhs * g0;
  }
  return g;
}

template <typename mint>
vc<mint> fps_inv_dense_ntt(const vc<mint>& F) {
  vc<mint> G = {mint(1) / F[0]};
  ll N = len(F), n = 1;
  G.reserve(N);
  while (n < N) {
    vc<mint> f(2 * n), g(2 * n);
    FOR(i, min(N, 2 * n)) f[i] = F[i];
    FOR(i, n) g[i] = G[i];
    ntt(f, false), ntt(g, false);
    FOR(i, 2 * n) f[i] *= g[i];
    ntt(f, true);
    FOR(i, n) f[i] = 0;
    ntt(f, false);
    FOR(i, 2 * n) f[i] *= g[i];
    ntt(f, true);
    FOR(i, n, min(N, 2 * n)) G.eb(-f[i]);
    n *= 2;
  }
  return G;
}

template <typename mint>
vc<mint> fps_inv_dense(const vc<mint>& F) {
  if (mint::can_ntt()) return fps_inv_dense_ntt(F);
  const int N = len(F);
  vc<mint> R = {mint(1) / F[0]};
  vc<mint> p;
  int m = 1;
  while (m < N) {
    p = convolution(R, R);
    p.resize(m + m);
    vc<mint> f = {F.begin(), F.begin() + min(m + m, N)};
    p = convolution(p, f);
    R.resize(m + m);
    FOR(i, m + m) R[i] = R[i] + R[i] - p[i];
    m += m;
  }
  R.resize(N);
  return R;
}

template <typename mint>
vc<mint> fps_inv(const vc<mint>& f) {
  assert(f[0] != mint(0));
  int n = count_terms(f);
  int t = (mint::can_ntt() ? 160 : 820);
  return (n <= t ? fps_inv_sparse<mint>(f) : fps_inv_dense<mint>(f));
}
#line 5 "main.cpp"

bool naive_check(vc<int> P, vc<int> A) {
  int N = len(P);

  FOR(s, 1 << N) {
    if (popcnt(s) != N / 2) continue;
    string S(N, '0');
    FOR(i, N) if (s >> i & 1) S[i] = '1';
    bool ok = 1;
    for (auto &a: A) {
      ll x = 0, y = 0;
      FOR(i, a) { x += S[i] == '0'; }
      y = a - x;
      if (x <= y) ok = 0;
      x = 0, y = 0;
      FOR(i, a) { x += S[P[i]] == '0'; }
      y = a - x;
      if (x <= y) ok = 0;
    }
    if (ok) { return 1; }
  }
  return 0;
}

bool mycheck(vc<int> P, vc<int> A) {
  for (auto &a: A) {
    for (auto &b: A) {
      if (a + b != len(P)) continue;
      bool bad = 1;
      FOR(i, len(P) - b, len(P)) {
        if (P[i] >= b) bad = 0;
      }
      if (bad) return 0;
    }
  }
  return 1;
}

void test(ll N) {
  vi odd;
  FOR(i, 1, 2 * N) if (i & 1) odd.eb(i);
  ll n = len(odd);
  FOR(s, 1 << n) {
    print(n, s), flush();
    vc<int> A;
    FOR(i, n) if (s >> i & 1) A.eb(odd[i]);
    vc<int> P(N + N);
    FOR(i, N + N) P[i] = i;
    do {
      ll x = naive_check(P, A);
      ll y = mycheck(P, A);
      assert(x == y);
    } while (next_permutation(all(P)));
  }
}

using mint = modint998;

void solve() {
  LL(N, M);
  vi IN_A(N + N + 1);
  FOR(M) {
    LL(a);
    IN_A[a] = 1;
  }
  vc<mint> S(N + N + 1);
  FOR(i, N + N + 1) S[i] = fact<mint>(i);
  S = fps_inv<mint>(S);
  S[0] = 0;
  FOR(i, 1, len(S)) S[i] = -S[i];

  auto NG = [&](int j) -> bool { return IN_A[j] && IN_A[N + N - j]; };

  vc<mint> dp(N + N + 1);
  dp[0] = 1;
  // FOR(j, N + N + 1) {
  //   FOR(i, j) dp[j] += dp[i] * S[j - i];
  //   if (NG(j)) dp[j] = 0;
  // }

  auto sub = [&](int L, int M, int R) -> void {
    // FOR(i, L, M) FOR(j, M, R) { dp[j] += dp[i] * S[j - i]; }
    vc<mint> F(M - L);
    FOR(i, M - L) F[i] = dp[L + i];
    vc<mint> G(R - L);
    FOR(i, R - L) G[i] = S[i];

    F = convolution<mint>(F, G);
    FOR(i, len(F)) {
      ll j = L + i;
      if (M <= j && j < R) dp[j] += F[i];
    }
  };

  auto dfs = [&](auto &dfs, int L, int R) -> void {
    if (R == L + 1) {
      if (NG(L)) dp[L] = 0;
      return;
    }
    int M = (L + R) / 2;
    dfs(dfs, L, M);
    sub(L, M, R);
    dfs(dfs, M, R);
  };
  dfs(dfs, 0, N + N + 1);
  print(dp[N + N]);
}

signed main() {
  // test(1);
  // test(2);
  // test(3);
  // test(4);
  // test(5);
  solve();
  return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3708kb

input:

2 2
1 3

output:

14

result:

ok "14"

Test #2:

score: 0
Accepted
time: 1ms
memory: 4020kb

input:

5 4
1 3 7 9

output:

2909184

result:

ok "2909184"

Test #3:

score: 0
Accepted
time: 0ms
memory: 4016kb

input:

5 1
5

output:

3614400

result:

ok "3614400"

Test #4:

score: 0
Accepted
time: 0ms
memory: 3784kb

input:

3 1
3

output:

684

result:

ok "684"

Test #5:

score: 0
Accepted
time: 0ms
memory: 3824kb

input:

5 2
5 9

output:

3614400

result:

ok "3614400"

Test #6:

score: 0
Accepted
time: 327ms
memory: 13448kb

input:

96685 10195
21 27 35 53 63 81 89 117 119 125 131 135 141 157 181 201 225 229 269 275 287 293 321 325 361 363 379 403 409 429 435 441 491 501 505 543 569 609 611 669 711 717 725 727 731 759 769 785 793 797 809 821 863 899 903 911 929 937 961 997 1051 1073 1077 1123 1157 1179 1235 1251 1275 1317 1319 ...

output:

95571712

result:

ok "95571712"

Test #7:

score: 0
Accepted
time: 150ms
memory: 9832kb

input:

64166 56097
3 9 11 13 15 17 19 21 25 27 29 31 33 35 37 39 41 43 45 47 49 51 55 57 59 61 63 65 67 69 71 73 75 77 79 85 87 89 91 93 95 97 101 105 107 111 113 115 117 119 121 123 125 127 131 133 137 141 143 145 149 153 155 159 161 163 167 169 171 173 175 177 181 183 185 187 189 191 195 197 199 201 205 ...

output:

228890492

result:

ok "228890492"

Test #8:

score: 0
Accepted
time: 331ms
memory: 13692kb

input:

98805 64583
1 3 5 7 9 13 15 17 19 21 27 33 35 39 41 43 45 47 49 53 55 57 59 61 65 67 71 73 75 77 79 81 83 85 89 91 95 97 103 107 109 121 123 127 129 135 137 139 141 143 145 149 151 153 155 157 159 161 163 167 171 173 175 177 179 181 183 185 187 189 191 197 199 203 205 207 213 215 219 221 223 225 227...

output:

184329625

result:

ok "184329625"

Test #9:

score: 0
Accepted
time: 188ms
memory: 9816kb

input:

72245 14521
5 35 37 43 75 77 97 129 155 171 173 175 179 183 209 213 219 225 227 229 241 255 257 263 271 295 297 305 307 315 321 323 335 351 361 363 369 379 389 391 395 433 435 439 443 449 451 455 463 483 497 523 531 537 557 559 567 573 589 595 609 613 633 641 643 651 655 657 669 695 701 721 793 803 ...

output:

61878119

result:

ok "61878119"

Test #10:

score: 0
Accepted
time: 160ms
memory: 9308kb

input:

63266 62348
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 87 89 91 93 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 127 129 131 133 135 137 139 141 143 145 149 151 153 155 157 159 161 163 165 167 169 171 173 175 17...

output:

265087059

result:

ok "265087059"

Test #11:

score: 0
Accepted
time: 322ms
memory: 13460kb

input:

96192 60042
1 3 5 7 9 13 17 21 31 33 39 41 45 47 51 53 55 57 61 63 65 67 69 75 79 81 83 85 87 89 91 95 99 101 103 105 109 111 115 131 133 135 137 141 151 153 155 157 161 165 169 173 175 177 181 183 189 193 199 205 207 209 215 217 219 221 225 227 229 231 239 243 245 247 249 251 257 263 265 273 275 27...

output:

750054525

result:

ok "750054525"

Test #12:

score: 0
Accepted
time: 321ms
memory: 13584kb

input:

96428 60349
1 3 7 9 13 19 21 23 25 27 29 37 39 41 43 45 49 51 53 55 61 63 67 69 73 75 77 81 85 87 89 91 93 95 97 99 101 111 113 117 123 125 127 129 131 135 137 139 141 149 151 155 157 161 169 171 173 175 177 179 185 189 193 197 209 211 213 219 223 225 229 231 233 235 237 239 243 247 251 253 259 263 ...

output:

214089880

result:

ok "214089880"

Test #13:

score: 0
Accepted
time: 322ms
memory: 13424kb

input:

92301 57523
3 7 9 13 15 17 19 21 27 29 31 33 45 47 53 61 63 67 71 73 75 77 79 81 83 85 87 91 93 99 101 107 109 111 113 115 117 121 125 127 129 133 135 137 139 145 147 149 153 155 159 161 165 167 171 173 175 177 183 185 189 191 193 195 197 199 205 207 211 213 215 219 221 223 225 231 235 237 239 241 2...

output:

698581206

result:

ok "698581206"

Test #14:

score: 0
Accepted
time: 323ms
memory: 13360kb

input:

92162 57420
5 7 9 15 23 25 27 29 31 35 37 39 43 45 49 51 53 57 63 65 67 69 73 77 81 83 85 87 89 99 101 103 107 109 115 117 121 123 125 127 129 131 133 135 137 139 141 143 145 147 149 153 157 159 161 167 175 177 185 189 191 197 199 201 203 219 221 223 229 231 235 239 241 243 247 251 257 259 267 275 2...

output:

779052124

result:

ok "779052124"

Test #15:

score: 0
Accepted
time: 324ms
memory: 13580kb

input:

95309 59643
1 7 9 11 15 17 23 25 29 33 35 37 45 47 49 51 53 55 59 61 63 65 67 69 71 79 81 83 85 87 89 93 95 97 103 105 107 111 113 115 117 119 121 123 127 129 131 133 135 139 141 143 147 149 159 161 163 167 169 173 179 181 183 189 193 197 199 203 207 209 211 213 215 217 223 227 229 231 237 239 241 2...

output:

895352747

result:

ok "895352747"

Test #16:

score: 0
Accepted
time: 315ms
memory: 13532kb

input:

97003 25153
11 19 27 31 53 71 75 81 85 95 97 113 129 131 139 145 159 163 171 175 193 209 211 213 217 227 237 239 241 249 253 271 275 279 295 301 309 329 331 343 351 359 361 375 379 383 389 395 401 403 413 415 425 433 441 447 451 455 473 475 495 505 521 533 535 537 539 543 559 603 605 609 611 615 619...

output:

945539005

result:

ok "945539005"

Test #17:

score: 0
Accepted
time: 321ms
memory: 13760kb

input:

99075 39136
3 5 7 15 17 19 21 29 31 33 41 51 53 55 57 59 61 65 73 81 89 91 97 101 115 119 121 123 127 133 135 149 155 157 171 175 183 185 187 189 191 199 215 225 227 229 231 237 239 241 247 257 267 269 271 273 281 283 295 299 315 323 333 337 339 343 349 351 367 377 395 397 399 407 411 413 423 427 43...

output:

432766313

result:

ok "432766313"

Test #18:

score: 0
Accepted
time: 326ms
memory: 13568kb

input:

92159 26615
5 27 33 37 49 53 65 67 69 71 73 77 93 95 107 115 143 147 155 161 163 173 175 179 183 185 203 221 225 235 241 245 253 257 271 273 291 301 305 307 317 327 337 339 347 351 353 363 375 377 379 389 397 401 405 409 419 421 437 441 443 447 453 465 477 489 491 497 505 531 547 557 559 563 571 583...

output:

232913447

result:

ok "232913447"

Test #19:

score: 0
Accepted
time: 327ms
memory: 13328kb

input:

93053 56499
1 5 9 11 13 17 19 23 25 29 31 37 39 45 47 49 51 55 59 65 67 69 71 75 79 83 91 99 103 105 107 109 111 113 115 117 121 123 125 127 129 131 133 135 137 139 141 145 151 157 159 161 165 167 169 171 175 177 179 181 183 185 187 191 193 195 197 199 201 205 207 209 211 215 217 221 223 227 233 235...

output:

694330858

result:

ok "694330858"

Test #20:

score: 0
Accepted
time: 323ms
memory: 13468kb

input:

93589 51398
3 7 21 23 25 29 31 33 35 37 39 41 43 47 49 53 55 61 63 77 83 85 89 95 99 105 109 113 117 125 127 129 135 139 141 147 151 155 157 159 163 165 167 171 173 179 183 185 187 197 201 207 211 217 219 221 233 239 241 251 257 261 265 267 269 273 275 283 287 289 291 295 297 305 307 313 315 317 321...

output:

777536233

result:

ok "777536233"

Test #21:

score: 0
Accepted
time: 319ms
memory: 13592kb

input:

100000 62633
3 5 9 13 15 17 19 21 23 27 33 37 39 41 45 49 51 53 55 61 63 65 69 71 73 77 81 85 87 89 91 95 97 99 103 105 107 109 111 115 117 119 123 125 127 129 133 137 139 141 143 145 147 149 153 159 161 163 165 167 173 177 179 181 183 187 193 195 197 199 209 211 213 215 217 221 223 225 227 233 235 ...

output:

737504170

result:

ok "737504170"

Test #22:

score: 0
Accepted
time: 323ms
memory: 13620kb

input:

100000 62720
3 5 7 9 13 15 21 23 25 27 33 39 45 47 49 51 55 59 61 69 73 77 79 83 87 89 91 95 97 101 105 107 109 115 125 129 137 139 141 143 145 149 151 153 157 161 169 171 173 175 177 181 183 189 191 193 195 197 199 209 213 217 219 221 225 227 229 231 233 235 237 241 245 247 249 251 253 255 259 261 ...

output:

617748342

result:

ok "617748342"

Test #23:

score: 0
Accepted
time: 327ms
memory: 13736kb

input:

100000 61952
1 5 11 13 15 19 21 23 25 29 33 35 39 43 45 47 49 57 59 61 63 67 71 73 75 77 79 81 83 85 87 91 93 99 101 103 107 109 115 117 121 123 125 129 133 137 143 147 149 153 155 157 161 169 173 175 179 181 183 185 187 189 191 193 199 201 211 217 219 221 225 229 231 235 239 243 245 247 251 253 255...

output:

610444772

result:

ok "610444772"

Test #24:

score: 0
Accepted
time: 323ms
memory: 13688kb

input:

100000 62478
7 9 11 15 19 21 23 25 29 31 33 35 37 39 43 45 47 51 53 55 57 59 61 65 67 75 79 83 93 95 97 99 101 103 109 111 113 115 119 121 123 137 143 145 147 149 151 157 167 169 171 175 177 179 181 185 187 189 191 193 195 197 199 207 209 211 215 217 221 223 227 231 233 235 239 241 243 245 247 249 2...

output:

35574634

result:

ok "35574634"

Test #25:

score: 0
Accepted
time: 326ms
memory: 13756kb

input:

100000 62512
1 3 5 7 9 13 17 23 25 27 31 33 35 37 39 41 45 47 53 55 57 59 61 63 65 69 71 73 75 77 81 83 89 91 93 97 99 101 103 105 107 109 111 117 121 123 125 127 129 133 135 137 139 141 153 155 157 161 163 165 167 169 171 175 181 183 187 189 191 193 195 199 203 207 209 213 219 223 225 227 229 231 2...

output:

576341038

result:

ok "576341038"

Test #26:

score: 0
Accepted
time: 317ms
memory: 13684kb

input:

100000 25239
3 7 9 11 17 19 23 33 43 47 51 57 65 69 77 79 93 113 121 123 145 147 151 153 161 165 169 173 175 179 181 185 191 197 199 201 209 213 215 217 219 227 229 233 241 263 295 303 305 315 321 329 343 349 359 363 365 367 379 381 383 387 389 395 397 409 441 447 457 461 463 465 471 477 479 547 551...

output:

610186317

result:

ok "610186317"

Test #27:

score: 0
Accepted
time: 317ms
memory: 13632kb

input:

100000 24954
3 5 7 13 17 25 37 43 49 53 61 83 93 101 111 115 117 123 131 135 139 141 157 181 185 195 197 201 221 223 229 241 245 251 257 285 293 301 323 337 347 349 357 363 367 373 377 431 435 437 441 449 453 461 469 479 489 493 495 499 501 513 517 523 527 539 541 557 559 563 583 589 593 611 631 635...

output:

584892215

result:

ok "584892215"

Test #28:

score: 0
Accepted
time: 321ms
memory: 13824kb

input:

100000 25057
7 13 21 41 43 47 65 83 89 111 113 119 131 133 141 143 145 157 169 181 185 201 207 211 215 221 253 257 269 277 287 291 295 303 315 319 333 335 369 371 377 407 415 417 445 447 457 475 485 503 507 509 511 513 517 535 541 543 545 551 555 557 567 573 585 587 591 593 595 605 611 623 629 631 6...

output:

420635212

result:

ok "420635212"

Test #29:

score: 0
Accepted
time: 326ms
memory: 13692kb

input:

100000 53389
1 5 9 13 17 19 27 29 31 33 35 39 47 63 71 77 79 83 87 89 91 93 97 101 103 105 107 109 111 115 117 119 125 129 137 139 145 149 155 157 161 163 165 177 179 181 185 195 197 199 207 209 217 219 221 223 225 227 229 233 235 239 245 247 251 253 257 259 267 269 273 275 277 281 285 287 289 291 2...

output:

272341848

result:

ok "272341848"

Test #30:

score: 0
Accepted
time: 326ms
memory: 13816kb

input:

100000 63131
1 3 7 9 11 13 15 17 19 21 23 27 29 31 37 39 41 45 47 49 61 63 65 69 71 73 77 85 87 91 95 99 101 103 105 107 111 113 117 119 121 125 127 129 133 137 141 143 145 147 149 153 155 157 161 163 171 173 177 179 181 183 185 187 191 193 195 197 199 201 203 207 209 213 215 225 227 233 235 239 241...

output:

486074251

result:

ok "486074251"

Test #31:

score: 0
Accepted
time: 322ms
memory: 13712kb

input:

100000 65584
1 3 7 9 11 13 15 17 21 23 29 31 33 37 41 45 47 51 53 57 63 65 69 71 75 77 79 85 95 97 101 107 109 111 113 117 119 121 125 129 131 133 135 139 145 151 155 157 159 167 169 173 177 179 181 183 189 195 199 203 205 215 217 219 221 225 231 233 235 237 241 245 251 255 263 265 267 271 273 275 2...

output:

300548747

result:

ok "300548747"

Test #32:

score: 0
Accepted
time: 326ms
memory: 13632kb

input:

100000 85028
1 3 5 7 9 11 13 15 17 21 23 29 31 33 35 37 39 41 45 47 49 51 53 55 59 61 63 65 67 69 71 73 75 77 79 81 85 87 89 91 93 95 97 99 101 103 105 107 109 111 115 117 119 121 129 131 133 135 137 139 141 143 145 149 151 153 159 161 163 165 167 169 171 173 175 177 179 181 183 185 187 189 191 193 ...

output:

771549211

result:

ok "771549211"

Test #33:

score: 0
Accepted
time: 317ms
memory: 13604kb

input:

100000 85689
1 3 5 7 9 11 13 19 23 25 29 33 37 39 41 43 45 47 49 53 55 57 59 61 63 65 67 69 71 73 75 77 79 83 85 87 89 91 93 97 99 101 103 105 107 109 111 113 117 121 123 125 127 129 133 135 137 139 141 143 145 147 149 151 153 155 157 159 161 163 165 167 169 171 175 177 183 187 189 191 193 195 197 1...

output:

559777459

result:

ok "559777459"

Test #34:

score: 0
Accepted
time: 326ms
memory: 13592kb

input:

100000 92620
1 3 5 7 9 11 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 93 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 125 127 129 131 133 135 137 139 141 143 147 149 153 155 157 159 165 167 169 171 173 175 177 179 181 183...

output:

636710940

result:

ok "636710940"

Test #35:

score: 0
Accepted
time: 327ms
memory: 13608kb

input:

100000 98228
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 125 127 129 131 133 135 137 139 141 143 145 147 149 151 153 155 157 159 161 163 165 167 169 171 1...

output:

997403689

result:

ok "997403689"

Test #36:

score: 0
Accepted
time: 318ms
memory: 13800kb

input:

100000 88348
1 3 5 7 9 13 15 17 19 21 25 27 29 33 37 39 41 43 47 49 51 55 57 59 61 65 67 69 71 73 75 77 79 81 83 85 87 89 93 95 97 99 101 103 105 109 111 115 117 121 123 125 127 129 131 133 135 137 139 143 145 147 151 153 155 157 159 161 163 165 167 169 171 173 175 177 179 181 183 185 187 189 191 19...

output:

238193664

result:

ok "238193664"

Test #37:

score: 0
Accepted
time: 324ms
memory: 13684kb

input:

100000 94819
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 91 93 95 97 99 101 103 105 107 109 113 115 117 119 123 125 127 129 131 133 135 137 139 141 143 145 147 149 151 153 155 157 159 161 163 165 167 169 171 173 175 1...

output:

108236721

result:

ok "108236721"

Test #38:

score: 0
Accepted
time: 318ms
memory: 13800kb

input:

100000 85432
1 3 9 11 13 15 17 19 21 23 25 27 29 31 35 37 41 43 45 47 49 53 55 57 61 63 65 67 69 75 77 79 81 83 87 89 91 93 95 97 99 101 103 105 107 109 111 115 117 121 123 125 127 131 133 135 137 139 143 145 149 151 153 155 157 159 161 163 165 167 169 173 175 177 183 187 189 191 193 195 197 199 201...

output:

784268076

result:

ok "784268076"

Test #39:

score: 0
Accepted
time: 318ms
memory: 13644kb

input:

100000 87305
1 3 5 7 9 11 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 55 57 61 63 65 67 71 73 75 77 79 81 83 85 87 89 91 93 95 99 101 103 105 107 111 113 115 117 119 121 123 125 127 129 131 133 135 137 143 145 147 149 151 153 155 157 159 165 167 171 173 175 177 179 183 185 187 189 191 1...

output:

149630632

result:

ok "149630632"

Test #40:

score: 0
Accepted
time: 314ms
memory: 13680kb

input:

99999 85201
1 3 5 7 9 11 13 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 103 105 107 111 113 115 117 119 121 123 125 127 129 131 133 135 137 139 141 143 145 147 149 151 153 157 161 163 165 167 169 171 173 175 177 179 181 1...

output:

440345213

result:

ok "440345213"

Test #41:

score: 0
Accepted
time: 330ms
memory: 13688kb

input:

99999 95806
1 3 5 7 9 11 15 19 21 23 25 27 29 31 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 87 91 93 95 97 99 101 103 107 109 111 113 115 117 119 121 123 125 127 129 131 133 135 137 139 141 143 145 147 149 151 153 155 157 159 161 163 165 167 169 173 175 177 179 181 183 1...

output:

501450066

result:

ok "501450066"

Test #42:

score: 0
Accepted
time: 322ms
memory: 13600kb

input:

99999 86821
1 3 5 7 9 11 15 17 19 21 25 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 77 79 81 83 85 87 89 95 99 101 105 107 109 113 115 117 119 121 123 125 127 131 133 135 137 139 141 143 145 147 149 151 153 155 159 161 163 165 169 171 173 175 177 179 181 183 185 189 191 193 ...

output:

751814239

result:

ok "751814239"

Test #43:

score: 0
Accepted
time: 321ms
memory: 13620kb

input:

99999 95752
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 125 127 129 131 133 135 137 139 141 143 145 147 149 151 153 155 157 159 161 163 165 167 169 171...

output:

581742233

result:

ok "581742233"

Test #44:

score: 0
Accepted
time: 319ms
memory: 13732kb

input:

99999 95760
1 3 5 7 9 11 13 17 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 125 127 129 131 133 135 137 139 141 143 145 147 149 153 155 157 159 161 163 165 167 169 171 173 175 177 ...

output:

138387454

result:

ok "138387454"

Test #45:

score: 0
Accepted
time: 326ms
memory: 13656kb

input:

99999 91930
1 3 5 7 9 11 13 15 17 19 23 25 27 31 33 35 37 39 41 43 45 47 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 101 103 105 107 109 111 113 115 117 119 121 123 125 127 129 131 133 135 137 139 141 143 145 147 149 151 155 157 159 161 163 165 167 169 171 173 175 177 179...

output:

741500441

result:

ok "741500441"

Test #46:

score: 0
Accepted
time: 322ms
memory: 13688kb

input:

99999 94888
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 125 127 129 131 133 135 137 139 141 145 147 149 151 153 155 157 159 161 163 165 167 169 171 173 17...

output:

974503537

result:

ok "974503537"

Test #47:

score: 0
Accepted
time: 325ms
memory: 13760kb

input:

99999 95733
1 3 5 7 9 11 13 15 17 19 23 25 27 29 33 35 37 39 41 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 125 127 129 131 133 135 137 141 143 145 147 149 151 153 155 157 159 161 163 165 167 169 171 173 175 177 ...

output:

448105112

result:

ok "448105112"

Test #48:

score: 0
Accepted
time: 0ms
memory: 3764kb

input:

1 1
1

output:

1

result:

ok "1"

Test #49:

score: 0
Accepted
time: 325ms
memory: 13712kb

input:

100000 100000
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 125 127 129 131 133 135 137 139 141 143 145 147 149 151 153 155 157 159 161 163 165 167 169 1...

output:

749028041

result:

ok "749028041"

Test #50:

score: 0
Accepted
time: 150ms
memory: 8676kb

input:

50000 50000
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 125 127 129 131 133 135 137 139 141 143 145 147 149 151 153 155 157 159 161 163 165 167 169 171...

output:

769389319

result:

ok "769389319"

Test #51:

score: 0
Accepted
time: 317ms
memory: 13616kb

input:

99999 99999
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 125 127 129 131 133 135 137 139 141 143 145 147 149 151 153 155 157 159 161 163 165 167 169 171...

output:

481565462

result:

ok "481565462"

Test #52:

score: 0
Accepted
time: 328ms
memory: 13700kb

input:

100000 1
1

output:

638474417

result:

ok "638474417"

Test #53:

score: 0
Accepted
time: 0ms
memory: 3716kb

input:

2 1
1

output:

24

result:

ok "24"

Test #54:

score: 0
Accepted
time: 147ms
memory: 8572kb

input:

50000 25000
5 11 13 15 17 21 29 35 37 39 47 49 51 53 55 57 59 63 65 67 69 73 75 83 91 105 107 113 117 123 129 131 133 135 137 139 149 151 153 159 161 163 171 177 183 187 189 195 203 207 209 211 213 217 229 231 237 245 249 251 259 263 265 269 271 275 279 281 283 285 289 293 295 299 305 307 311 313 31...

output:

215582594

result:

ok "215582594"

Test #55:

score: 0
Accepted
time: 323ms
memory: 13716kb

input:

100000 50000
9 13 15 17 23 27 35 37 39 43 47 53 55 57 65 77 81 85 87 91 95 97 101 105 107 109 111 115 117 125 131 137 139 147 149 151 155 161 167 169 171 173 179 187 189 195 201 205 213 217 219 221 227 231 235 237 239 241 243 249 251 253 255 261 263 267 271 279 289 299 303 305 307 311 315 317 321 32...

output:

638474417

result:

ok "638474417"

Extra Test:

score: 0
Extra Test Passed