QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#379609#8570. Idola-Treeucup-team180#AC ✓1763ms74292kbC++2331.4kb2024-04-06 17:58:062024-04-06 17:58:06

Judging History

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

  • [2024-04-06 17:58:06]
  • 评测
  • 测评结果:AC
  • 用时:1763ms
  • 内存:74292kb
  • [2024-04-06 17:58:06]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef __int128 lll;
using ull = unsigned long long;
typedef pair<ll,ll> pll;
typedef vector<ll> vll;
typedef vector<pll> vpll;
template<class T> using pqmin = priority_queue<T, vector<T>, greater<T>>;
template<class T> using pqmax = priority_queue<T>;
const ll inf=LLONG_MAX/3;
const ll dx[] = {0, 1, 0, -1, 1, -1, 1, -1};
const ll dy[] = {1, 0, -1, 0, 1, 1, -1, -1};
#define mp make_pair
#define pb push_back
#define eb emplace_back
#define fi first
#define se second
#define all(x) x.begin(),x.end()
#define si(x) ll(x.size())
#define rep(i,n) for(ll i=0;i<n;i++)
#define per(i,n) for(ll i=n-1;i>=0;i--)
#define rng(i,l,r) for(ll i=l;i<r;i++)
#define gnr(i,l,r) for(ll i=r-1;i>=l;i--)
#define fore(i, a) for(auto &&i : a)
#define fore2(a, b, v) for(auto &&[a, b] : v)
#define fore3(a, b, c, v) for(auto &&[a, b, c] : v)
template<class T> bool chmin(T& a, const T& b){ if(a <= b) return 0; a = b; return 1; }
template<class T> bool chmax(T& a, const T& b){ if(a >= b) return 0; a = b; return 1; }
template<class T, class U> bool chmin(T& a, const U& b){ return chmin(a, (T)b); }
template<class T, class U> bool chmax(T& a, const U& b){ return chmax(a, (T)b); }
#define LL(...) ll __VA_ARGS__;in(__VA_ARGS__)
#define STR(...) string __VA_ARGS__;in(__VA_ARGS__)
#define CHR(...) char __VA_ARGS__;in(__VA_ARGS__)
#define vec(type,name,...) vector<type>name(__VA_ARGS__)
#define VEC(type,name,size) vector<type>name(size);in(name)
#define VLL(name,size) vector<ll>name(size);in(name)
#define vv(type,name,h,...) vector<vector<type>> name(h,vector<type>(__VA_ARGS__))
#define VV(type,name,h,w) vector<vector<type>> name(h,vector<type>(w));in(name)
#define vvv(type,name,h,w,...) vector<vector<vector<type>>> name(h,vector<vector<type>>(w,vector<type>(__VA_ARGS__)))
#define SUM(...) accumulate(all(__VA_ARGS__),0LL)
template<class T> auto min(const T& a){ return *min_element(all(a)); }
template<class T> auto max(const T& a){ return *max_element(all(a)); }
template<class T, class F = less<>> void sor(T& a, F b = F{}){ sort(all(a), b); }
template<class T> void uniq(T& a){ sor(a); a.erase(unique(all(a)), end(a)); }
void outb(bool x){cout<<(x?"Yes":"No")<<"\n";}
ll max(int x, ll y) { return max((ll)x, y); }
ll max(ll x, int y) { return max(x, (ll)y); }
int min(int x, ll y) { return min((ll)x, y); }
int min(ll x, int y) { return min(x, (ll)y); }
#define lb(c, x) distance((c).begin(), lower_bound(all(c), (x)))
#define lbg(c, x) distance((c).begin(), lower_bound(all(c), (x), greater{}))
#define ub(c, x) distance((c).begin(), upper_bound(all(c), (x)))
#define ubg(c, x) distance((c).begin(), upper_bound(all(c), (x), greater{}))
ll gcd(ll a,ll b){return (b?gcd(b,a%b):a);}
vector<pll> factor(ull x){ vector<pll> ans; for(ull i = 2; i * i <= x; i++) if(x % i == 0){ ans.push_back({i, 1}); while((x /= i) % i == 0) ans.back().second++; } if(x != 1) ans.push_back({x, 1}); return ans; }
vector<ll> divisor(ull x){ vector<ll> ans; for(ull i = 1; i * i <= x; i++) if(x % i == 0) ans.push_back(i); per(i,ans.size() - (ans.back() * ans.back() == x)) ans.push_back(x / ans[i]); return ans; }
vll prime_table(ll n){vec(ll,isp,n+1,1);vll res;rng(i,2,n+1)if(isp[i]){res.pb(i);for(ll j=i*i;j<=n;j+=i)isp[j]=0;}return res;}
ll powmod(lll x,ll y,lll mod){lll res=1; while(y){ if(y&1)res=res*x%mod; x=x*x%mod; y>>=1;} return res; }
ll modinv(ll a,ll m){ll b=m,u=1,v=0;while(b){ll t=a/b;a-=t*b;swap(a,b);u-=t*v;swap(u,v);}u%=m;if(u<0)u+=m;return u;}

template <class T, class S> pair<T, S> operator-(const pair<T, S> &x) { return pair<T, S>(-x.first, -x.second); }
template <class T, class S> pair<T, S> operator-(const pair<T, S> &x, const pair<T, S> &y) { return pair<T, S>(x.fi - y.fi, x.se - y.se); }
template <class T, class S> pair<T, S> operator+(const pair<T, S> &x, const pair<T, S> &y) { return pair<T, S>(x.fi + y.fi, x.se + y.se); }
template <class T> pair<T, T> operator&(const pair<T, T> &l, const pair<T, T> &r) { return pair<T, T>(max(l.fi, r.fi), min(l.se, r.se)); }
template <class T, class S> pair<T, S> operator+=(pair<T, S> &l, const pair<T, S> &r) { return l = l + r; }
template <class T, class S> pair<T, S> operator-=(pair<T, S> &l, const pair<T, S> &r) { return l = l - r; }
template <class T> bool intersect(const pair<T, T> &l, const pair<T, T> &r) { return (l.se < r.se ? r.fi < l.se : l.fi < r.se); }

template <class T> vector<T> &operator++(vector<T> &v) {
		fore(e, v) e++;
		return v;
}
template <class T> vector<T> operator++(vector<T> &v, int) {
		auto res = v;
		fore(e, v) e++;
		return res;
}
template <class T> vector<T> &operator--(vector<T> &v) {
		fore(e, v) e--;
		return v;
}
template <class T> vector<T> operator--(vector<T> &v, int) {
		auto res = v;
		fore(e, v) e--;
		return res;
}
template <class T> vector<T> &operator+=(vector<T> &l, const vector<T> &r) {
		fore(e, r) l.eb(e);
		return l;
}

template<class... Ts> void in(Ts&... t);
[[maybe_unused]] void print(){}
template<class T, class... Ts> void print(const T& t, const Ts&... ts);
template<class... Ts> void out(const Ts&... ts){ print(ts...); cout << '\n'; }
namespace IO{
#define VOID(a) decltype(void(a))
struct S{ S(){ cin.tie(nullptr)->sync_with_stdio(0); fixed(cout).precision(12); } }S;
template<int I> struct P : P<I-1>{};
template<> struct P<0>{};
template<class T> void i(T& t){ i(t, P<3>{}); }
void i(vector<bool>::reference t, P<3>){ int a; i(a); t = a; }
template<class T> auto i(T& t, P<2>) -> VOID(cin >> t){ cin >> t; }
template<class T> auto i(T& t, P<1>) -> VOID(begin(t)){ for(auto&& x : t) i(x); }
template<class T, size_t... idx> void ituple(T& t, index_sequence<idx...>){ in(get<idx>(t)...); }
template<class T> auto i(T& t, P<0>) -> VOID(tuple_size<T>{}){ ituple(t, make_index_sequence<tuple_size<T>::value>{}); }
template<class T> void o(const T& t){ o(t, P<4>{}); }
template<size_t N> void o(const char (&t)[N], P<4>){ cout << t; }
template<class T, size_t N> void o(const T (&t)[N], P<3>){ o(t[0]); for(size_t i = 1; i < N; i++){ o(' '); o(t[i]); } }
template<class T> auto o(const T& t, P<2>) -> VOID(cout << t){ cout << t; }
template<class T> auto o(const T& t, P<1>) -> VOID(begin(t)){ bool first = 1; for(auto&& x : t) { if(first) first = 0; else o(' '); o(x); } }
template<class T, size_t... idx> void otuple(const T& t, index_sequence<idx...>){ print(get<idx>(t)...); }
template<class T> auto o(T& t, P<0>) -> VOID(tuple_size<T>{}){ otuple(t, make_index_sequence<tuple_size<T>::value>{}); }
#undef VOID
}
#define unpack(a) (void)initializer_list<int>{(a, 0)...}
template<class... Ts> void in(Ts&... t){ unpack(IO::i(t)); }
template<class T, class... Ts> void print(const T& t, const Ts&... ts){ IO::o(t); unpack(IO::o((cout << ' ', ts))); }
#undef unpack

#ifdef _MSC_VER
#include <intrin.h>
#endif
 
namespace atcoder {
 
namespace internal {
 
int ceil_pow2(int n) {
	int x = 0;
	while ((1U << x) < (unsigned int)(n)) x++;
	return x;
}
 
constexpr int bsf_constexpr(unsigned int n) {
	int x = 0;
	while (!(n & (1 << x))) x++;
	return x;
}
 
int bsf(unsigned int n) {
#ifdef _MSC_VER
	unsigned long index;
	_BitScanForward(&index, n);
	return index;
#else
	return __builtin_ctz(n);
#endif
}
 
}  // namespace internal
 
}  // namespace atcoder
 
 
#include <cassert>
#include <numeric>
#include <type_traits>
 
#ifdef _MSC_VER
#include <intrin.h>
#endif
 
 
#include <utility>
 
#ifdef _MSC_VER
#include <intrin.h>
#endif
 
namespace atcoder {
 
namespace internal {
 
constexpr long long safe_mod(long long x, long long m) {
	x %= m;
	if (x < 0) x += m;
	return x;
}
 
struct barrett {
	unsigned int _m;
	unsigned long long im;
 
	explicit barrett(unsigned int m) : _m(m), im((unsigned long long)(-1) / m + 1) {}
 
	unsigned int umod() const { return _m; }
 
	unsigned int mul(unsigned int a, unsigned int b) const {
 
		unsigned long long z = a;
		z *= b;
#ifdef _MSC_VER
		unsigned long long x;
		_umul128(z, im, &x);
#else
		unsigned long long x =
			(unsigned long long)(((unsigned __int128)(z)*im) >> 64);
#endif
		unsigned int v = (unsigned int)(z - x * _m);
		if (_m <= v) v += _m;
		return v;
	}
};
 
constexpr long long pow_mod_constexpr(long long x, long long n, int m) {
	if (m == 1) return 0;
	unsigned int _m = (unsigned int)(m);
	unsigned long long r = 1;
	unsigned long long y = safe_mod(x, m);
	while (n) {
		if (n & 1) r = (r * y) % _m;
		y = (y * y) % _m;
		n >>= 1;
	}
	return r;
}
 
constexpr bool is_prime_constexpr(int n) {
	if (n <= 1) return false;
	if (n == 2 || n == 7 || n == 61) return true;
	if (n % 2 == 0) return false;
	long long d = n - 1;
	while (d % 2 == 0) d /= 2;
	constexpr long long bases[3] = {2, 7, 61};
	for (long long a : bases) {
		long long t = d;
		long long y = pow_mod_constexpr(a, t, n);
		while (t != n - 1 && y != 1 && y != n - 1) {
			y = y * y % n;
			t <<= 1;
		}
		if (y != n - 1 && t % 2 == 0) {
			return false;
		}
	}
	return true;
}
template <int n> constexpr bool is_prime = is_prime_constexpr(n);
 
constexpr std::pair<long long, long long> inv_gcd(long long a, long long b) {
	a = safe_mod(a, b);
	if (a == 0) return {b, 0};
 
	long long s = b, t = a;
	long long m0 = 0, m1 = 1;
 
	while (t) {
		long long u = s / t;
		s -= t * u;
		m0 -= m1 * u;  // |m1 * u| <= |m1| * s <= b
 
 
		auto tmp = s;
		s = t;
		t = tmp;
		tmp = m0;
		m0 = m1;
		m1 = tmp;
	}
	if (m0 < 0) m0 += b / s;
	return {s, m0};
}
 
constexpr int primitive_root_constexpr(int m) {
	if (m == 2) return 1;
	if (m == 167772161) return 3;
	if (m == 469762049) return 3;
	if (m == 754974721) return 11;
	if (m == 998244353) return 3;
	int divs[20] = {};
	divs[0] = 2;
	int cnt = 1;
	int x = (m - 1) / 2;
	while (x % 2 == 0) x /= 2;
	for (int i = 3; (long long)(i)*i <= x; i += 2) {
		if (x % i == 0) {
			divs[cnt++] = i;
			while (x % i == 0) {
				x /= i;
			}
		}
	}
	if (x > 1) {
		divs[cnt++] = x;
	}
	for (int g = 2;; g++) {
		bool ok = true;
		for (int i = 0; i < cnt; i++) {
			if (pow_mod_constexpr(g, (m - 1) / divs[i], m) == 1) {
				ok = false;
				break;
			}
		}
		if (ok) return g;
	}
}
template <int m> constexpr int primitive_root = primitive_root_constexpr(m);
 
unsigned long long floor_sum_unsigned(unsigned long long n,
										unsigned long long m,
										unsigned long long a,
										unsigned long long b) {
	unsigned long long ans = 0;
	while (true) {
		if (a >= m) {
			ans += n * (n - 1) / 2 * (a / m);
			a %= m;
		}
		if (b >= m) {
			ans += n * (b / m);
			b %= m;
		}
 
		unsigned long long y_max = a * n + b;
		if (y_max < m) break;
		n = (unsigned long long)(y_max / m);
		b = (unsigned long long)(y_max % m);
		std::swap(m, a);
	}
	return ans;
}
 
}  // namespace internal
 
}  // namespace atcoder
 
 
#include <cassert>
#include <numeric>
#include <type_traits>
 
namespace atcoder {
 
namespace internal {
 
#ifndef _MSC_VER
template <class T>
using is_signed_int128 =
	typename std::conditional<std::is_same<T, __int128_t>::value ||
									std::is_same<T, __int128>::value,
								std::true_type,
								std::false_type>::type;
 
template <class T>
using is_unsigned_int128 =
	typename std::conditional<std::is_same<T, __uint128_t>::value ||
									std::is_same<T, unsigned __int128>::value,
								std::true_type,
								std::false_type>::type;
 
template <class T>
using make_unsigned_int128 =
	typename std::conditional<std::is_same<T, __int128_t>::value,
								__uint128_t,
								unsigned __int128>;
 
template <class T>
using is_integral = typename std::conditional<std::is_integral<T>::value ||
													is_signed_int128<T>::value ||
													is_unsigned_int128<T>::value,
												std::true_type,
												std::false_type>::type;
 
template <class T>
using is_signed_int = typename std::conditional<(is_integral<T>::value &&
												 std::is_signed<T>::value) ||
													is_signed_int128<T>::value,
												std::true_type,
												std::false_type>::type;
 
template <class T>
using is_unsigned_int =
	typename std::conditional<(is_integral<T>::value &&
								 std::is_unsigned<T>::value) ||
									is_unsigned_int128<T>::value,
								std::true_type,
								std::false_type>::type;
 
template <class T>
using to_unsigned = typename std::conditional<
	is_signed_int128<T>::value,
	make_unsigned_int128<T>,
	typename std::conditional<std::is_signed<T>::value,
								std::make_unsigned<T>,
								std::common_type<T>>::type>::type;
 
#else
 
template <class T> using is_integral = typename std::is_integral<T>;
 
template <class T>
using is_signed_int =
	typename std::conditional<is_integral<T>::value && std::is_signed<T>::value,
								std::true_type,
								std::false_type>::type;
 
template <class T>
using is_unsigned_int =
	typename std::conditional<is_integral<T>::value &&
									std::is_unsigned<T>::value,
								std::true_type,
								std::false_type>::type;
 
template <class T>
using to_unsigned = typename std::conditional<is_signed_int<T>::value,
												std::make_unsigned<T>,
												std::common_type<T>>::type;
 
#endif
 
template <class T>
using is_signed_int_t = std::enable_if_t<is_signed_int<T>::value>;
 
template <class T>
using is_unsigned_int_t = std::enable_if_t<is_unsigned_int<T>::value>;
 
template <class T> using to_unsigned_t = typename to_unsigned<T>::type;
 
}  // namespace internal
 
}  // namespace atcoder
 
 
namespace atcoder {
 
namespace internal {
 
struct modint_base {};
struct static_modint_base : modint_base {};
 
template <class T> using is_modint = std::is_base_of<modint_base, T>;
template <class T> using is_modint_t = std::enable_if_t<is_modint<T>::value>;
 
}  // namespace internal
 
template <int m, std::enable_if_t<(1 <= m)>* = nullptr>
struct static_modint : internal::static_modint_base {
	using mint = static_modint;
 
	public:
	static constexpr int mod() { return m; }
	static mint raw(int v) {
		mint x;
		x._v = v;
		return x;
	}
 
	static_modint() : _v(0) {}
	template <class T, internal::is_signed_int_t<T>* = nullptr>
	static_modint(T v) {
		long long x = (long long)(v % (long long)(umod()));
		if (x < 0) x += umod();
		_v = (unsigned int)(x);
	}
	template <class T, internal::is_unsigned_int_t<T>* = nullptr>
	static_modint(T v) {
		_v = (unsigned int)(v % umod());
	}
 
	unsigned int val() const { return _v; }
 
	mint& operator++() {
		_v++;
		if (_v == umod()) _v = 0;
		return *this;
	}
	mint& operator--() {
		if (_v == 0) _v = umod();
		_v--;
		return *this;
	}
	mint operator++(int) {
		mint result = *this;
		++*this;
		return result;
	}
	mint operator--(int) {
		mint result = *this;
		--*this;
		return result;
	}
 
	mint& operator+=(const mint& rhs) {
		_v += rhs._v;
		if (_v >= umod()) _v -= umod();
		return *this;
	}
	mint& operator-=(const mint& rhs) {
		_v -= rhs._v;
		if (_v >= umod()) _v += umod();
		return *this;
	}
	mint& operator*=(const mint& rhs) {
		unsigned long long z = _v;
		z *= rhs._v;
		_v = (unsigned int)(z % umod());
		return *this;
	}
	mint& operator/=(const mint& rhs) { return *this = *this * rhs.inv(); }
 
	mint operator+() const { return *this; }
	mint operator-() const { return mint() - *this; }
 
	mint pow(long long n) const {
		assert(0 <= n);
		mint x = *this, r = 1;
		while (n) {
			if (n & 1) r *= x;
			x *= x;
			n >>= 1;
		}
		return r;
	}
	mint inv() const {
		if (prime) {
			assert(_v);
			return pow(umod() - 2);
		} else {
			auto eg = internal::inv_gcd(_v, m);
			assert(eg.first == 1);
			return eg.second;
		}
	}
 
	friend mint operator+(const mint& lhs, const mint& rhs) {
		return mint(lhs) += rhs;
	}
	friend mint operator-(const mint& lhs, const mint& rhs) {
		return mint(lhs) -= rhs;
	}
	friend mint operator*(const mint& lhs, const mint& rhs) {
		return mint(lhs) *= rhs;
	}
	friend mint operator/(const mint& lhs, const mint& rhs) {
		return mint(lhs) /= rhs;
	}
	friend bool operator==(const mint& lhs, const mint& rhs) {
		return lhs._v == rhs._v;
	}
	friend bool operator!=(const mint& lhs, const mint& rhs) {
		return lhs._v != rhs._v;
	}
 
	private:
	unsigned int _v;
	static constexpr unsigned int umod() { return m; }
	static constexpr bool prime = internal::is_prime<m>;
};
 
template <int id> struct dynamic_modint : internal::modint_base {
	using mint = dynamic_modint;
 
	public:
	static int mod() { return (int)(bt.umod()); }
	static void set_mod(int m) {
		assert(1 <= m);
		bt = internal::barrett(m);
	}
	static mint raw(int v) {
		mint x;
		x._v = v;
		return x;
	}
 
	dynamic_modint() : _v(0) {}
	template <class T, internal::is_signed_int_t<T>* = nullptr>
	dynamic_modint(T v) {
		long long x = (long long)(v % (long long)(mod()));
		if (x < 0) x += mod();
		_v = (unsigned int)(x);
	}
	template <class T, internal::is_unsigned_int_t<T>* = nullptr>
	dynamic_modint(T v) {
		_v = (unsigned int)(v % mod());
	}
 
	unsigned int val() const { return _v; }
 
	mint& operator++() {
		_v++;
		if (_v == umod()) _v = 0;
		return *this;
	}
	mint& operator--() {
		if (_v == 0) _v = umod();
		_v--;
		return *this;
	}
	mint operator++(int) {
		mint result = *this;
		++*this;
		return result;
	}
	mint operator--(int) {
		mint result = *this;
		--*this;
		return result;
	}
 
	mint& operator+=(const mint& rhs) {
		_v += rhs._v;
		if (_v >= umod()) _v -= umod();
		return *this;
	}
	mint& operator-=(const mint& rhs) {
		_v += mod() - rhs._v;
		if (_v >= umod()) _v -= umod();
		return *this;
	}
	mint& operator*=(const mint& rhs) {
		_v = bt.mul(_v, rhs._v);
		return *this;
	}
	mint& operator/=(const mint& rhs) { return *this = *this * rhs.inv(); }
 
	mint operator+() const { return *this; }
	mint operator-() const { return mint() - *this; }
 
	mint pow(long long n) const {
		assert(0 <= n);
		mint x = *this, r = 1;
		while (n) {
			if (n & 1) r *= x;
			x *= x;
			n >>= 1;
		}
		return r;
	}
	mint inv() const {
		auto eg = internal::inv_gcd(_v, mod());
		assert(eg.first == 1);
		return eg.second;
	}
 
	friend mint operator+(const mint& lhs, const mint& rhs) {
		return mint(lhs) += rhs;
	}
	friend mint operator-(const mint& lhs, const mint& rhs) {
		return mint(lhs) -= rhs;
	}
	friend mint operator*(const mint& lhs, const mint& rhs) {
		return mint(lhs) *= rhs;
	}
	friend mint operator/(const mint& lhs, const mint& rhs) {
		return mint(lhs) /= rhs;
	}
	friend bool operator==(const mint& lhs, const mint& rhs) {
		return lhs._v == rhs._v;
	}
	friend bool operator!=(const mint& lhs, const mint& rhs) {
		return lhs._v != rhs._v;
	}
 
	private:
	unsigned int _v;
	static internal::barrett bt;
	static unsigned int umod() { return bt.umod(); }
};
template <int id> internal::barrett dynamic_modint<id>::bt(998244353);
 
using modint998244353 = static_modint<998244353>;
using modint1000000007 = static_modint<1000000007>;
using modint = dynamic_modint<-1>;
 
namespace internal {
 
template <class T>
using is_static_modint = std::is_base_of<internal::static_modint_base, T>;
 
template <class T>
using is_static_modint_t = std::enable_if_t<is_static_modint<T>::value>;
 
template <class> struct is_dynamic_modint : public std::false_type {};
template <int id>
struct is_dynamic_modint<dynamic_modint<id>> : public std::true_type {};
 
template <class T>
using is_dynamic_modint_t = std::enable_if_t<is_dynamic_modint<T>::value>;
 
}  // namespace internal
 
}  // namespace atcoder
 
 
namespace atcoder {
 
namespace internal {
 
template <class mint,
			int g = internal::primitive_root<mint::mod()>,
			internal::is_static_modint_t<mint>* = nullptr>
struct fft_info {
	static constexpr int rank2 = bsf_constexpr(mint::mod() - 1);
	std::array<mint, rank2 + 1> root;   // root[i]^(2^i) == 1
	std::array<mint, rank2 + 1> iroot;  // root[i] * iroot[i] == 1
 
	std::array<mint, std::max(0, rank2 - 2 + 1)> rate2;
	std::array<mint, std::max(0, rank2 - 2 + 1)> irate2;
 
	std::array<mint, std::max(0, rank2 - 3 + 1)> rate3;
	std::array<mint, std::max(0, rank2 - 3 + 1)> irate3;
 
	fft_info() {
		root[rank2] = mint(g).pow((mint::mod() - 1) >> rank2);
		iroot[rank2] = root[rank2].inv();
		for (int i = rank2 - 1; i >= 0; i--) {
			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];
			}
		}
		{
			mint 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];
			}
		}
	}
};
 
template <class mint, internal::is_static_modint_t<mint>* = nullptr>
void butterfly(std::vector<mint>& a) {
	int n = int(a.size());
	int h = internal::ceil_pow2(n);
 
	static const fft_info<mint> info;
 
	int len = 0;  // a[i, i+(n>>len), i+2*(n>>len), ..] is transformed
	while (len < h) {
		if (h - len == 1) {
			int p = 1 << (h - len - 1);
			mint rot = 1;
			for (int s = 0; s < (1 << len); s++) {
				int offset = s << (h - len);
				for (int i = 0; i < p; i++) {
					auto l = a[i + offset];
					auto r = a[i + offset + p] * rot;
					a[i + offset] = l + r;
					a[i + offset + p] = l - r;
				}
				if (s + 1 != (1 << len))
					rot *= info.rate2[bsf(~(unsigned int)(s))];
			}
			len++;
		} else {
			int p = 1 << (h - len - 2);
			mint rot = 1, imag = info.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++) {
					auto mod2 = 1ULL * mint::mod() * mint::mod();
					auto a0 = 1ULL * a[i + offset].val();
					auto a1 = 1ULL * a[i + offset + p].val() * rot.val();
					auto a2 = 1ULL * a[i + offset + 2 * p].val() * rot2.val();
					auto a3 = 1ULL * a[i + offset + 3 * p].val() * rot3.val();
					auto a1na3imag =
						1ULL * mint(a1 + mod2 - a3).val() * imag.val();
					auto 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);
				}
				if (s + 1 != (1 << len))
					rot *= info.rate3[bsf(~(unsigned int)(s))];
			}
			len += 2;
		}
	}
}
 
template <class mint, internal::is_static_modint_t<mint>* = nullptr>
void butterfly_inv(std::vector<mint>& a) {
	int n = int(a.size());
	int h = internal::ceil_pow2(n);
 
	static const fft_info<mint> info;
 
	int len = h;  // a[i, i+(n>>len), i+2*(n>>len), ..] is transformed
	while (len) {
		if (len == 1) {
			int p = 1 << (h - len);
			mint irot = 1;
			for (int s = 0; s < (1 << (len - 1)); s++) {
				int offset = s << (h - len + 1);
				for (int i = 0; i < p; i++) {
					auto l = a[i + offset];
					auto r = a[i + offset + p];
					a[i + offset] = l + r;
					a[i + offset + p] =
						(unsigned long long)(mint::mod() + l.val() - r.val()) *
						irot.val();
					;
				}
				if (s + 1 != (1 << (len - 1)))
					irot *= info.irate2[bsf(~(unsigned int)(s))];
			}
			len--;
		} else {
			int p = 1 << (h - len);
			mint irot = 1, iimag = info.iroot[2];
			for (int s = 0; s < (1 << (len - 2)); s++) {
				mint irot2 = irot * irot;
				mint irot3 = irot2 * irot;
				int offset = s << (h - len + 2);
				for (int i = 0; i < p; i++) {
					auto a0 = 1ULL * a[i + offset + 0 * p].val();
					auto a1 = 1ULL * a[i + offset + 1 * p].val();
					auto a2 = 1ULL * a[i + offset + 2 * p].val();
					auto a3 = 1ULL * a[i + offset + 3 * p].val();
 
					auto a2na3iimag =
						1ULL *
						mint((mint::mod() + a2 - a3) * iimag.val()).val();
 
					a[i + offset] = a0 + a1 + a2 + a3;
					a[i + offset + 1 * p] =
						(a0 + (mint::mod() - a1) + a2na3iimag) * irot.val();
					a[i + offset + 2 * p] =
						(a0 + a1 + (mint::mod() - a2) + (mint::mod() - a3)) *
						irot2.val();
					a[i + offset + 3 * p] =
						(a0 + (mint::mod() - a1) + (mint::mod() - a2na3iimag)) *
						irot3.val();
				}
				if (s + 1 != (1 << (len - 2)))
					irot *= info.irate3[bsf(~(unsigned int)(s))];
			}
			len -= 2;
		}
	}
}
 
template <class mint, internal::is_static_modint_t<mint>* = nullptr>
std::vector<mint> convolution_naive(const std::vector<mint>& a,
									const std::vector<mint>& b) {
	int n = int(a.size()), m = int(b.size());
	std::vector<mint> ans(n + m - 1);
	if (n < m) {
		for (int j = 0; j < m; j++) {
			for (int i = 0; i < n; i++) {
				ans[i + j] += a[i] * b[j];
			}
		}
	} else {
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				ans[i + j] += a[i] * b[j];
			}
		}
	}
	return ans;
}
 
template <class mint, internal::is_static_modint_t<mint>* = nullptr>
std::vector<mint> convolution_fft(std::vector<mint> a, std::vector<mint> b) {
	int n = int(a.size()), m = int(b.size());
	int z = 1 << internal::ceil_pow2(n + m - 1);
	a.resize(z);
	internal::butterfly(a);
	b.resize(z);
	internal::butterfly(b);
	for (int i = 0; i < z; i++) {
		a[i] *= b[i];
	}
	internal::butterfly_inv(a);
	a.resize(n + m - 1);
	mint iz = mint(z).inv();
	for (int i = 0; i < n + m - 1; i++) a[i] *= iz;
	return a;
}
 
}  // namespace internal
 
template <class mint, internal::is_static_modint_t<mint>* = nullptr>
std::vector<mint> convolution(std::vector<mint>&& a, std::vector<mint>&& b) {
	int n = int(a.size()), m = int(b.size());
	if (!n || !m) return {};
	if (std::min(n, m) <= 60) return convolution_naive(a, b);
	return internal::convolution_fft(a, b);
}
 
template <class mint, internal::is_static_modint_t<mint>* = nullptr>
std::vector<mint> convolution(const std::vector<mint>& a,
								const std::vector<mint>& b) {
	int n = int(a.size()), m = int(b.size());
	if (!n || !m) return {};
	if (std::min(n, m) <= 60) return convolution_naive(a, b);
	return internal::convolution_fft(a, b);
}
 
template <unsigned int mod = 998244353,
			class T,
			std::enable_if_t<internal::is_integral<T>::value>* = nullptr>
std::vector<T> convolution(const std::vector<T>& a, const std::vector<T>& b) {
	int n = int(a.size()), m = int(b.size());
	if (!n || !m) return {};
 
	using mint = static_modint<mod>;
	std::vector<mint> a2(n), b2(m);
	for (int i = 0; i < n; i++) {
		a2[i] = mint(a[i]);
	}
	for (int i = 0; i < m; i++) {
		b2[i] = mint(b[i]);
	}
	auto c2 = convolution(move(a2), move(b2));
	std::vector<T> c(n + m - 1);
	for (int i = 0; i < n + m - 1; i++) {
		c[i] = c2[i].val();
	}
	return c;
}
 
std::vector<long long> convolution_ll(const std::vector<long long>& a,
										const std::vector<long long>& b) {
	int n = int(a.size()), m = int(b.size());
	if (!n || !m) return {};
 
	static constexpr unsigned long long MOD1 = 754974721;  // 2^24
	static constexpr unsigned long long MOD2 = 167772161;  // 2^25
	static constexpr unsigned long long MOD3 = 469762049;  // 2^26
	static constexpr unsigned long long M2M3 = MOD2 * MOD3;
	static constexpr unsigned long long M1M3 = MOD1 * MOD3;
	static constexpr unsigned long long M1M2 = MOD1 * MOD2;
	static constexpr unsigned long long M1M2M3 = MOD1 * MOD2 * MOD3;
 
	static constexpr unsigned long long i1 =
		internal::inv_gcd(MOD2 * MOD3, MOD1).second;
	static constexpr unsigned long long i2 =
		internal::inv_gcd(MOD1 * MOD3, MOD2).second;
	static constexpr unsigned long long i3 =
		internal::inv_gcd(MOD1 * MOD2, MOD3).second;
 
	auto c1 = convolution<MOD1>(a, b);
	auto c2 = convolution<MOD2>(a, b);
	auto c3 = convolution<MOD3>(a, b);
 
	std::vector<long long> c(n + m - 1);
	for (int i = 0; i < n + m - 1; i++) {
		unsigned long long x = 0;
		x += (c1[i] * i1) % MOD1 * M2M3;
		x += (c2[i] * i2) % MOD2 * M1M3;
		x += (c3[i] * i3) % MOD3 * M1M2;
		long long diff =
			c1[i] - internal::safe_mod((long long)(x), (long long)(MOD1));
		if (diff < 0) diff += MOD1;
		static constexpr unsigned long long offset[5] = {
			0, 0, M1M2M3, 2 * M1M2M3, 3 * M1M2M3};
		x -= offset[diff % 5];
		c[i] = x;
	}
 
	return c;
}
 
}  // namespace atcoder
 

using namespace atcoder;
using mint=modint998244353;
using vmint=vector<mint>;

// combination mod prime
// https://youtu.be/8uowVvQ_-Mo?t=6002
// https://youtu.be/Tgd_zLfRZOQ?t=9928
struct modinv {
	int n; vector<mint> d;
	modinv(): n(2), d({0,1}) {}
	mint operator()(int i) {
	while (n <= i) d.push_back(-d[mint::mod()%n]*(mint::mod()/n)), ++n;
	return d[i];
	}
	mint operator[](int i) const { return d[i];}
} invs;
struct modfact {
	int n; vector<mint> d;
	modfact(): n(2), d({1,1}) {}
	mint operator()(int i) {
	while (n <= i) d.push_back(d.back()*n), ++n;
	return d[i];
	}
	mint operator[](int i) const { return d[i];}
} facts;
struct modfactinv {
	int n; vector<mint> d;
	modfactinv(): n(2), d({1,1}) {}
	mint operator()(int i) {
	while (n <= i) d.push_back(d.back()*invs(n)), ++n;
	return d[i];
	}
	mint operator[](int i) const { return d[i];}
} ifacts;
mint comb(int n, int k) {
	if (n < k || k < 0) return 0;
	return facts(n)*ifacts(k)*ifacts(n-k);
}
mint perm(int n, int k) {
	if (n < k || k < 0) return 0;
	return facts(n)*ifacts(n-k);
}
mint mcomb(int n,int m){//m objects into n places
	return comb(n+m-1,m);
}

pair<__int128_t, vector<long long>> calc(int n, vector<vector<ll>> E){
  vector<int> p(n, -1);
  vector<vector<int>> c(n);
  vector<int> d(n);
  d[0] = 0;
  vector<int> b;
  queue<int> Q;
  Q.push(0);
  while (!Q.empty()){
    int v = Q.front();
    Q.pop();
    b.push_back(v);
    for (int w : E[v]){
      if (w != p[v]){
        p[w] = v;
        c[v].push_back(w);
        d[w] = d[v] + 1;
        Q.push(w);
      }
    }
  }
  reverse(b.begin(), b.end());
  vector<int> sz(n, 1);
  for (int v : b){
    for (int w : c[v]){
      sz[v] += sz[w];
    }
  }
  vector<long long> sum(n);
  for (int i = 0; i < n; i++){
    sum[0] += d[i];
  }
  reverse(b.begin(), b.end());
  for (int v : b){
    if (v != 0){
      sum[v] = sum[p[v]] - sz[v] + (n - sz[v]);
    }
  }
  vector<long long> ans2;
  for (int i = 0; i < n; i++){
    if (E[i].size() == 1){
      ans2.push_back(sum[i]);
    }
  }
  reverse(b.begin(), b.end());
  __int128_t ans = 0;
  vector<long long> sum1(n, 0);
  vector<long long> sum2(n, 0);
  for (int v : b){
    for (int w : c[v]){
      sum1[v] += sum1[w] + sz[w];
      sum2[v] += sum2[w] + sum1[w] * 2 + sz[w];
      ans += (__int128_t) (sum2[w] + sum1[w] * 2 + sz[w]) * (sz[v] - sz[w]);
    }
    for (int w : c[v]){
      ans += (__int128_t) (sum1[w] + sz[w]) * (sum1[v] - sum1[w] - sz[w]);
    }
  }
  return make_pair(ans, ans2);
}

void solve(){
	LL(n,C);
	vv(ll,g,n);
	rep(i,n-1){
		ll a,b;
		cin>>a>>b;
		a--,b--;
		g[a].pb(b);
		g[b].pb(a);
	}
	mint mc;
	vll delta;

	// mc=15;
	// rep(j,3)delta.pb(5);

	{
		auto [p,q]=calc(n,g);
		mc=p%998244353;
		delta=q;
	}

	// cout<<mc.val()<<endl;
	// out(delta);

	sor(delta);
	fore(e,delta)e*=2;
	queue<ll> used,newbie;
	ll base=n-1;
	fore(e,delta)newbie.push(e);
	newbie.push(inf);
	mint ans=mc*mc*mc;
	rng(c,n,C+1){
		ll vl=inf;
		if(!used.empty()){
			vl=used.front();
		}
		ll vr=newbie.front();
		if(vl<vr){
			used.pop();
		}
		else{
			newbie.pop();
		}
		ll mi=min(vl,vr);
		used.push(mi+2*(n-2));
		mc+=mi+base;
		base+=2;
		ans+=mc*mc*mc;
		// cout<<mc.val()<<endl;
	}
	out(ans.val());
}
int main(){
	cin.tie(0);
	ios::sync_with_stdio(0);
	ll t;
	cin>>t;
	while(t--)solve();
}

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

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3644kb

input:

2
4 3
1 4
1 3
2 1
4 4
1 4
1 3
2 1

output:

3375
25327

result:

ok 2 tokens

Test #2:

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

input:

4
4 3
1 4
1 3
2 1
4 4
1 4
1 3
2 1
5 4
1 4
1 3
1 2
5 4
5 5
1 4
1 3
1 2
5 4

output:

3375
25327
54872
249984

result:

ok 4 tokens

Test #3:

score: 0
Accepted
time: 1618ms
memory: 71436kb

input:

4
300000 50000000
216838 200677
44849 12926
125086 157230
26195 29767
241694 21336
21336 24457
105861 84565
184655 45583
175336 97945
286044 30927
295273 249694
109469 1566
193560 251229
176229 288707
206166 13532
166218 264413
299977 95587
159105 48116
57912 82606
97296 193689
115029 121192
68068 1...

output:

968050473
546482457
9595680
694101802

result:

ok 4 tokens

Test #4:

score: 0
Accepted
time: 1679ms
memory: 71056kb

input:

4
300000 49999999
260729 131757
51432 46938
257303 178692
218606 108144
299084 259822
82091 231405
101255 218808
287507 101249
29597 151244
43164 198032
122336 162072
177969 62812
277824 35758
182087 258797
235155 33806
188695 76915
289006 141702
39100 183183
224949 156588
9827 173233
27349 286822
1...

output:

283884918
837489229
12901428
323340145

result:

ok 4 tokens

Test #5:

score: 0
Accepted
time: 1695ms
memory: 71248kb

input:

4
300000 50000000
187086 121551
163664 292500
40569 125891
280767 56246
127162 299705
207527 280767
252551 217178
73197 278560
274282 31937
121290 280767
220367 278560
187814 40569
187372 278560
95157 131908
119390 161684
202404 283778
226289 130192
294021 278560
50286 102006
21592 222623
285215 237...

output:

4850582
364539310
683543335
559022036

result:

ok 4 tokens

Test #6:

score: 0
Accepted
time: 1670ms
memory: 67984kb

input:

4
300000 50000000
225743 104304
178831 182636
22896 17048
96503 294029
294029 28084
38933 104195
294029 1583
224079 175121
8797 197089
81985 139893
184175 103991
39351 217336
127576 82268
294029 292994
145502 294859
63119 104069
294029 41437
236951 199792
157992 294029
249477 284128
136077 294029
65...

output:

536508840
693675397
413103274
759128961

result:

ok 4 tokens

Test #7:

score: 0
Accepted
time: 1737ms
memory: 68816kb

input:

4
300000 50000000
246788 228391
158979 271301
96237 233512
276470 143087
132635 100991
189228 201152
1506 10986
75594 100408
279681 127708
140194 83425
50807 272520
277215 107214
249687 77890
261893 11907
109314 121422
76821 170561
11602 233066
80094 28275
27473 70572
130573 16191
13008 289605
25353...

output:

229607225
752154895
217060859
960988279

result:

ok 4 tokens

Test #8:

score: 0
Accepted
time: 1763ms
memory: 66228kb

input:

4
300000 50000000
282645 78888
157049 242271
143611 216821
287822 256908
2275 263546
49651 72865
31980 207555
107608 204451
138876 149271
175134 283496
8765 266276
288773 161294
250433 198847
292442 23211
93376 281917
221760 81331
133157 239663
276759 27628
115322 150583
89351 283086
291870 12125
68...

output:

62551856
430534707
675000909
391405102

result:

ok 4 tokens

Test #9:

score: 0
Accepted
time: 1716ms
memory: 74292kb

input:

4
300000 50000000
294569 56297
172540 287752
61940 152205
197674 254245
24085 113380
82637 123004
47497 92473
32184 178733
277456 157565
21776 156798
137130 134095
110025 202055
174662 297197
60043 118646
4537 248467
273141 53510
238177 252865
234966 233515
289687 229746
298433 191752
120484 36179
2...

output:

195781417
673490465
850215681
815198198

result:

ok 4 tokens

Test #10:

score: 0
Accepted
time: 1245ms
memory: 67804kb

input:

4
36778 50000000
17602 27103
25759 23876
24338 4623
29585 32937
25324 18644
2950 25005
25234 8990
10680 32086
9568 25870
23421 16592
1809 18727
29491 17171
22903 27836
4496 20939
25152 3804
12390 16492
3484 31766
6824 25795
1411 28354
3077 17532
6033 36029
11689 15579
20720 35844
5484 2622
15596 536...

output:

135800108
231398541
778024906
624480729

result:

ok 4 tokens

Test #11:

score: 0
Accepted
time: 1173ms
memory: 64720kb

input:

4
300000 29286167
155087 68009
83184 149687
206954 8699
86662 141944
237475 242716
124487 225583
168790 57088
207434 196893
573 4579
71930 257825
193317 77567
143825 182638
294310 270719
180399 209962
32628 203666
250650 234364
254067 255639
14682 227300
84292 38937
95079 54215
132911 56983
286874 1...

output:

741171004
852827875
22231673
170720066

result:

ok 4 tokens

Test #12:

score: 0
Accepted
time: 988ms
memory: 64736kb

input:

4
300000 300000
175617 119821
181516 243657
160218 215766
162419 187680
293075 168627
290423 228281
274959 98317
107502 76378
79894 239145
45063 32200
69024 209908
1914 38016
94743 179968
32123 245964
295205 76517
97609 38830
189696 241669
137230 69860
66658 181410
70572 238631
156044 108622
108815 ...

output:

791655481
435035749
574582056
506992226

result:

ok 4 tokens

Test #13:

score: 0
Accepted
time: 1035ms
memory: 3816kb

input:

4
6 47918926
4 3
6 1
1 5
5 4
5 2
6 49261475
6 4
5 6
5 3
4 2
6 1
6 47347415
3 6
6 4
2 6
6 5
1 5
6 46149726
1 2
5 3
5 4
2 4
2 6

output:

593706496
305830436
556194176
708898110

result:

ok 4 tokens

Test #14:

score: 0
Accepted
time: 1012ms
memory: 3872kb

input:

4
6 49429002
2 1
2 4
2 6
6 5
3 6
7 45760900
5 7
7 2
6 2
7 1
3 2
4 7
6 47061835
6 5
6 3
6 1
2 6
6 4
4 47410821
1 4
1 3
3 2

output:

536172407
533054157
561317786
749859281

result:

ok 4 tokens

Test #15:

score: 0
Accepted
time: 1048ms
memory: 3620kb

input:

4
6 49726215
1 6
2 6
6 3
6 5
2 4
2 50000000
1 2
8 49331348
7 3
7 8
5 6
4 3
6 3
2 4
1 7
5 45313556
2 3
4 3
3 5
5 1

output:

429791300
656547393
307298104
165844147

result:

ok 4 tokens

Test #16:

score: 0
Accepted
time: 747ms
memory: 3820kb

input:

4
2 1
2 1
6 49045599
4 2
6 1
6 2
2 3
6 5
7 47403164
5 4
4 7
6 4
6 1
3 1
2 1
5 45061409
2 4
2 1
5 4
3 4

output:

1
403846093
637856203
454170631

result:

ok 4 tokens

Test #17:

score: 0
Accepted
time: 1034ms
memory: 3644kb

input:

4
4 48454794
2 4
4 1
3 2
5 48326937
5 1
5 4
3 2
3 1
5 48676454
3 4
4 1
5 1
1 2
6 48862565
6 2
4 2
5 2
2 1
2 3

output:

346937787
946110101
893634681
642310081

result:

ok 4 tokens

Test #18:

score: 0
Accepted
time: 1018ms
memory: 3844kb

input:

4
5 46095989
3 1
4 1
1 2
1 5
5 46073375
4 2
5 4
3 4
1 4
5 48531505
1 5
4 5
2 5
5 3
6 47558014
2 3
6 4
3 5
4 1
5 6

output:

128951803
883389586
226899121
189625473

result:

ok 4 tokens

Test #19:

score: 0
Accepted
time: 1051ms
memory: 3592kb

input:

4
4 45855350
1 4
2 1
4 3
3 49740257
1 2
3 2
4 46480829
1 2
3 1
4 2
4 49937459
1 2
4 2
4 3

output:

605823624
478005949
142328825
551484866

result:

ok 4 tokens

Test #20:

score: 0
Accepted
time: 1050ms
memory: 3876kb

input:

4
4 48451769
4 3
1 3
2 4
6 48177189
6 2
4 3
1 2
3 5
6 3
5 48577030
4 5
2 4
1 5
3 1
5 49630910
3 4
1 5
4 2
4 1

output:

280695405
350730179
81027477
157985696

result:

ok 4 tokens

Test #21:

score: 0
Accepted
time: 996ms
memory: 3816kb

input:

4
8 49687604
2 8
7 4
3 1
5 6
8 3
7 6
5 1
3 45328134
1 2
1 3
6 47773101
1 4
3 2
6 4
2 4
5 4
6 46139567
2 6
2 3
6 4
2 5
1 2

output:

851791018
997976249
56174545
995045254

result:

ok 4 tokens

Test #22:

score: 0
Accepted
time: 1118ms
memory: 3604kb

input:

4
5 49796273
2 5
1 3
5 1
3 4
5 46614868
3 4
5 4
2 4
1 4
4 49876006
3 4
2 1
3 2
5 49208056
2 1
4 2
2 5
1 3

output:

844326175
597753235
196308105
418510131

result:

ok 4 tokens

Test #23:

score: 0
Accepted
time: 1007ms
memory: 3648kb

input:

4
4 45326185
3 1
2 3
3 4
3 50000000
2 3
1 3
8 48919728
6 1
4 8
4 3
7 8
2 1
8 1
1 5
4 45882405
4 1
1 3
2 4

output:

830463674
893434183
29400274
505479262

result:

ok 4 tokens

Test #24:

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

input:

4
4 45981477
4 1
1 3
1 2
4 50000000
2 3
3 4
1 4
6 49644522
5 4
1 2
6 3
1 6
3 5
4 46917732
2 4
3 2
2 1

output:

441930004
891846827
12660622
308147414

result:

ok 4 tokens

Test #25:

score: 0
Accepted
time: 1009ms
memory: 3836kb

input:

4
5 46558871
2 4
3 1
3 5
5 4
7 48040830
6 7
1 2
5 2
7 3
7 4
7 1
5 48622955
4 3
1 4
4 5
1 2
8 48009463
3 5
3 4
1 8
7 4
1 4
6 3
4 2

output:

819848891
31449847
684770567
371025692

result:

ok 4 tokens

Test #26:

score: 0
Accepted
time: 1012ms
memory: 3552kb

input:

4
6 48976172
6 4
6 1
2 5
1 5
2 3
5 47341555
1 5
4 1
2 3
3 4
5 47504872
5 1
5 3
2 4
2 5
5 45523046
4 1
4 5
3 4
5 2

output:

62444387
286055466
933929990
389184808

result:

ok 4 tokens

Test #27:

score: 0
Accepted
time: 754ms
memory: 3692kb

input:

4
6 47135616
3 5
1 6
1 4
1 2
3 2
4 48171807
3 1
3 2
2 4
7 46881593
5 3
4 1
1 3
7 5
5 2
1 6
2 2
1 2

output:

647945243
159077979
837172093
65

result:

ok 4 tokens

Test #28:

score: 0
Accepted
time: 996ms
memory: 3688kb

input:

4
6 45340510
6 1
2 4
5 1
3 4
4 5
5 49475059
5 2
4 1
1 3
4 2
4 45780627
4 3
3 1
1 2
4 49033871
4 1
4 3
2 4

output:

287357295
935929856
762506483
789460951

result:

ok 4 tokens

Test #29:

score: 0
Accepted
time: 1035ms
memory: 3652kb

input:

4
6 47361583
2 6
5 1
5 3
5 6
4 2
6 49346013
5 1
1 4
6 1
5 2
6 3
85 50000000
51 44
13 20
14 9
46 70
5 13
7 34
33 16
23 58
33 30
67 13
3 70
8 33
38 42
7 44
40 58
70 31
23 26
50 27
7 79
28 68
74 44
37 76
23 84
58 62
59 58
12 65
59 57
60 66
81 83
20 45
24 72
29 70
70 1
64 73
63 47
53 23
27 44
74 19
38 6...

output:

557083956
521912976
508811400
923917013

result:

ok 4 tokens

Test #30:

score: 0
Accepted
time: 981ms
memory: 3668kb

input:

4
4 48048505
3 2
4 1
1 2
6 45752957
4 3
6 5
1 2
2 6
6 4
7 45027209
4 1
6 4
3 2
2 1
5 7
6 7
2 45788884
2 1

output:

797762478
105794984
368141529
925907990

result:

ok 4 tokens

Extra Test:

score: 0
Extra Test Passed