QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#678288 | #9530. A Game On Tree | ucup-team987# | AC ✓ | 361ms | 38648kb | C++23 | 20.9kb | 2024-10-26 14:34:08 | 2024-10-26 14:34:09 |
Judging History
answer
/**
* date : 2024-10-26 15:33:58
* author : Nyaan
*/
#define NDEBUG
using namespace std;
// intrinstic
#include <immintrin.h>
#include <algorithm>
#include <array>
#include <bitset>
#include <cassert>
#include <cctype>
#include <cfenv>
#include <cfloat>
#include <chrono>
#include <cinttypes>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdarg>
#include <cstddef>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <fstream>
#include <functional>
#include <initializer_list>
#include <iomanip>
#include <ios>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <stack>
#include <streambuf>
#include <string>
#include <tr2/dynamic_bitset>
#include <tuple>
#include <type_traits>
#include <typeinfo>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
// utility
namespace Nyaan {
using ll = long long;
using i64 = long long;
using u64 = unsigned long long;
using i128 = __int128_t;
using u128 = __uint128_t;
template <typename T>
using V = vector<T>;
template <typename T>
using VV = vector<vector<T>>;
using vi = vector<int>;
using vl = vector<long long>;
using vd = V<double>;
using vs = V<string>;
using vvi = vector<vector<int>>;
using vvl = vector<vector<long long>>;
template <typename T>
using minpq = priority_queue<T, vector<T>, greater<T>>;
template <typename T, typename U>
struct P : pair<T, U> {
template <typename... Args>
constexpr P(Args... args) : pair<T, U>(args...) {}
using pair<T, U>::first;
using pair<T, U>::second;
P &operator+=(const P &r) {
first += r.first;
second += r.second;
return *this;
}
P &operator-=(const P &r) {
first -= r.first;
second -= r.second;
return *this;
}
P &operator*=(const P &r) {
first *= r.first;
second *= r.second;
return *this;
}
template <typename S>
P &operator*=(const S &r) {
first *= r, second *= r;
return *this;
}
P operator+(const P &r) const { return P(*this) += r; }
P operator-(const P &r) const { return P(*this) -= r; }
P operator*(const P &r) const { return P(*this) *= r; }
template <typename S>
P operator*(const S &r) const {
return P(*this) *= r;
}
P operator-() const { return P{-first, -second}; }
};
using pl = P<ll, ll>;
using pi = P<int, int>;
using vp = V<pl>;
constexpr int inf = 1001001001;
constexpr long long infLL = 4004004004004004004LL;
template <typename T>
int sz(const T &t) {
return t.size();
}
template <typename T, typename U>
inline bool amin(T &x, U y) {
return (y < x) ? (x = y, true) : false;
}
template <typename T, typename U>
inline bool amax(T &x, U y) {
return (x < y) ? (x = y, true) : false;
}
template <typename T>
inline T Max(const vector<T> &v) {
return *max_element(begin(v), end(v));
}
template <typename T>
inline T Min(const vector<T> &v) {
return *min_element(begin(v), end(v));
}
template <typename T>
inline long long Sum(const vector<T> &v) {
return accumulate(begin(v), end(v), 0LL);
}
template <typename T>
int lb(const vector<T> &v, const T &a) {
return lower_bound(begin(v), end(v), a) - begin(v);
}
template <typename T>
int ub(const vector<T> &v, const T &a) {
return upper_bound(begin(v), end(v), a) - begin(v);
}
constexpr long long TEN(int n) {
long long ret = 1, x = 10;
for (; n; x *= x, n >>= 1) ret *= (n & 1 ? x : 1);
return ret;
}
template <typename T, typename U>
pair<T, U> mkp(const T &t, const U &u) {
return make_pair(t, u);
}
template <typename T>
vector<T> mkrui(const vector<T> &v, bool rev = false) {
vector<T> ret(v.size() + 1);
if (rev) {
for (int i = int(v.size()) - 1; i >= 0; i--) ret[i] = v[i] + ret[i + 1];
} else {
for (int i = 0; i < int(v.size()); i++) ret[i + 1] = ret[i] + v[i];
}
return ret;
};
template <typename T>
vector<T> mkuni(const vector<T> &v) {
vector<T> ret(v);
sort(ret.begin(), ret.end());
ret.erase(unique(ret.begin(), ret.end()), ret.end());
return ret;
}
template <typename F>
vector<int> mkord(int N, F f) {
vector<int> ord(N);
iota(begin(ord), end(ord), 0);
sort(begin(ord), end(ord), f);
return ord;
}
template <typename T>
vector<int> mkinv(vector<T> &v) {
int max_val = *max_element(begin(v), end(v));
vector<int> inv(max_val + 1, -1);
for (int i = 0; i < (int)v.size(); i++) inv[v[i]] = i;
return inv;
}
vector<int> mkiota(int n) {
vector<int> ret(n);
iota(begin(ret), end(ret), 0);
return ret;
}
template <typename T>
T mkrev(const T &v) {
T w{v};
reverse(begin(w), end(w));
return w;
}
template <typename T>
bool nxp(T &v) {
return next_permutation(begin(v), end(v));
}
// 返り値の型は入力の T に依存
// i 要素目 : [0, a[i])
template <typename T>
vector<vector<T>> product(const vector<T> &a) {
vector<vector<T>> ret;
vector<T> v;
auto dfs = [&](auto rc, int i) -> void {
if (i == (int)a.size()) {
ret.push_back(v);
return;
}
for (int j = 0; j < a[i]; j++) v.push_back(j), rc(rc, i + 1), v.pop_back();
};
dfs(dfs, 0);
return ret;
}
// F : function(void(T&)), mod を取る操作
// T : 整数型のときはオーバーフローに注意する
template <typename T>
T Power(T a, long long n, const T &I, const function<void(T &)> &f) {
T res = I;
for (; n; f(a = a * a), n >>= 1) {
if (n & 1) f(res = res * a);
}
return res;
}
// T : 整数型のときはオーバーフローに注意する
template <typename T>
T Power(T a, long long n, const T &I = T{1}) {
return Power(a, n, I, function<void(T &)>{[](T &) -> void {}});
}
template <typename T>
T Rev(const T &v) {
T res = v;
reverse(begin(res), end(res));
return res;
}
template <typename T>
vector<T> Transpose(const vector<T> &v) {
using U = typename T::value_type;
if(v.empty()) return {};
int H = v.size(), W = v[0].size();
vector res(W, T(H, U{}));
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
res[j][i] = v[i][j];
}
}
return res;
}
template <typename T>
vector<T> Rotate(const vector<T> &v, int clockwise = true) {
using U = typename T::value_type;
int H = v.size(), W = v[0].size();
vector res(W, T(H, U{}));
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
if (clockwise) {
res[W - 1 - j][i] = v[i][j];
} else {
res[j][H - 1 - i] = v[i][j];
}
}
}
return res;
}
} // namespace Nyaan
// bit operation
namespace Nyaan {
__attribute__((target("popcnt"))) inline int popcnt(const u64 &a) {
return __builtin_popcountll(a);
}
inline int lsb(const u64 &a) { return a ? __builtin_ctzll(a) : 64; }
inline int ctz(const u64 &a) { return a ? __builtin_ctzll(a) : 64; }
inline int msb(const u64 &a) { return a ? 63 - __builtin_clzll(a) : -1; }
template <typename T>
inline int gbit(const T &a, int i) {
return (a >> i) & 1;
}
template <typename T>
inline void sbit(T &a, int i, bool b) {
if (gbit(a, i) != b) a ^= T(1) << i;
}
constexpr long long PW(int n) { return 1LL << n; }
constexpr long long MSK(int n) { return (1LL << n) - 1; }
} // namespace Nyaan
// inout
namespace Nyaan {
template <typename T, typename U>
ostream &operator<<(ostream &os, const pair<T, U> &p) {
os << p.first << " " << p.second;
return os;
}
template <typename T, typename U>
istream &operator>>(istream &is, pair<T, U> &p) {
is >> p.first >> p.second;
return is;
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
int s = (int)v.size();
for (int i = 0; i < s; i++) os << (i ? " " : "") << v[i];
return os;
}
template <typename T>
istream &operator>>(istream &is, vector<T> &v) {
for (auto &x : v) is >> x;
return is;
}
istream &operator>>(istream &is, __int128_t &x) {
string S;
is >> S;
x = 0;
int flag = 0;
for (auto &c : S) {
if (c == '-') {
flag = true;
continue;
}
x *= 10;
x += c - '0';
}
if (flag) x = -x;
return is;
}
istream &operator>>(istream &is, __uint128_t &x) {
string S;
is >> S;
x = 0;
for (auto &c : S) {
x *= 10;
x += c - '0';
}
return is;
}
ostream &operator<<(ostream &os, __int128_t x) {
if (x == 0) return os << 0;
if (x < 0) os << '-', x = -x;
string S;
while (x) S.push_back('0' + x % 10), x /= 10;
reverse(begin(S), end(S));
return os << S;
}
ostream &operator<<(ostream &os, __uint128_t x) {
if (x == 0) return os << 0;
string S;
while (x) S.push_back('0' + x % 10), x /= 10;
reverse(begin(S), end(S));
return os << S;
}
void in() {}
template <typename T, class... U>
void in(T &t, U &...u) {
cin >> t;
in(u...);
}
void out() { cout << "\n"; }
template <typename T, class... U, char sep = ' '>
void out(const T &t, const U &...u) {
cout << t;
if (sizeof...(u)) cout << sep;
out(u...);
}
struct IoSetupNya {
IoSetupNya() {
cin.tie(nullptr);
ios::sync_with_stdio(false);
cout << fixed << setprecision(15);
cerr << fixed << setprecision(7);
}
} iosetupnya;
} // namespace Nyaan
// debug
#ifdef NyaanDebug
#define trc(...) (void(0))
#else
#define trc(...) (void(0))
#endif
#ifdef NyaanLocal
#define trc2(...) (void(0))
#else
#define trc2(...) (void(0))
#endif
// macro
#define each(x, v) for (auto&& x : v)
#define each2(x, y, v) for (auto&& [x, y] : v)
#define all(v) (v).begin(), (v).end()
#define rep(i, N) for (long long i = 0; i < (long long)(N); i++)
#define repr(i, N) for (long long i = (long long)(N)-1; i >= 0; i--)
#define rep1(i, N) for (long long i = 1; i <= (long long)(N); i++)
#define repr1(i, N) for (long long i = (N); (long long)(i) > 0; i--)
#define reg(i, a, b) for (long long i = (a); i < (b); i++)
#define regr(i, a, b) for (long long i = (b)-1; i >= (a); i--)
#define fi first
#define se second
#define ini(...) \
int __VA_ARGS__; \
in(__VA_ARGS__)
#define inl(...) \
long long __VA_ARGS__; \
in(__VA_ARGS__)
#define ins(...) \
string __VA_ARGS__; \
in(__VA_ARGS__)
#define in2(s, t) \
for (int i = 0; i < (int)s.size(); i++) { \
in(s[i], t[i]); \
}
#define in3(s, t, u) \
for (int i = 0; i < (int)s.size(); i++) { \
in(s[i], t[i], u[i]); \
}
#define in4(s, t, u, v) \
for (int i = 0; i < (int)s.size(); i++) { \
in(s[i], t[i], u[i], v[i]); \
}
#define die(...) \
do { \
Nyaan::out(__VA_ARGS__); \
return; \
} while (0)
namespace Nyaan {
void solve();
}
int main() { Nyaan::solve(); }
//
template <typename T>
struct edge {
int src, to;
T cost;
edge(int _to, T _cost) : src(-1), to(_to), cost(_cost) {}
edge(int _src, int _to, T _cost) : src(_src), to(_to), cost(_cost) {}
edge &operator=(const int &x) {
to = x;
return *this;
}
operator int() const { return to; }
};
template <typename T>
using Edges = vector<edge<T>>;
template <typename T>
using WeightedGraph = vector<Edges<T>>;
using UnweightedGraph = vector<vector<int>>;
// Input of (Unweighted) Graph
UnweightedGraph graph(int N, int M = -1, bool is_directed = false,
bool is_1origin = true) {
UnweightedGraph g(N);
if (M == -1) M = N - 1;
for (int _ = 0; _ < M; _++) {
int x, y;
cin >> x >> y;
if (is_1origin) x--, y--;
g[x].push_back(y);
if (!is_directed) g[y].push_back(x);
}
return g;
}
// Input of Weighted Graph
template <typename T>
WeightedGraph<T> wgraph(int N, int M = -1, bool is_directed = false,
bool is_1origin = true) {
WeightedGraph<T> g(N);
if (M == -1) M = N - 1;
for (int _ = 0; _ < M; _++) {
int x, y;
cin >> x >> y;
T c;
cin >> c;
if (is_1origin) x--, y--;
g[x].emplace_back(x, y, c);
if (!is_directed) g[y].emplace_back(y, x, c);
}
return g;
}
// Input of Edges
template <typename T>
Edges<T> esgraph([[maybe_unused]] int N, int M, int is_weighted = true,
bool is_1origin = true) {
Edges<T> es;
for (int _ = 0; _ < M; _++) {
int x, y;
cin >> x >> y;
T c;
if (is_weighted)
cin >> c;
else
c = 1;
if (is_1origin) x--, y--;
es.emplace_back(x, y, c);
}
return es;
}
// Input of Adjacency Matrix
template <typename T>
vector<vector<T>> adjgraph(int N, int M, T INF, int is_weighted = true,
bool is_directed = false, bool is_1origin = true) {
vector<vector<T>> d(N, vector<T>(N, INF));
for (int _ = 0; _ < M; _++) {
int x, y;
cin >> x >> y;
T c;
if (is_weighted)
cin >> c;
else
c = 1;
if (is_1origin) x--, y--;
d[x][y] = c;
if (!is_directed) d[y][x] = c;
}
return d;
}
/**
* @brief グラフテンプレート
* @docs docs/graph/graph-template.md
*/
// Rerooting
// f1(c1, c2) ... merge value of child node
// f2(memo[i], chd, par) ... return value from child node to parent node
// memo[i] ... result of subtree rooted i
// dp[i] ... result of tree rooted i
template <typename T, typename G, typename F1, typename F2>
struct Rerooting {
const G &g;
const F1 f1;
const F2 f2;
vector<T> memo, dp;
T leaf;
Rerooting(const G &_g, const F1 _f1, const F2 _f2, const T &_leaf)
: g(_g), f1(_f1), f2(_f2), memo(g.size()), dp(g.size()), leaf(_leaf) {
dfs(0, -1);
dfs2(0, -1, T{});
}
const T &operator[](int i) const { return dp[i]; }
void dfs(int cur, int par) {
vector<T> chds;
for (auto &dst : g[cur]) {
if (dst == par) continue;
dfs(dst, cur);
chds.push_back(f2(memo[dst], dst, cur));
}
if (chds.empty()) {
memo[cur] = leaf;
} else {
memo[cur] = chds[0];
for (int i = 1; i < (int)chds.size(); i++) {
memo[cur] = f1(memo[cur], chds[i]);
}
}
}
void dfs2(int cur, int par, const T &pval) {
// get cumulative sum
vector<T> buf;
if (cur != 0) buf.push_back(pval);
for (auto dst : g[cur]) {
if (dst == par) continue;
buf.push_back(f2(memo[dst], dst, cur));
}
vector<T> head(buf.size()), tail(buf.size());
if (!buf.empty()) {
head[0] = buf[0];
for (int i = 1; i < (int)buf.size(); i++) {
head[i] = f1(head[i - 1], buf[i]);
}
tail.back() = buf.back();
for (int i = (int)buf.size() - 2; i >= 0; i--) {
tail[i] = f1(tail[i + 1], buf[i]);
}
}
dp[cur] = head.empty() ? leaf : head.back();
int idx = cur == 0 ? 0 : 1;
for (auto &dst : g[cur]) {
if (dst == par) continue;
T val;
bool first = idx == 0;
bool last = idx + 1 == (int)head.size();
if (first and last) {
val = leaf;
} else if (first) {
val = tail[idx + 1];
} else if (last) {
val = head[idx - 1];
} else {
val = f1(head[idx - 1], tail[idx + 1]);
}
dfs2(dst, cur, f2(val, cur, dst));
idx++;
}
}
};
/**
* @brief Rerooting(全方位木DP)
* @docs docs/tree/rerooting.md
*/
//
template <uint32_t mod>
struct LazyMontgomeryModInt {
using mint = LazyMontgomeryModInt;
using i32 = int32_t;
using u32 = uint32_t;
using u64 = uint64_t;
static constexpr u32 get_r() {
u32 ret = mod;
for (i32 i = 0; i < 4; ++i) ret *= 2 - mod * ret;
return ret;
}
static constexpr u32 r = get_r();
static constexpr u32 n2 = -u64(mod) % mod;
static_assert(mod < (1 << 30), "invalid, mod >= 2 ^ 30");
static_assert((mod & 1) == 1, "invalid, mod % 2 == 0");
static_assert(r * mod == 1, "this code has bugs.");
u32 a;
constexpr LazyMontgomeryModInt() : a(0) {}
constexpr LazyMontgomeryModInt(const int64_t &b)
: a(reduce(u64(b % mod + mod) * n2)){};
static constexpr u32 reduce(const u64 &b) {
return (b + u64(u32(b) * u32(-r)) * mod) >> 32;
}
constexpr mint &operator+=(const mint &b) {
if (i32(a += b.a - 2 * mod) < 0) a += 2 * mod;
return *this;
}
constexpr mint &operator-=(const mint &b) {
if (i32(a -= b.a) < 0) a += 2 * mod;
return *this;
}
constexpr mint &operator*=(const mint &b) {
a = reduce(u64(a) * b.a);
return *this;
}
constexpr mint &operator/=(const mint &b) {
*this *= b.inverse();
return *this;
}
constexpr mint operator+(const mint &b) const { return mint(*this) += b; }
constexpr mint operator-(const mint &b) const { return mint(*this) -= b; }
constexpr mint operator*(const mint &b) const { return mint(*this) *= b; }
constexpr mint operator/(const mint &b) const { return mint(*this) /= b; }
constexpr bool operator==(const mint &b) const {
return (a >= mod ? a - mod : a) == (b.a >= mod ? b.a - mod : b.a);
}
constexpr bool operator!=(const mint &b) const {
return (a >= mod ? a - mod : a) != (b.a >= mod ? b.a - mod : b.a);
}
constexpr mint operator-() const { return mint() - mint(*this); }
constexpr mint operator+() const { return mint(*this); }
constexpr mint pow(u64 n) const {
mint ret(1), mul(*this);
while (n > 0) {
if (n & 1) ret *= mul;
mul *= mul;
n >>= 1;
}
return ret;
}
constexpr mint inverse() const {
int x = get(), y = mod, u = 1, v = 0, t = 0, tmp = 0;
while (y > 0) {
t = x / y;
x -= t * y, u -= t * v;
tmp = x, x = y, y = tmp;
tmp = u, u = v, v = tmp;
}
return mint{u};
}
friend ostream &operator<<(ostream &os, const mint &b) {
return os << b.get();
}
friend istream &operator>>(istream &is, mint &b) {
int64_t t;
is >> t;
b = LazyMontgomeryModInt<mod>(t);
return (is);
}
constexpr u32 get() const {
u32 ret = reduce(a);
return ret >= mod ? ret - mod : ret;
}
static constexpr u32 get_mod() { return mod; }
};
using namespace std;
// コンストラクタの MAX に 「C(n, r) や fac(n) でクエリを投げる最大の n 」
// を入れると倍速くらいになる
// mod を超えて前計算して 0 割りを踏むバグは対策済み
template <typename T>
struct Binomial {
vector<T> f, g, h;
Binomial(int MAX = 0) {
assert(T::get_mod() != 0 && "Binomial<mint>()");
f.resize(1, T{1});
g.resize(1, T{1});
h.resize(1, T{1});
if (MAX > 0) extend(MAX + 1);
}
void extend(int m = -1) {
int n = f.size();
if (m == -1) m = n * 2;
m = min<int>(m, T::get_mod());
if (n >= m) return;
f.resize(m);
g.resize(m);
h.resize(m);
for (int i = n; i < m; i++) f[i] = f[i - 1] * T(i);
g[m - 1] = f[m - 1].inverse();
h[m - 1] = g[m - 1] * f[m - 2];
for (int i = m - 2; i >= n; i--) {
g[i] = g[i + 1] * T(i + 1);
h[i] = g[i] * f[i - 1];
}
}
T fac(int i) {
if (i < 0) return T(0);
while (i >= (int)f.size()) extend();
return f[i];
}
T finv(int i) {
if (i < 0) return T(0);
while (i >= (int)g.size()) extend();
return g[i];
}
T inv(int i) {
if (i < 0) return -inv(-i);
while (i >= (int)h.size()) extend();
return h[i];
}
T C(int n, int r) {
if (n < 0 || n < r || r < 0) return T(0);
return fac(n) * finv(n - r) * finv(r);
}
inline T operator()(int n, int r) { return C(n, r); }
template <typename I>
T multinomial(const vector<I>& r) {
static_assert(is_integral<I>::value == true);
int n = 0;
for (auto& x : r) {
if (x < 0) return T(0);
n += x;
}
T res = fac(n);
for (auto& x : r) res *= finv(x);
return res;
}
template <typename I>
T operator()(const vector<I>& r) {
return multinomial(r);
}
T C_naive(int n, int r) {
if (n < 0 || n < r || r < 0) return T(0);
T ret = T(1);
r = min(r, n - r);
for (int i = 1; i <= r; ++i) ret *= inv(i) * (n--);
return ret;
}
T P(int n, int r) {
if (n < 0 || n < r || r < 0) return T(0);
return fac(n) * finv(n - r);
}
// [x^r] 1 / (1-x)^n
T H(int n, int r) {
if (n < 0 || r < 0) return T(0);
return r == 0 ? 1 : C(n + r - 1, r);
}
};
//
using namespace Nyaan;
using mint = LazyMontgomeryModInt<998244353>;
// using mint = LazyMontgomeryModInt<1000000007>;
using vm = vector<mint>;
using vvm = vector<vm>;
Binomial<mint> C;
using namespace Nyaan;
void q() {
ini(N);
auto g = graph(N);
// 「T : 根が virtual である根付き木」に対応する情報を管理する
using T = array<mint, 3>;
// 空の状態に対応する情報
T leaf{{0, 0, 0}};
// T 同士をマージ
auto f1 = [&](T x, T y) -> T {
return T{{x[0] + y[0], x[1] + y[1], x[2] + y[2]}};
};
// T の根に頂点 c および辺 c-p を追加する (p は virtual)
auto f2 = [&](T x, int, int) -> T {
T res;
res[0] = x[0] + 1;
res[1] = x[1] + res[0] * res[0];
res[2] = (-res[0] + N) * (-res[0] + N) * res[1];
return res;
};
Rerooting<T, decltype(g), decltype(f1), decltype(f2)> dp(g, f1, f2, leaf);
trc(dp.memo);
trc(dp.dp);
mint ans = 0;
rep(i, N) ans += dp.dp[i][2];
rep1(i, N - 1) {
mint x = dp.memo[i][0] + 1;
ans -= x * x * (-x + N) * (-x + N);
}
trc(ans);
mint n2 = mint{N} * (N - 1) / 2;
out(ans / n2 / n2);
}
void Nyaan::solve() {
int t = 1;
in(t);
while (t--) q();
}
这程序好像有点Bug,我给组数据试试?
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3600kb
input:
2 3 1 2 2 3 5 1 2 1 5 3 2 4 2
output:
443664158 918384806
result:
ok 2 lines
Test #2:
score: 0
Accepted
time: 0ms
memory: 3524kb
input:
1000 7 3 6 4 3 5 3 2 6 1 4 7 1 12 5 7 10 7 2 10 11 2 1 7 8 1 4 2 9 11 6 9 12 11 3 5 6 2 5 1 2 4 5 6 4 3 6 5 2 5 1 5 4 5 3 2 8 1 8 2 8 4 2 6 1 5 6 7 6 3 8 8 3 8 7 3 4 8 6 4 2 7 5 2 1 4 4 3 1 4 3 2 1 6 5 1 6 1 2 5 3 5 4 2 12 8 11 5 11 12 8 3 12 6 12 2 3 4 6 10 11 1 5 9 5 7 5 9 6 1 7 6 4 7 8 7 5 4 9 6 ...
output:
948445317 468414020 550143557 918384806 711758412 487662742 776412276 869581749 240852807 765628773 211048577 887328316 890334966 940494682 760637552 908032643 592850815 584006902 908525604 221832080 433351719 56023919 867301808 183319566 698771049 366957926 449579681 599710576 310564911 286902823 3...
result:
ok 1000 lines
Test #3:
score: 0
Accepted
time: 27ms
memory: 3512kb
input:
1000 94 59 1 33 59 73 1 6 33 83 59 4 59 20 59 61 6 39 1 76 73 71 6 44 39 9 71 24 4 87 9 57 83 2 9 81 71 82 20 90 2 85 39 12 9 30 83 66 30 53 9 47 9 36 44 43 53 29 12 31 53 64 81 38 31 84 82 77 38 23 71 93 84 78 83 58 31 68 90 42 1 55 64 13 78 70 78 62 24 19 55 92 87 14 57 10 84 65 81 63 6 75 36 91 1...
output:
508107725 996793960 201633249 335988372 842755864 460619380 342223697 207523414 429241811 391691799 542977964 786416604 454278948 685531402 25914978 440729774 228518323 679471537 82764520 554190841 432505337 143444089 189106586 337234245 61954935 905141094 532919674 703954588 185671863 942858630 692...
result:
ok 1000 lines
Test #4:
score: 0
Accepted
time: 351ms
memory: 36940kb
input:
10000 8 1 4 3 1 5 1 7 3 8 4 6 8 2 7 8 2 6 4 6 5 6 8 5 7 6 3 5 1 7 8 8 5 6 5 2 5 7 2 1 6 3 1 4 8 9 8 6 9 8 3 6 1 8 5 9 2 8 4 3 7 9 8 8 6 3 6 5 8 1 6 4 3 7 6 2 6 9 9 5 7 5 2 7 8 7 4 9 3 7 6 3 1 4 8 1 4 5 1 6 5 3 4 8 4 7 8 2 5 9 1 8 6 1 2 1 3 8 5 3 9 8 7 8 4 8 9 4 9 2 9 1 2 3 4 5 2 6 9 8 3 7 2 8 1 2 8 ...
output:
49657566 56023919 387074343 97051536 701572244 211048577 711758412 308100110 761007271 711758412 178698065 285212675 80216065 43380497 267677376 818005792 53239701 765628773 970145625 387074343 436731906 422725927 479157293 977872021 436731906 925779210 487662742 705549251 267677376 711758412 526851...
result:
ok 10000 lines
Test #5:
score: 0
Accepted
time: 356ms
memory: 36040kb
input:
10000 8 7 6 8 6 5 7 4 6 1 4 2 5 3 5 10 10 7 8 7 9 8 2 8 6 7 1 7 5 9 4 1 3 6 10 2 6 3 6 5 6 7 2 1 3 4 5 8 5 9 5 10 4 10 6 5 2 5 4 6 8 5 10 5 9 5 1 8 3 6 7 1 8 5 2 3 5 6 5 1 2 8 2 4 1 7 5 9 5 1 3 1 7 5 9 7 6 3 8 6 2 1 4 9 9 9 8 4 8 3 8 6 9 2 8 7 6 1 2 5 6 9 2 5 8 5 7 8 9 7 1 8 4 8 6 9 3 1 8 6 7 8 6 2 ...
output:
711758412 286902823 691130166 841483019 650641410 887328317 331207619 733278261 56023919 977872021 414394648 183319566 239374924 696059768 855285904 761007271 711758412 86268032 599710576 728310932 178698065 178698065 422725927 219002589 178698065 202450068 599710576 56023919 449579681 760637552 925...
result:
ok 10000 lines
Test #6:
score: 0
Accepted
time: 354ms
memory: 37672kb
input:
10000 9 8 1 2 8 4 1 3 2 7 1 6 7 9 3 5 1 9 7 5 1 7 3 7 9 5 2 3 8 1 6 8 4 6 9 7 8 4 7 5 4 3 4 6 8 1 3 9 8 2 7 9 8 7 2 8 9 8 5 8 1 2 3 7 6 3 4 7 8 6 8 4 6 2 4 5 8 7 5 1 6 3 7 9 9 8 7 8 2 9 5 9 1 5 3 1 6 2 4 8 10 2 10 4 10 6 4 1 10 9 6 8 9 5 10 7 4 3 2 10 3 9 5 3 4 3 7 9 6 3 10 6 2 9 8 5 1 2 10 8 5 2 8 ...
output:
211048577 354315128 178698065 705549251 285212675 138645051 449579681 286902823 925779210 294297225 519087065 368179632 422725927 603876215 539175192 867301808 977540027 669439919 211048577 701572244 977872021 138645051 267677376 855285904 977872021 286902823 925286249 705549251 219002589 331207619 ...
result:
ok 10000 lines
Test #7:
score: 0
Accepted
time: 338ms
memory: 32152kb
input:
10000 8 4 2 6 2 1 6 5 1 3 1 7 5 8 5 8 4 3 8 4 6 8 2 3 5 8 1 4 7 5 9 6 1 8 6 7 8 5 6 4 1 9 6 3 1 2 5 8 3 2 5 2 7 2 8 2 1 7 4 3 6 8 10 10 2 7 10 3 7 8 7 5 10 1 5 4 3 6 4 9 7 8 5 4 8 4 2 5 7 4 6 8 1 7 3 1 9 3 1 8 1 5 1 6 5 2 6 9 5 7 5 4 2 10 1 3 6 1 2 3 7 3 8 7 9 1 10 7 5 7 4 10 10 3 2 10 3 5 10 9 3 1 ...
output:
422725927 977872021 867301808 407446676 466833287 387074343 97051536 292325385 301691628 765628773 285212675 711758412 650641410 178698065 543242114 286902823 473241769 109930120 841975980 836553418 422725927 286902823 414394648 739440264 436731906 56023919 436731906 530918109 603876215 977872021 40...
result:
ok 10000 lines
Test #8:
score: 0
Accepted
time: 347ms
memory: 38648kb
input:
10000 9 9 3 7 9 2 3 5 2 6 2 1 9 4 5 8 9 10 4 6 9 4 8 6 5 4 10 5 7 8 2 8 3 7 1 2 10 5 4 1 4 3 4 9 3 6 3 7 9 8 7 2 4 10 7 10 3 8 4 3 10 8 6 10 9 4 5 6 2 8 1 2 7 5 10 10 9 4 9 6 10 5 10 2 6 1 10 3 1 8 3 7 10 10 9 7 10 7 2 7 3 10 1 3 4 3 8 9 6 3 5 6 9 2 4 7 4 5 7 9 5 3 5 6 7 8 7 1 2 9 2 4 1 4 9 2 7 2 8 ...
output:
409773147 306621231 836553418 760637552 519087065 304649390 97051536 742521264 387074343 855285904 874737082 358875008 733278261 698524570 908525604 387074343 970145625 449579681 286902823 239374924 650641410 691130166 765628773 603876215 839572800 977872021 742521264 908032643 874737082 299719788 7...
result:
ok 10000 lines
Test #9:
score: 0
Accepted
time: 361ms
memory: 35832kb
input:
10000 9 8 4 5 4 6 4 3 5 7 4 9 6 1 9 2 9 10 3 9 10 3 2 10 6 2 1 6 8 2 4 1 5 3 7 9 9 9 3 7 9 4 3 5 3 2 3 6 5 1 6 8 9 8 6 1 8 1 5 6 7 6 4 8 3 6 2 7 8 2 3 7 2 8 2 6 8 5 2 1 3 4 2 10 2 7 8 7 9 2 5 8 10 8 3 7 1 7 4 8 6 7 9 3 8 4 3 5 3 2 8 9 2 1 5 6 8 7 4 9 5 1 6 5 4 6 9 6 3 4 2 9 8 1 7 4 8 2 4 8 4 3 2 5 3...
output:
331207619 28098733 97051536 599710576 701572244 277043619 368179632 138645051 711758412 626059423 86268032 414394648 368179632 993314752 321410036 530918109 711758412 712327454 603876215 49657566 705549251 765628773 56023919 299719788 887328316 839572800 650641410 211048577 286902823 908032643 28690...
result:
ok 10000 lines
Test #10:
score: 0
Accepted
time: 346ms
memory: 33036kb
input:
10000 10 4 9 7 4 2 4 5 4 6 7 10 2 3 9 8 10 1 8 8 2 4 3 2 5 2 6 4 1 4 8 3 7 1 8 8 7 6 7 4 8 5 4 1 6 2 5 3 4 8 7 2 3 2 5 3 1 5 8 1 4 7 6 2 9 5 9 6 9 4 6 7 9 8 4 3 6 1 6 2 5 10 7 1 4 7 2 7 5 2 8 5 3 2 6 7 10 4 9 2 8 6 2 3 6 7 2 8 3 5 6 4 5 1 2 10 2 8 5 8 10 8 4 10 7 8 3 2 1 10 6 4 9 10 10 3 5 6 5 10 5 ...
output:
440213438 977872021 285212675 285212675 705549251 267677376 436731906 267677376 440213438 712327454 711758412 191268549 321410036 436731906 839572800 49657566 519087065 178698065 977872021 285212675 574298605 368179632 466833287 696059768 86268033 308100110 487662742 887328317 977872021 701572244 99...
result:
ok 10000 lines
Test #11:
score: 0
Accepted
time: 344ms
memory: 31768kb
input:
10000 8 1 3 8 3 2 3 6 8 5 8 4 1 7 1 10 5 7 10 7 2 5 4 5 8 10 6 7 1 5 3 2 9 8 9 4 7 2 4 1 4 5 4 9 1 3 2 6 4 8 9 8 5 7 3 5 2 5 6 5 4 7 8 3 1 7 9 1 5 9 5 3 1 7 3 8 3 6 3 4 1 2 8 8 1 2 4 2 6 2 7 2 8 7 3 8 5 6 9 4 5 3 4 6 4 7 3 1 5 9 3 2 1 8 7 9 1 6 3 1 2 3 5 2 4 3 8 5 9 5 7 1 8 5 3 7 3 4 3 8 7 1 3 6 1 2...
output:
202450068 449579681 742521264 56023919 705549251 599710576 765628773 887328316 599710576 97051536 286902823 603876215 321410036 221832080 294297225 479157293 650641410 765628773 908525604 285212675 125704848 414394648 599254713 286902823 707938599 13864507 599710576 304649390 691130166 56023919 7656...
result:
ok 10000 lines
Test #12:
score: 0
Accepted
time: 0ms
memory: 3536kb
input:
1 2 1 2
output:
1
result:
ok single line: '1'
Extra Test:
score: 0
Extra Test Passed