QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#709274#9542. Friendship is Magicucup-team087AC ✓455ms19440kbC++2339.2kb2024-11-04 13:36:172024-11-04 13:36:19

Judging History

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

  • [2024-11-04 13:36:19]
  • 评测
  • 测评结果:AC
  • 用时:455ms
  • 内存:19440kb
  • [2024-11-04 13:36:17]
  • 提交

answer

#line 1 "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 "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 3 "main.cpp"

#line 2 "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 "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, 582313106};
    if (mod == 1012924417) return {21, 368093570};
    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 "library/geo/convex_hull.hpp"

#line 2 "library/geo/base.hpp"
template <typename T>
struct Point {
  T x, y;

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

  template <typename A, typename B>
  Point(A x, B y) : x(x), y(y) {}

  template <typename A, typename B>
  Point(pair<A, B> p) : x(p.fi), y(p.se) {}

  Point operator+=(const Point p) {
    x += p.x, y += p.y;
    return *this;
  }
  Point operator-=(const Point p) {
    x -= p.x, y -= p.y;
    return *this;
  }
  Point operator+(Point p) const { return {x + p.x, y + p.y}; }
  Point operator-(Point p) const { return {x - p.x, y - p.y}; }
  bool operator==(Point p) const { return x == p.x && y == p.y; }
  bool operator!=(Point p) const { return x != p.x || y != p.y; }
  Point operator-() const { return {-x, -y}; }
  Point operator*(T t) const { return {x * t, y * t}; }
  Point operator/(T t) const { return {x / t, y / t}; }

  bool operator<(Point p) const {
    if (x != p.x) return x < p.x;
    return y < p.y;
  }
  T dot(const Point& other) const { return x * other.x + y * other.y; }
  T det(const Point& other) const { return x * other.y - y * other.x; }

  double norm() { return sqrtl(x * x + y * y); }
  double angle() { return atan2(y, x); }

  Point rotate(double theta) {
    static_assert(!is_integral<T>::value);
    double c = cos(theta), s = sin(theta);
    return Point{c * x - s * y, s * x + c * y};
  }
  Point rot90(bool ccw) { return (ccw ? Point{-y, x} : Point{y, -x}); }
};

#ifdef FASTIO
template <typename T>
void rd(Point<T>& p) {
  fastio::rd(p.x), fastio::rd(p.y);
}
template <typename T>
void wt(Point<T>& p) {
  fastio::wt(p.x);
  fastio::wt(' ');
  fastio::wt(p.y);
}
#endif

// A -> B -> C と進むときに、左に曲がるならば +1、右に曲がるならば -1
template <typename T>
int ccw(Point<T> A, Point<T> B, Point<T> C) {
  T x = (B - A).det(C - A);
  if (x > 0) return 1;
  if (x < 0) return -1;
  return 0;
}

template <typename REAL, typename T, typename U>
REAL dist(Point<T> A, Point<U> B) {
  REAL dx = REAL(A.x) - REAL(B.x);
  REAL dy = REAL(A.y) - REAL(B.y);
  return sqrt(dx * dx + dy * dy);
}

// ax+by+c
template <typename T>
struct Line {
  T a, b, c;

  Line(T a, T b, T c) : a(a), b(b), c(c) {}
  Line(Point<T> A, Point<T> B) { a = A.y - B.y, b = B.x - A.x, c = A.x * B.y - A.y * B.x; }
  Line(T x1, T y1, T x2, T y2) : Line(Point<T>(x1, y1), Point<T>(x2, y2)) {}

  template <typename U>
  U eval(Point<U> P) {
    return a * P.x + b * P.y + c;
  }

  template <typename U>
  T eval(U x, U y) {
    return a * x + b * y + c;
  }

  // 同じ直線が同じ a,b,c で表現されるようにする
  void normalize() {
    static_assert(is_same_v<T, int> || is_same_v<T, long long>);
    T g = gcd(gcd(abs(a), abs(b)), abs(c));
    a /= g, b /= g, c /= g;
    if (b < 0) { a = -a, b = -b, c = -c; }
    if (b == 0 && a < 0) { a = -a, b = -b, c = -c; }
  }

  bool is_parallel(Line other) { return a * other.b - b * other.a == 0; }
  bool is_orthogonal(Line other) { return a * other.a + b * other.b == 0; }
};

template <typename T>
struct Segment {
  Point<T> A, B;

  Segment(Point<T> A, Point<T> B) : A(A), B(B) {}
  Segment(T x1, T y1, T x2, T y2) : Segment(Point<T>(x1, y1), Point<T>(x2, y2)) {}

  bool contain(Point<T> C) {
    T det = (C - A).det(B - A);
    if (det != 0) return 0;
    return (C - A).dot(B - A) >= 0 && (C - B).dot(A - B) >= 0;
  }

  Line<T> to_Line() { return Line(A, B); }
};

template <typename REAL>
struct Circle {
  Point<REAL> O;
  REAL r;
  Circle(Point<REAL> O, REAL r) : O(O), r(r) {}
  Circle(REAL x, REAL y, REAL r) : O(x, y), r(r) {}
  template <typename T>
  bool contain(Point<T> p) {
    REAL dx = p.x - O.x, dy = p.y - O.y;
    return dx * dx + dy * dy <= r * r;
  }
};
#line 4 "library/geo/convex_hull.hpp"

// allow_180=true で同一座標点があるとこわれる
// full なら I[0] が sorted で min になる
template <typename T, bool allow_180 = false>
vector<int> ConvexHull(vector<Point<T>>& XY, string mode = "full", bool sorted = false) {
  assert(mode == "full" || mode == "lower" || mode == "upper");
  ll N = XY.size();
  if (N == 1) return {0};
  if (N == 2) {
    if (XY[0] < XY[1]) return {0, 1};
    if (XY[1] < XY[0]) return {1, 0};
    return {0};
  }
  vc<int> I(N);
  if (sorted) {
    FOR(i, N) I[i] = i;
  } else {
    I = argsort(XY);
  }
  if constexpr (allow_180) { FOR(i, N - 1) assert(XY[i] != XY[i + 1]); }

  auto check = [&](ll i, ll j, ll k) -> bool {
    T det = (XY[j] - XY[i]).det(XY[k] - XY[i]);
    if constexpr (allow_180) return det >= 0;
    return det > T(0);
  };

  auto calc = [&]() {
    vector<int> P;
    for (auto&& k: I) {
      while (P.size() > 1) {
        auto i = P[P.size() - 2];
        auto j = P[P.size() - 1];
        if (check(i, j, k)) break;
        P.pop_back();
      }
      P.eb(k);
    }
    return P;
  };

  vc<int> P;
  if (mode == "full" || mode == "lower") {
    vc<int> Q = calc();
    P.insert(P.end(), all(Q));
  }
  if (mode == "full" || mode == "upper") {
    if (!P.empty()) P.pop_back();
    reverse(all(I));
    vc<int> Q = calc();
    P.insert(P.end(), all(Q));
  }
  if (mode == "upper") reverse(all(P));
  while (len(P) >= 2 && XY[P[0]] == XY[P.back()]) P.pop_back();
  return P;
}
#line 2 "library/convex/line_min_function.hpp"

// 1 次関数の max を [L,R,a,b] の列として出力
// https://qoj.ac/contest/1576/problem/8505
template <typename Re, typename T>
vc<tuple<Re, Re, Re, Re>> line_min_function_real(vc<pair<T, T>> LINE) {
  assert(!LINE.empty());
  using P = Point<T>;
  vc<P> point;
  for (auto& [x, y]: LINE) point.eb(P(x, y));
  auto I = ConvexHull(point, "lower");
  point = rearrange(point, I);
  int N = len(point);
  if (N >= 2 && point[N - 1].x == point[N - 2].x) { POP(point), --N; }
  reverse(all(point)); // 傾きは大きい方から
  Re l = -infty<Re>;
  vc<tuple<Re, Re, Re, Re>> ANS;
  FOR(i, N) {
    Re r = infty<Re>;
    auto [a, b] = point[i];
    if (i + 1 < N) {
      auto [c, d] = point[i + 1];
      if (a == c) continue;
      assert(a > c);
      r = Re(d - b) / (a - c);
      chmax(r, l), chmin(r, infty<Re>);
    }
    if (l < r) ANS.eb(l, r, a, b), l = r;
  }
  return ANS;
}

// 1 次関数の max を [L,R,a,b] の列として出力
template <typename Re, typename T>
vc<tuple<Re, Re, Re, Re>> line_max_function_real(vc<pair<T, T>> LINE) {
  assert(!LINE.empty());
  for (auto& [a, b]: LINE) a = -a, b = -b;
  auto ANS = line_min_function_real<Re, T>(LINE);
  for (auto& [l, r, a, b]: ANS) a = -a, b = -b;
  return ANS;
}

// LINE(a,b,c): y=(ax+b)/c, 評価点は整数
// 1 次関数の min を [L,R,a,b,c] の列として出力
// c>0, (ax+b)c がオーバーフローしない,
template <typename T>
vc<tuple<T, T, T, T, T>> line_min_function_rational(vc<tuple<T, T, T>> LINE, T L, T R) {
  // 傾き降順
  sort(all(LINE), [&](auto& L, auto& R) -> bool {
    auto& [a1, b1, c1] = L;
    auto& [a2, b2, c2] = R;
    return a1 * c2 > a2 * c1;
  });
  vc<tuple<T, T, T, T, T>> ANS;
  for (auto& [a2, b2, c2]: LINE) {
    while (1) {
      if (ANS.empty()) {
        ANS.eb(L, R, a2, b2, c2);
        break;
      }
      auto& [L1, R1, a1, b1, c1] = ANS.back();
      if ((a1 * L1 + b1) * c2 > (a2 * L1 + b2) * c1) {
        ANS.pop_back();
        if (len(ANS)) get<1>(ANS.back()) = R;
        continue;
      }
      T s = c2 * a1 - a2 * c1;
      if (s == 0) break;
      assert(s > 0);
      T t = b2 * c1 - b1 * c2;
      T x = t / s;
      assert(L1 <= x);
      if (x >= R1 - 1) break;
      R1 = x + 1;
      ANS.eb(x + 1, R, a2, b2, c2);
    }
  }
  return ANS;
}

// LINE(a,b,c): y=(ax+b)/c, 評価点は整数
// 1 次関数の min を [L,R,a,b,c] の列として出力
// c>0, (ax+b)c がオーバーフローしない,
template <typename T>
vc<tuple<T, T, T, T, T>> line_max_function_rational(vc<tuple<T, T, T>> LINE, T L, T R) {
  for (auto& [a, b, c]: LINE) a = -a, b = -b;
  auto ANS = line_min_function_rational<T>(LINE, L, R);
  for (auto& [L, R, a, b, c]: ANS) a = -a, b = -b;
  return ANS;
}

// LINE(a,b): y=ax+b, 評価点は整数
// 1 次関数の min を [L,R,a,b] の列として出力
// ax+b がオーバーフローしない,
template <typename T>
vc<tuple<T, T, T, T>> line_min_function_integer(vc<pair<T, T>> LINE, T L, T R) {
  // 傾き降順
  sort(all(LINE), [&](auto& L, auto& R) -> bool {
    auto& [a1, b1] = L;
    auto& [a2, b2] = R;
    return a1 > a2;
  });
  vc<tuple<T, T, T, T>> ANS;
  for (auto& [a2, b2]: LINE) {
    while (1) {
      if (ANS.empty()) {
        ANS.eb(L, R, a2, b2);
        break;
      }
      auto& [L1, R1, a1, b1] = ANS.back();
      if ((a1 * L1 + b1) > (a2 * L1 + b2)) {
        ANS.pop_back();
        if (len(ANS)) get<1>(ANS.back()) = R;
        continue;
      }
      T s = a1 - a2;
      if (s == 0) break;
      assert(s > 0);
      T t = b2 - b1;
      T x = t / s;
      assert(L1 <= x);
      if (x >= R1 - 1) break;
      R1 = x + 1;
      ANS.eb(x + 1, R, a2, b2);
    }
  }
  return ANS;
}

// LINE(a,b,c): y=(ax+b)/c, 評価点は整数
// 1 次関数の min を [L,R,a,b,c] の列として出力
// c>0, (ax+b)c がオーバーフローしない,
template <typename T>
vc<tuple<T, T, T, T>> line_max_function_integer(vc<pair<T, T>> LINE, T L, T R) {
  for (auto& [a, b]: LINE) a = -a, b = -b;
  auto ANS = line_min_function_integer<T>(LINE, L, R);
  for (auto& [L, R, a, b]: ANS) a = -a, b = -b;
  return ANS;
}
#line 1 "library/mod/floor_sum_of_linear_polynomial.hpp"

#line 2 "library/alg/monoid_pow.hpp"

// chat gpt
template <typename U, typename Arg1, typename Arg2>
struct has_power_method {
private:
  // ヘルパー関数の実装
  template <typename V, typename A1, typename A2>
  static auto check(int)
      -> decltype(std::declval<V>().power(std::declval<A1>(),
                                          std::declval<A2>()),
                  std::true_type{});
  template <typename, typename, typename>
  static auto check(...) -> std::false_type;

public:
  // メソッドの有無を表す型
  static constexpr bool value = decltype(check<U, Arg1, Arg2>(0))::value;
};

template <typename Monoid>
typename Monoid::X monoid_pow(typename Monoid::X x, ll exp) {
  using X = typename Monoid::X;
  if constexpr (has_power_method<Monoid, X, ll>::value) {
    return Monoid::power(x, exp);
  } else {
    assert(exp >= 0);
    X res = Monoid::unit();
    while (exp) {
      if (exp & 1) res = Monoid::op(res, x);
      x = Monoid::op(x, x);
      exp >>= 1;
    }
    return res;
  }
}
#line 2 "library/mod/floor_monoid_product.hpp"

// https://yukicoder.me/submissions/883884
// https://qoj.ac/contest/1411/problem/7620
// U は範囲内で ax+b がオーバーフローしない程度
// yyy x yyyy x ... yyy x yyy (x を N 個)
// k 個目の x までに floor(ak+b,m) 個の y がある
// my<=ax+b における lattice path における辺の列と見なせる
template <typename Monoid, typename X, typename U>
X floor_monoid_product(X x, X y, U N, U a, U b, U m) {
  U c = (a * N + b) / m;
  X pre = Monoid::unit(), suf = Monoid::unit();
  while (1) {
    const U p = a / m, q = b / m;
    a %= m, b %= m;
    x = Monoid::op(x, monoid_pow<Monoid>(y, p));
    pre = Monoid::op(pre, monoid_pow<Monoid>(y, q));
    c -= (p * N + q);
    if (c == 0) break;
    const U d = (m * c - b - 1) / a + 1;
    suf = Monoid::op(y, Monoid::op(monoid_pow<Monoid>(x, N - d), suf));
    b = m - b - 1 + a, N = c - 1, c = d;
    swap(m, a), swap(x, y);
  }
  x = monoid_pow<Monoid>(x, N);
  return Monoid::op(Monoid::op(pre, x), suf);
}
#line 1 "library/alg/monoid/monoid_for_floor_sum.hpp"
// sum i^k1floor^k2: floor path で (x,y) から x 方向に進むときに x^k1y^k2 を足す
template <typename T, int K1, int K2>
struct Monoid_for_floor_sum {
  using ARR = array<array<T, K2 + 1>, K1 + 1>;
  struct Data {
    ARR dp;
    T dx, dy;
  };

  using value_type = Data;
  using X = value_type;
  static X op(X a, X b) {
    static constexpr int n = max(K1, K2);
    static T comb[n + 1][n + 1];
    if (comb[0][0] != T(1)) {
      comb[0][0] = T(1);
      FOR(i, n) FOR(j, i + 1) { comb[i + 1][j] += comb[i][j], comb[i + 1][j + 1] += comb[i][j]; }
    }

    array<T, K1 + 1> pow_x;
    array<T, K2 + 1> pow_y;
    pow_x[0] = 1, pow_y[0] = 1;
    FOR(i, K1) pow_x[i + 1] = pow_x[i] * a.dx;
    FOR(i, K2) pow_y[i + 1] = pow_y[i] * a.dy;

    // +dy
    FOR(i, K1 + 1) {
      FOR_R(j, K2 + 1) {
        T x = b.dp[i][j];
        FOR(k, j + 1, K2 + 1) b.dp[i][k] += comb[k][j] * pow_y[k - j] * x;
      }
    }
    // +dx
    FOR(j, K2 + 1) {
      FOR_R(i, K1 + 1) { FOR(k, i, K1 + 1) a.dp[k][j] += comb[k][i] * pow_x[k - i] * b.dp[i][j]; }
    }

    a.dx += b.dx, a.dy += b.dy;
    return a;
  }

  static X to_x() {
    X x = unit();
    x.dp[0][0] = 1, x.dx = 1;
    return x;
  }
  static X to_y() {
    X x = unit();
    x.dy = 1;
    return x;
  }
  static constexpr X unit() { return {ARR{}, T(0), T(0)}; }
  static constexpr bool commute = 0;
};
#line 4 "library/mod/floor_sum_of_linear_polynomial.hpp"

// 全部非負, T は答, U は ax+b がオーバーフローしない
template <typename T, int K1, int K2, typename U>
array<array<T, K2 + 1>, K1 + 1> floor_sum_of_linear_polynomial_nonnegative(U N, U a, U b, U mod) {
  static_assert(is_same_v<U, u64> || is_same_v<U, u128>);
  assert(a == 0 || N < (U(-1) - b) / a);
  using Mono = Monoid_for_floor_sum<T, K1, K2>;
  auto x = floor_monoid_product<Mono>(Mono::to_x(), Mono::to_y(), N, a, b, mod);
  return x.dp;
};

// sum_{L<=x<R} x^i floor(ax+b,mod)^j
// a+bx が I, U でオーバーフローしない
template <typename T, int K1, int K2, typename I>
array<array<T, K2 + 1>, K1 + 1> floor_sum_of_linear_polynomial(I L, I R, I a, I b, I mod) {
  static_assert(is_same_v<I, ll> || is_same_v<I, i128>);
  assert(L <= R && mod > 0);
  if (a < 0) {
    auto ANS = floor_sum_of_linear_polynomial<T, K1, K2, I>(-R + 1, -L + 1, -a, b, mod);
    FOR(i, K1 + 1) {
      if (i % 2 == 1) { FOR(j, K2 + 1) ANS[i][j] = -ANS[i][j]; }
    }
    return ANS;
  }
  assert(a >= 0);
  I ADD_X = L;
  I N = R - L;
  b += a * L;
  I ADD_Y = floor<I>(b, mod);
  b -= ADD_Y * mod;
  assert(a >= 0 && b >= 0);

  using Mono = Monoid_for_floor_sum<T, K1, K2>;
  using Data = typename Mono::Data;
  using U = std::conditional_t<is_same_v<I, ll>, i128, u128>;
  Data A = floor_monoid_product<Mono, Data, U>(Mono::to_x(), Mono::to_y(), N, a, b, mod);
  Data offset = Mono::unit();
  offset.dx = T(ADD_X), offset.dy = T(ADD_Y);
  A = Mono::op(offset, A);
  return A.dp;
};
#line 7 "main.cpp"

using mint = modint107;

ll f(ll n) {
  string S = to_string(n);
  ll ANS = n;
  FOR(k, len(S) + 1) {
    ll a = (k == 0 ? 0 : stoi(S.substr(0, k)));
    ll b = (k == len(S) ? 0 : stoi(S.substr(k)));
    chmin(ANS, abs(a - b));
  }
  return ANS;
}

ll ten[20];

// 右側の桁数 r
// L, 10^rM, R
// concat(L,M)>R
// L<=concat(M,R)

mint F2(ll r, ll M, ll L1, ll L2, ll R1, ll R2) {
  SHOW(r, M, L1, L2, R1, R2);
  using T6 = tuple<ll, ll, ll, ll, ll, ll>;
  static map<T6, mint> MP;
  T6 key = {r, M, L1, L2, R1, R2};
  if (MP.count(key)) return MP[key];
  assert(L1 <= L2 && R1 <= R2);
  if (L1 == L2 || R1 == R2) return 0;
  if (L1 >= M * ten[r] + R2) return 0;

  mint ANS = 0;

  // FOR(L, L1, L2) {
  //   FOR(R, R1, R2) {
  //     if (10 * L + M > R && L <= ten[r] * M + R) {
  //       ll a = 10 * L + M - R;
  //       ll b = ten[r] * M + R - L;
  //       ANS += min(a, b);
  //     }
  //   }
  // }
  // return ANS;

  using T3 = tuple<i128, i128, i128>;

  auto sub = [&](vc<T3> lower, vc<T3> upper, mint A, mint B, mint C) -> void {
    vc<tuple<i128, i128, i128, i128, i128>> LO = line_max_function_rational<i128>(lower, L1, L2);
    vc<tuple<i128, i128, i128, i128, i128>> HI = line_min_function_rational<i128>(upper, L1, L2);
    reverse(all(LO));
    reverse(all(HI));
    B *= inv<mint>(2);
    auto calc = [&](ll L, ll R, ll a, ll b, ll c) -> mint {
      mint ans = 0;
      if (R == L + 1) {
        ll x = L;
        ll y = floor<ll>(a * x + b, c);
        ans += A * x * (y + 1);
        ans += B * y * (y + 1);
        ans += C * (y + 1);
        return ans;
      }
      // FOR(x, L, R) {
      //   ll y = floor<ll>(a * x + b, c);
      //   ans += A * x * (y + 1);
      //   ans += B * inv<mint>(2) * y * (y + 1);
      //   ans += C * (y + 1);
      // }
      auto S = floor_sum_of_linear_polynomial<mint, 1, 2, i128>(L, R, a, b, c);
      ans += A * (S[1][0] + S[1][1]);
      ans += B * (S[0][1] + S[0][2]);
      ans += C * (S[0][0] + S[0][1]);
      return ans;
    };
    auto f = [&](ll L, ll R, ll a1, ll b1, ll c1, ll a2, ll b2, ll c2) -> void {
      if (L == R) return;
      ANS += calc(L, R, a2, b2 - 1, c2) - calc(L, R, a1, b1 - 1, c1);
      // FOR(x, L, R) {
      //   ll s = floor<ll>(a1 * x + b1 - 1, c1);
      //   ll t = floor<ll>(a2 * x + b2 - 1, c2);
      //   FOR(y, s + 1, t + 1) { ANS += A * x + B * y + C; }
      // }
    };
    auto g = [&](ll L, ll R, ll a1, ll b1, ll c1, ll a2, ll b2, ll c2) -> void {
      ll d = (a1 * c2 - a2 * c1);
      if (d == 0) {
        f(L, R, a1, b1, c1, a2, b2, c2);
      } else {
        ll x = floor<ll>(b2 * c1 - b1 * c2, a1 * c2 - a2 * c1);
        if (d > 0) {
          if (x < L) { return; }
          chmin(x, R - 1);
          f(L, x + 1, a1, b1, c1, a2, b2, c2);
        } else {
          if (R <= x) { return; }
          chmax(x, L - 1);
          f(x + 1, R, a1, b1, c1, a2, b2, c2);
        }
      }
    };
    while (len(LO) && len(HI)) {
      auto& [L1, R1, a1, b1, c1] = LO.back();
      auto& [L2, R2, a2, b2, c2] = HI.back();
      assert(L1 == L2);
      ll R = min(R1, R2);
      g(L1, R, a1, b1, c1, a2, b2, c2);
      L1 = R, L2 = R;
      if (L1 == R1) POP(LO);
      if (L2 == R2) POP(HI);
    }
  };

  {
    vc<T3> lower, upper;
    lower.eb(0, R1, 1);
    upper.eb(0, R2, 1);
    lower.eb(1, -ten[r] * M, 1);
    upper.eb(10, M, 1);
    // 10x+M-y<=ten[r]M+y-x
    lower.eb(11, M - ten[r] * M, 2);
    sub(lower, upper, 10, -1, M);
  }
  {
    vc<T3> lower, upper;
    lower.eb(0, R1, 1);
    upper.eb(0, R2, 1);
    lower.eb(1, -ten[r] * M, 1);
    upper.eb(10, M, 1);
    // 10x+M-y>ten[r]M+y-x
    upper.eb(11, M - ten[r] * M, 2);
    sub(lower, upper, -1, 1, ten[r] * M);
  }
  return MP[key] = ANS;
}

mint slowF(ll N) {
  mint ANS = 0;
  FOR(r, 19) {
    FOR(M, 10) {
      if (r == 18 && M >= 2) continue;
      if (r == 18 && M == 0) continue;
      ll ub = N - ten[r] * M;
      if (ub <= 0) continue;
      auto [s, t] = divmod<ll>(ub, ten[r + 1]);
      /*
      [10^{r+1}s,10^{r+1}s+t)
      [0,10^{r+1}s)
      */
      ANS += F2(r, M, s, s + 1, 0, min<ll>(t, ten[r]));
      ANS += F2(r, M, 0, s, 0, ten[r]);
    }
  }
  return ANS;
}

mint TEN_F[19];

mint F(ll N) {
  mint ANS = 0;
  while (N > ten[18]) {
    ANS += f(N - 1);
    --N;
  }
  ll n = len(to_string(N));
  ANS += TEN_F[n - 1];
  if (N == ten[n - 1]) TEN_F[n - 1];
  // [ten[n-1],N) の計算をする

  FOR(r, n) {
    FOR(M, 10) {
      if (r == 18 && M >= 2) continue;
      if (r == n - 1 && M == 0) continue;
      ll ub = N - ten[r] * M;
      if (ub <= 0) continue;
      auto [s, t] = divmod<ll>(ub, ten[r + 1]);
      /*
      [10^{r+1}s,10^{r+1}s+t)
      [0,10^{r+1}s)
      */
      // さらに最高位が 1 以上という条件をつける
      ll a = s, b = s + 1;
      if (r < n - 1) chmax(a, ten[n - 2 - r]);
      if (a < b) ANS += F2(r, M, a, b, 0, min<ll>(t, ten[r]));
      a = 0, b = s;
      if (r < n - 1) chmax(a, ten[n - 2 - r]);
      if (a < b) ANS += F2(r, M, a, b, 0, ten[r]);
    }
  }
  return ANS;
}

void solve() {
  LL(L, R);
  mint ANS = F(R + 1) - F(L);
  print(ANS);
}

void test() {
  mint god = 0;
  FOR(N, 1, 1000000) {
    mint ans = F(N);
    SHOW(N, god, ans);
    assert(ans == god);
    god += f(N);
  }
}

signed main() {
  ten[0] = 1;
  FOR(i, 19) ten[i + 1] = ten[i] * 10;
  FOR(K, 19) { TEN_F[K] = slowF(ten[K]); }
  // test();
  // return 0;
  INT(T);
  FOR(T) solve();
}

这程序好像有点Bug,我给组数据试试?

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 11ms
memory: 4260kb

input:

2
108 112
114514 1919810

output:

31
86328270

result:

ok 2 lines

Test #2:

score: 0
Accepted
time: 453ms
memory: 19440kb

input:

1000
108 112
114514 1919810
1000000000000000000 1000000000000000000
10 1000000000000000000
100000000000000000 1000000000000000000
404718167579889375 404718167579889376
421944017227403970 421944017227403971
189682000860657168 189682000860657168
216210251475406689 216210251475406690
688200258410653365...

output:

31
86328270
1
452700982
455999919
350342417
389080093
670975168
518392877
555093785
413297421
235070083
138094687
605211889
318867094
71967670
277827524
698329989
308576750
857743987
133005695
138983066
102622955
299442575
85677303
140571610
102310491
589625139
652245813
131923105
229861338
83602964...

result:

ok 1000 lines

Test #3:

score: 0
Accepted
time: 455ms
memory: 19248kb

input:

1000
108 112
114514 1919810
1000000000000000000 1000000000000000000
10 1000000000000000000
100000000000000000 1000000000000000000
234530223589181386 234530223589181386
408551941144630716 408551941144630717
158047031427710586 158047031427710586
489780405752551905 489780405752551905
740503344316362098...

output:

31
86328270
1
452700982
455999919
354651163
527842449
269663555
262771500
848282491
242561074
704232081
312867565
122009887
860436261
349789684
224845008
625633663
232585111
280840549
194288301
489686304
68118617
241766024
108426771
893336538
86863459
891261681
845080039
20869324
227720620
111588919...

result:

ok 1000 lines

Test #4:

score: 0
Accepted
time: 51ms
memory: 5764kb

input:

100
265714758284843092 265714758284843093
918065131742690352 918065131742690353
10974116958420843 10974116958420844
400062241898390772 400062241898390773
953883181221418384 953883181221418385
717995546146120948 717995546146120949
822140371684157809 822140371684157809
70453204366469836 70453204366469...

output:

38256669
350749557
102640651
996657063
464929586
143749188
137982562
592033265
616778974
312738452
262527485
162305811
481926909
18789782
482531634
674023418
267293175
47539540
201887243
286594273
454003836
348034968
848568687
385866275
637829215
477702784
177756297
636074139
142434433
101319133
129...

result:

ok 100 lines

Test #5:

score: 0
Accepted
time: 51ms
memory: 5348kb

input:

100
266540997167959220 266540997167959224
881371880336470942 881371880336470942
596383801642802764 596383801642802773
64197408773386902 64197408773386903
418807658396628736 418807658396628737
127608880971207922 127608880971207932
363522998002087569 363522998002087569
52330388046761516 52330388046761...

output:

492908875
248333754
464189675
137174362
44357843
279589454
361435429
38982083
189242392
227795545
753619475
435729649
553495445
382101043
203511016
560656795
359293254
201283527
312112023
427713500
966684108
572909965
777786843
388192689
373080269
471468826
71392278
820936005
369968463
442142900
903...

result:

ok 100 lines

Test #6:

score: 0
Accepted
time: 48ms
memory: 5756kb

input:

100
267367244641009940 267367244641010032
621306592075475643 621306592075475702
405165527476927880 405165527476927910
951704612503158912 951704612503158933
791504024322595587 791504024322595654
324995645468352 324995645468424
3487150939887651 3487150939887746
25506937973764579 25506937973764646
6648...

output:

748774768
749854946
224633394
868005106
885771221
973275841
481554192
328724038
449921321
298758451
929139202
369892070
57450776
659609011
370437937
899756126
156499129
295187384
315182333
70381598
962516228
145843164
335134710
302968586
821989155
688239354
373907729
332948458
709177969
48081665
492...

result:

ok 100 lines

Test #7:

score: 0
Accepted
time: 46ms
memory: 5528kb

input:

100
268193483524126068 268193483524126706
584613336374288936 584613336374289560
990575220751244394 990575220751244660
839211816232930932 839211816232931461
164200394543529742 164200394543530260
873041110319728774 873041110319729095
643451299582720427 643451299582721397
998683496490702225 99868349649...

output:

541124515
452554083
901294590
328726088
872064661
840792649
969205371
150814671
918317978
456593874
574849872
971431007
797833757
899353964
93205153
738388149
938236044
778837819
811645247
155264626
196389571
127343374
811561515
622064959
299017966
830067350
7605147
427644584
676349531
326944959
771...

result:

ok 100 lines

Test #8:

score: 0
Accepted
time: 51ms
memory: 5468kb

input:

100
269019726702209492 269019726702210679
547920080673102230 547920080673110573
575984909730593620 575984909730599719
503346978812959766 503346978812964013
536896760469496592 536896760469496932
745757220699021908 745757220699029249
283415456815487804 283415456815497293
748488013857896695 74848801385...

output:

630143488
554659288
131732449
244134847
983399164
103709492
411572482
50687205
875000248
663701774
692364937
153176156
160965841
745894305
777957749
621234039
499394977
792134600
459831956
772850159
1922144
665492783
684136128
307621919
549188007
550263368
837032989
847040150
374811754
30559164
6252...

result:

ok 100 lines

Test #9:

score: 0
Accepted
time: 51ms
memory: 5464kb

input:

100
269845965585325620 269845965585398094
287854792412106931 287854792412107682
384766635564718736 384766635564748682
390854186837699081 390854186837705800
909593130690430739 909593130690441881
618473335373282339 618473335373380371
923379609753287877 923379609753345817
721664568079867054 72166456807...

output:

14112631
437890253
473927355
820249226
64428166
3557116
606424071
732259247
100860470
374031275
310745027
889012707
891178522
679910539
322174605
438425709
785596604
816821860
469800459
404629041
731679173
58284425
461454737
207298177
491319844
844428058
894669664
183876436
296582846
291041012
93416...

result:

ok 100 lines

Test #10:

score: 0
Accepted
time: 51ms
memory: 5508kb

input:

100
359280689112103486 359280689112186393
176110798769117224 176110798769169811
635753196789286559 635753196789368788
901357146438813768 901357146438868034
227473967007487837 227473967007579558
803441576195331266 803441576195368323
670735071175295768 670735071175317705
961323991610147027 96132399161...

output:

530576123
404434764
429196429
368891722
361257868
665081089
706726185
79237992
29920318
525953761
708574458
231676278
843447593
15785648
685747511
58099602
711218496
744994770
360679445
895697462
1427024
691104492
402709773
999695550
904710365
466845262
657499956
65672541
555077622
657928223
6035297...

result:

ok 100 lines

Test #11:

score: 0
Accepted
time: 50ms
memory: 5756kb

input:

100
270672213058376340 270672213059007687
251161541005887520 251161541006681946
970176324544067953 970176324544299146
54989353712695211 54989353713418261
282289500911364894 282289500911830872
714561486902318658 714561486902628096
786715795250896551 786715795251353285
471469089742028820 4714690897430...

output:

274057095
746587264
972818351
383082731
488949249
267232120
97494234
198830243
119563401
959341276
386415319
161420006
850411589
999908702
611616994
636934330
234691490
491280604
319991400
578152113
465742161
271626206
725842128
806485910
45270073
706815140
366292342
282173164
170266305
614246368
56...

result:

ok 100 lines

Test #12:

score: 0
Accepted
time: 51ms
memory: 5760kb

input:

100
367392890842765685 367392890843416607
193086988313596028 193086988314577917
706498708545222755 706498708545997685
742584464306229097 742584464306325903
543459535787052367 543459535787950089
129009492275582495 129009492275780146
829033685340117897 829033685341074230
832533203363888214 83253320336...

output:

933722794
673949049
476021589
567968289
839231472
980043759
501049818
263513819
490291147
176528809
91205277
238306193
460554433
552061274
642241119
686497395
783942892
392408769
251433460
704081924
127341421
789127034
625359848
117481838
973866396
893053173
90575370
505102736
767173156
94918986
649...

result:

ok 100 lines

Test #13:

score: 0
Accepted
time: 51ms
memory: 5444kb

input:

100
271498451941492468 271498451941501050
991096248449924916 991096248459048412
778958050378193069 778958050386652186
942496553147499926 942496553157050223
654985866837331745 654985866842738051
587277601576579089 587277601584495725
426679948188696632 426679948192334274
444645639669031883 44464563967...

output:

595437314
895524963
307660359
552847643
870041807
668834065
116071711
909436399
376440866
471860351
953824854
439592854
440357954
577049511
479063759
192906449
419074123
141935881
548904120
316920565
709070938
406960198
517004652
167766002
257736425
664009759
126009479
342796888
889680716
4483712
95...

result:

ok 100 lines

Test #14:

score: 0
Accepted
time: 51ms
memory: 5460kb

input:

100
375505101163362477 375505101167848427
210063182153042128 210063182155822491
242044574620878655 242044574622581586
978225419003422132 978225419008913020
194630360825574585 194630360828089959
112507673099759950 112507673106111587
25126978475415749 25126978483626127
378397406768899039 3783974067700...

output:

533740006
74104872
662546292
680130200
873265432
271928992
108601773
474352073
985100322
323145691
384774730
129852585
659343541
636743068
683207714
866667327
872197361
33161934
265884728
505543048
753127768
225929039
524509414
446603107
623105737
498931617
177556703
196898065
365275363
677359980
27...

result:

ok 100 lines

Test #15:

score: 0
Accepted
time: 48ms
memory: 5528kb

input:

100
272324690824608596 272324690834840063
954402997043705505 954402997134155514
364367743652509591 364367743674453965
606631724317463352 606631724355752516
27682237058265900 27682237124555690
459993716250839520 459993716255273417
66644101126496713 66644101129223855
194450161331193649 194450161386135...

output:

534834674
601125917
505856035
376862455
760979514
641392989
283786554
630562757
820710017
8852493
791959762
170760250
378861434
495249796
691978152
588621557
725239134
547380557
772651037
991968579
384495860
492374420
375979785
533581288
199813841
810634122
522431715
516084918
251005920
976615925
86...

result:

ok 100 lines

Test #16:

score: 0
Accepted
time: 51ms
memory: 5416kb

input:

100
160245266039248788 160245266094071181
3667334842745043 3667334937620162
656876281964062643 656876282037272083
488016689359782662 488016689390920442
823387845957619817 823387846023626433
851990572454681907 851990572472489168
807046734461902933 807046734498848823
433789415110749667 433789415119730...

output:

139079928
149109722
360609190
337684003
711803729
163045529
754168681
955325585
268241301
722707794
545626091
782444128
230908898
692554518
200604399
894810233
328331680
965392244
878974694
993927188
31213214
118072440
885317891
675800024
459841672
789365173
566023398
959109988
32912416
617696117
56...

result:

ok 100 lines

Test #17:

score: 0
Accepted
time: 51ms
memory: 5588kb

input:

100
273150934002692020 273150934137711397
694337708782710206 694337709101867684
949777432631858809 949777433190473426
494138923752268075 494138924542786857
400378607279200047 400378607446598315
332709826630132654 332709827207801373
706608249769329490 706608250084711188
167626711258196712 16762671222...

output:

777193
758196118
674708812
476416687
430466802
863758330
807536548
53017126
765761768
628203367
720774132
679991797
569565139
287206776
384674489
589205041
130756500
336175976
217221115
399415283
280904370
224153410
887616871
198744326
814405515
534007992
291101481
856514361
105612774
516430672
4876...

result:

ok 100 lines

Test #18:

score: 0
Accepted
time: 54ms
memory: 5420kb

input:

100
168357472064878283 168357472377080692
20643520092256551 20643520964300165
71707989307246640 71707989395716723
360732804034043093 360732804852354174
463351994600452602 463351995478034699
825167122381684970 825167123114138317
907739281745150692 907739281877330895
734417525279147685 734417526247541...

output:

527777631
280754280
903203963
546663675
693394618
638699147
674155127
427449178
461547851
269708611
57872619
462764371
174437839
792844566
789652737
940883604
381100676
670068627
324440433
410926129
517314783
448965971
28444229
960075850
792736561
979641082
874025472
485285682
805664247
512283757
54...

result:

ok 100 lines

Test #19:

score: 0
Accepted
time: 55ms
memory: 5992kb

input:

100
996517375802030536 996517383244307242
624045669640274152 624045675151906681
778062383071550184 778062385105285599
661230177799844003 661230184066326057
891967553796619192 891967554883508711
780045434223219594 780045437574966221
732895008312183571 732895013649168772
494244581673542382 49424458805...

output:

603358902
946659907
69639350
412873138
43851274
347582604
430348910
724750977
577116598
191811936
384465451
69711558
647643793
158380358
488602266
495914119
730573381
435733172
893096771
35236726
62702945
448029104
550477697
417630378
95859117
448262354
577340835
818272654
107079158
8501638
3512862
...

result:

ok 100 lines

Test #20:

score: 0
Accepted
time: 55ms
memory: 5704kb

input:

100
665165169508614046 665165179308388125
450715146361595040 450715151403890645
852288517283002988 852288518381862337
913315629503532549 913315630749855704
532462495277029144 532462498071371915
282596655433296453 282596657415148520
683144464137990864 683144473924438526
349993667306263606 34999367663...

output:

676409079
248503071
835276063
68328528
772215741
161641342
649160033
145596932
464410493
652357520
889069440
195937859
44973934
612939926
22202365
143922420
82103816
639580941
324839593
523358361
244842526
110905708
83984952
541060506
789057544
529241261
253379953
739426786
952890997
470282487
10651...

result:

ok 100 lines

Test #21:

score: 0
Accepted
time: 63ms
memory: 5860kb

input:

100
997343614685146664 997343624619479843
363980381379278852 363980403321014434
363472072050899411 363472127950133638
548737381529616022 548737411001888848
264663915427618756 264663997375616523
652761544602512729 652761633020765557
372859165544950948 372859211463042316
467421135895512741 46742122450...

output:

737730842
860606001
314971159
733441968
622555356
750487156
627988141
828697987
24522167
719208260
924203589
596796697
57593544
237827530
106773768
122048012
456140029
884807190
686218499
24730499
210981284
886965046
555818823
208641222
708285726
420456922
132626512
370310176
938203036
303105975
997...

result:

ok 100 lines

Test #22:

score: 0
Accepted
time: 63ms
memory: 5864kb

input:

100
673277379829210837 673277471201818312
467691335906073843 467691369092707115
267120228921154281 267120256250709434
951749761490869436 951749787765452026
516040690038588870 516040696098399577
48815722312898739 48815732448107925
248654399360662910 248654406658876245
446844358605735311 4468443938209...

output:

488865006
408681654
344430281
503237027
318894325
707123583
654184523
826904401
888285158
20756334
570715099
886727446
636858208
36539606
831227472
953988820
112285385
802225729
512210639
778069236
854518210
310348760
216242344
779648034
635076750
675089725
953443924
837595540
520890688
425809692
13...

result:

ok 100 lines

Test #23:

score: 0
Accepted
time: 60ms
memory: 6344kb

input:

100
998169857863230088 998169927750612370
327287125678092146 327287953703977574
658646845480129774 658647393882529027
626578941132541610 626579226776457106
234880613967299154 234881273237546773
354775524341034009 354775842818772160
994712817104945897 994713470364435846
381664360721557275 38166521531...

output:

180508078
274676000
612715865
558006497
983675161
457678211
919784922
225973187
389000316
170014928
75685750
86773616
697877926
71337359
335452027
103298007
446940346
716630540
139606015
800558380
291961836
415681597
18228683
974653552
6964515
104347755
638992085
8342963
533270545
397389138
76578005...

result:

ok 100 lines

Test #24:

score: 0
Accepted
time: 68ms
memory: 6100kb

input:

100
681389581559873037 681389861976699736
261295488595776758 261296088713576982
681951931969370973 681952425249720148
990183902068140914 990184538747270993
499618889095115892 499618948113253152
591662752337725127 591662816717045765
37536371438110845 37537289233777495
767067082465015609 7670675235573...

output:

935191040
358397958
25088967
117884558
164475618
943770200
791122172
796618665
197212957
232776356
548320812
545374899
525654254
97079823
784536601
230576785
653186120
134731219
869351900
624520884
937690867
492303145
64190685
121556519
485761889
62916199
748164522
754911203
248853725
500564851
9143...

result:

ok 100 lines

Test #25:

score: 0
Accepted
time: 71ms
memory: 6184kb

input:

100
998996101041313512 999003126509290541
67221837417096847 67230834622417619
757663491159341040 757664493624095790
100379747839416876 100380396314838305
10056655869487058 10061406118763027
398193778246000886 398197493052993426
652787467125583805 652797314255202325
190402207484677570 190408540282965...

output:

858795874
966091130
354884231
164971052
673861945
475577043
923552252
843889144
494037011
423920510
568192200
557379822
910495603
743661245
507852096
579114833
827307348
78282082
186785349
866182553
787214464
913468828
358027475
473242293
309775493
743923646
631729634
74846801
117687625
470120018
43...

result:

ok 100 lines

Test #26:

score: 0
Accepted
time: 72ms
memory: 6224kb

input:

100
689501787585502532 689508793838945822
278271682435222858 278277481987720231
96783643607522266 96789507110723739
28618038350445105 28624789705346502
706569120711451506 706572365227103645
357881819217327413 357882400970554875
826418339220591475 826424800005903943
50409551261519791 5041833564648875...

output:

358063798
364122089
617127127
367230188
199916060
890315172
946304374
104091643
125442711
785322144
923105759
867147922
145889920
341367972
289403691
382376096
607665269
166405756
904261191
292518377
550243555
990801031
65377720
32378902
628932430
831392035
450616331
354350400
962006536
834017730
58...

result:

ok 100 lines

Test #27:

score: 0
Accepted
time: 71ms
memory: 6504kb

input:

100
999822344219396936 999908320966519365
30528581715910140 30579780652009654
343073180138690266 343100367852967030
764514919009380293 764557270533287993
382753021795453908 382801912622295569
270909888625294021 270941802489404217
292751620063383887 292830534072695367
940206724851872031 9402350340232...

output:

194350135
912687999
578762656
683411075
638912841
429713933
47867629
951252614
11589548
241668617
260620254
902112125
244059006
651723175
315373649
25558771
178554193
258148983
327929366
828823805
646160839
811637875
229429770
688659128
276921447
863040195
796725847
307123468
660264649
593074631
736...

result:

ok 100 lines

Test #28:

score: 0
Accepted
time: 71ms
memory: 6368kb

input:

100
474241952461388843 474318647695045563
295247871979701662 295320879557277436
511615346655738958 511677576085042647
67052170337781991 67057073221677034
690147319767978528 690214717222221319
900728853537121098 900775989512425363
615300311298039411 615347278217454332
184140501918734918 1841781590536...

output:

946776015
229226210
964543991
559696286
549711544
361806773
339126418
262968467
586375443
830332209
856880057
632962144
901788811
125207847
893241758
363738633
180322265
346517941
608141331
147457016
375269176
158300339
672117834
302836332
609194949
936305881
710840763
13197593
959639881
774255047
9...

result:

ok 100 lines

Test #29:

score: 0
Accepted
time: 79ms
memory: 6764kb

input:

100
648583102513073 1363519718193953
770463293454914832 770926698416673552
151854905972815382 152058283231599129
652022118444185017 652096181606274692
755449392016388055 755632414830596369
143626003299554451 144136111925265304
932715773001183959 933341717035383063
913383279073842390 9143215234679333...

output:

626116125
467050156
203823674
835621424
52084980
162731840
263253845
563766357
375723289
575769711
223734677
738508393
506313064
671591605
564906905
334513920
459817861
727749242
841031393
95331639
603428091
394710796
549286160
210974305
947725128
391805006
739046426
264682679
537398393
779575248
93...

result:

ok 100 lines

Test #30:

score: 0
Accepted
time: 79ms
memory: 6556kb

input:

100
482354158487018339 482740546995047295
88852024669404577 89460194827087353
926447053998922946 927105653649168681
105486310915053470 105507324178319485
673725510234570958 674557064921647951
666947920416723384 667499573759277794
404182283375487346 404621797578154446
504363230072982512 5050289973763...

output:

843085673
161755551
791854365
311266943
785990066
132442159
273161411
878325075
356675178
149303366
630521062
292658763
978217039
771463765
881942758
812590380
413017597
29226781
700056176
924445495
931882979
790865108
112451646
954933889
773933298
748578980
369952585
334257542
132507589
901013703
6...

result:

ok 100 lines

Test #31:

score: 0
Accepted
time: 80ms
memory: 6728kb

input:

100
1474821985629201 11418714174861749
733770042048695422 736345648741121104
737264594952164599 747072129195625069
539529322173957036 545435088384266846
128145762237322210 136762921333837718
16342113678847586 25430421361087756
796051958498792633 798896973707562459
663187800736004156 6670080129125769...

output:

965150032
10801000
411009212
395746072
940155158
64926069
992480233
980554742
280573806
76315333
899313123
350761616
331246182
137298080
970661766
227393062
467364681
284496280
827603025
116780591
187019966
70962724
498305995
742169561
306886420
807164116
658822635
508570884
892441674
835716043
1614...

result:

ok 100 lines

Test #32:

score: 0
Accepted
time: 80ms
memory: 6684kb

input:

100
490466364512647834 492634478854803424
105828218508850677 114943592396307525
341278765637074239 347005772363029239
143920447197357652 151657575134890875
657303709291097979 660099412621013224
209794954736517077 210523162301041725
601213917077486921 603507790254265960
50166125263458626 554299480009...

output:

554550782
373444241
808027806
430440268
848933772
381832763
142418000
573285232
450988584
825655885
601641972
4592758
420040661
313135452
443958374
74200437
729862416
665304023
279369500
362498772
213999059
655399445
140256012
497359198
818938780
587397325
28363953
47632494
869739232
384478464
64715...

result:

ok 100 lines

Test #33:

score: 0
Accepted
time: 80ms
memory: 6528kb

input:

100
2301069458679921 61845958371204467
697076786347508715 724392562210788818
322674288226481122 419458012014420364
203664489048953166 204401962602447345
500842132458256357 527893432132043648
889058228353108008 985096767651683684
436016111436592714 491708156670189613
636364354957974515 63906653921199...

output:

539004414
972599289
749575759
470410724
675137818
579004645
418987985
16067847
708073673
890828587
870896379
804449107
683788101
972227074
589696500
59051087
683273787
674470749
848929532
574202337
311240946
123181116
538822764
457728547
763845755
959095105
281259904
108489984
306694725
605011831
65...

result:

ok 100 lines

Test #34:

score: 0
Accepted
time: 80ms
memory: 6656kb

input:

100
498578566243310034 586156369564815651
122804408053329480 126054948815783153
756110468685290931 804533841337213587
182354579184694538 222807821796488776
864253940907433594 957013797175149353
976014021616119354 994756240963791542
758574190675607318 788026762589999066
921436645231734516 97458469506...

output:

852777391
125672248
42649028
335538547
376702921
285474541
643378664
769702819
814895384
92545198
614565449
379650809
566291473
330883660
872375161
832073601
592029944
698336489
663136352
234082221
803693584
651657365
108837194
203418125
348945778
670470842
375434708
110589229
763866485
989784406
86...

result:

ok 100 lines

Test #35:

score: 0
Accepted
time: 73ms
memory: 6460kb

input:

100
3127308341796049 520792311220441865
437011498086513416 520485468026509363
131456014060606238 365408030112235244
91171692778725185 662599337569029319
873538498384223207 924563386419373980
985146379882144327 998630910571391788
75980264374392796 529753231403308819
609540909179944874 863320521570476...

output:

990630623
500644914
983434047
120394410
470793992
995872006
215375742
877344555
134273222
227733931
285737821
483480065
270937132
571219423
760792791
926086392
17863445
424259489
776035266
867017265
368328475
575727868
579916504
987057865
231001717
532366553
896002379
490284880
797478074
893871471
7...

result:

ok 100 lines

Test #36:

score: 0
Accepted
time: 81ms
memory: 6680kb

input:

100
506690772268939530 893059809107673505
916408560743032386 924497071303265925
521119742872856965 953105887068425271
13169357286054774 940017640966343964
832724009205515899 842445203224167389
43709279153689955 722293279367815033
130145114902672296 538867791846928078
553550089218608003 5598900167214...

output:

983597906
83175303
361594391
914308517
118765028
997693869
496599433
3440079
47890119
240163565
856976357
825212152
491058033
315042953
109212050
585397031
364799642
746250177
101037860
362630278
816588885
875280303
283246582
714229016
856296624
478982144
775778644
903827819
392590566
198609138
7333...

result:

ok 100 lines

Test #37:

score: 0
Accepted
time: 11ms
memory: 4220kb

input:

3
1000000000000000000 1000000000000000000
10 1000000000000000000
100000000000000000 1000000000000000000

output:

1
452700982
455999919

result:

ok 3 lines

Extra Test:

score: 0
Extra Test Passed