QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#678672#9530. A Game On Treeucup-team5243#AC ✓273ms12280kbC++1713.5kb2024-10-26 15:43:022024-10-26 15:43:04

Judging History

This is the latest submission verdict.

  • [2024-10-26 15:43:04]
  • Judged
  • Verdict: AC
  • Time: 273ms
  • Memory: 12280kb
  • [2024-10-26 15:43:02]
  • Submitted

answer

#ifdef NACHIA
#define _GLIBCXX_DEBUG
#else
#define NDEBUG
#endif
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using i64 = long long;
using u64 = unsigned long long;
#define rep(i,n) for(int i=0; i<int(n); i++)
const i64 INF = 1001001001001001001;
template<typename A> void chmin(A& l, const A& r){ if(r < l) l = r; }
template<typename A> void chmax(A& l, const A& r){ if(l < r) l = r; }
using namespace std;
#include <utility>
#include <cassert>

namespace nachia{

template<class Elem>
class CsrArray{
public:
    struct ListRange{
        using iterator = typename std::vector<Elem>::iterator;
        iterator begi, endi;
        iterator begin() const { return begi; }
        iterator end() const { return endi; }
        int size() const { return (int)std::distance(begi, endi); }
        Elem& operator[](int i) const { return begi[i]; }
    };
    struct ConstListRange{
        using iterator = typename std::vector<Elem>::const_iterator;
        iterator begi, endi;
        iterator begin() const { return begi; }
        iterator end() const { return endi; }
        int size() const { return (int)std::distance(begi, endi); }
        const Elem& operator[](int i) const { return begi[i]; }
    };
private:
    int m_n;
    std::vector<Elem> m_list;
    std::vector<int> m_pos;
public:
    CsrArray() : m_n(0), m_list(), m_pos() {}
    static CsrArray Construct(int n, std::vector<std::pair<int, Elem>> items){
        CsrArray res;
        res.m_n = n;
        std::vector<int> buf(n+1, 0);
        for(auto& [u,v] : items){ ++buf[u]; }
        for(int i=1; i<=n; i++) buf[i] += buf[i-1];
        res.m_list.resize(buf[n]);
        for(int i=(int)items.size()-1; i>=0; i--){
            res.m_list[--buf[items[i].first]] = std::move(items[i].second);
        }
        res.m_pos = std::move(buf);
        return res;
    }
    static CsrArray FromRaw(std::vector<Elem> list, std::vector<int> pos){
        CsrArray res;
        res.m_n = pos.size() - 1;
        res.m_list = std::move(list);
        res.m_pos = std::move(pos);
        return res;
    }
    ListRange operator[](int u) { return ListRange{ m_list.begin() + m_pos[u], m_list.begin() + m_pos[u+1] }; }
    ConstListRange operator[](int u) const { return ConstListRange{ m_list.begin() + m_pos[u], m_list.begin() + m_pos[u+1] }; }
    int size() const { return m_n; }
    int fullSize() const { return (int)m_list.size(); }
};

} // namespace nachia

namespace nachia{


struct Graph {
public:
    struct Edge{
        int from, to;
        void reverse(){ std::swap(from, to); }
        int xorval() const { return from ^ to; }
    };
    Graph(int n = 0, bool undirected = false, int m = 0) : m_n(n), m_e(m), m_isUndir(undirected) {}
    Graph(int n, const std::vector<std::pair<int, int>>& edges, bool undirected = false) : m_n(n), m_isUndir(undirected){
        m_e.resize(edges.size());
        for(std::size_t i=0; i<edges.size(); i++) m_e[i] = { edges[i].first, edges[i].second };
    }
    template<class Cin>
    static Graph Input(Cin& cin, int n, bool undirected, int m, bool offset = 0){
        Graph res(n, undirected, m);
        for(int i=0; i<m; i++){
            int u, v; cin >> u >> v;
            res[i].from = u - offset;
            res[i].to = v - offset;
        }
        return res;
    }
    int numVertices() const noexcept { return m_n; }
    int numEdges() const noexcept { return int(m_e.size()); }
    int addNode() noexcept { return m_n++; }
    int addEdge(int from, int to){ m_e.push_back({ from, to }); return numEdges() - 1; }
    Edge& operator[](int ei) noexcept { return m_e[ei]; }
    const Edge& operator[](int ei) const noexcept { return m_e[ei]; }
    Edge& at(int ei) { return m_e.at(ei); }
    const Edge& at(int ei) const { return m_e.at(ei); }
    auto begin(){ return m_e.begin(); }
    auto end(){ return m_e.end(); }
    auto begin() const { return m_e.begin(); }
    auto end() const { return m_e.end(); }
    bool isUndirected() const noexcept { return m_isUndir; }
    void reverseEdges() noexcept { for(auto& e : m_e) e.reverse(); }
    void contract(int newV, const std::vector<int>& mapping){
        assert(numVertices() == int(mapping.size()));
        for(int i=0; i<numVertices(); i++) assert(0 <= mapping[i] && mapping[i] < newV);
        for(auto& e : m_e){ e.from = mapping[e.from]; e.to = mapping[e.to]; }
        m_n = newV;
    }
    std::vector<Graph> induce(int num, const std::vector<int>& mapping) const {
        int n = numVertices();
        assert(n == int(mapping.size()));
        for(int i=0; i<n; i++) assert(-1 <= mapping[i] && mapping[i] < num);
        std::vector<int> indexV(n), newV(num);
        for(int i=0; i<n; i++) if(mapping[i] >= 0) indexV[i] = newV[mapping[i]]++;
        std::vector<Graph> res; res.reserve(num);
        for(int i=0; i<num; i++) res.emplace_back(newV[i], isUndirected());
        for(auto e : m_e) if(mapping[e.from] == mapping[e.to] && mapping[e.to] >= 0) res[mapping[e.to]].addEdge(indexV[e.from], indexV[e.to]);
        return res;
    }
    CsrArray<int> getEdgeIndexArray(bool undirected) const {
        std::vector<std::pair<int, int>> src;
        src.reserve(numEdges() * (undirected ? 2 : 1));
        for(int i=0; i<numEdges(); i++){
            auto e = operator[](i);
            src.emplace_back(e.from, i);
            if(undirected) src.emplace_back(e.to, i);
        }
        return CsrArray<int>::Construct(numVertices(), src);
    }
    CsrArray<int> getEdgeIndexArray() const { return getEdgeIndexArray(isUndirected()); }
    CsrArray<int> getAdjacencyArray(bool undirected) const {
        std::vector<std::pair<int, int>> src;
        src.reserve(numEdges() * (undirected ? 2 : 1));
        for(auto e : m_e){
            src.emplace_back(e.from, e.to);
            if(undirected) src.emplace_back(e.to, e.from);
        }
        return CsrArray<int>::Construct(numVertices(), src);
    }
    CsrArray<int> getAdjacencyArray() const { return getAdjacencyArray(isUndirected()); }
private:
    int m_n;
    std::vector<Edge> m_e;
    bool m_isUndir;
};

} // namespace nachia
#include <type_traits>

namespace nachia{


template<class S>
class TreeDP{
private:

template<
    class NodeInitializer,
    class RakeFunc,
    class CompressFunc,
    typename std::enable_if_t<std::is_invocable_r_v<S, NodeInitializer, int>, void*> = nullptr,
    typename std::enable_if_t<std::is_invocable_r_v<S, RakeFunc, S, S, int>, void*> = nullptr,
    typename std::enable_if_t<std::is_invocable_r_v<S, CompressFunc, S, int, int>, void*> = nullptr
>
class Inner{
private:
    std::vector<S> low;
    std::vector<S> high;
    std::vector<int> XorEdge;
    std::vector<int> P;
    RakeFunc rake;
    CompressFunc compress;

public:

    // S rake(S a, S b)
    // S compress(S a, int edgeIndex, int newRoot)
    Inner(const Graph& tree, NodeInitializer _node, RakeFunc _rake, CompressFunc _compress)
        : rake(std::move(_rake))
        , compress(std::move(_compress))
    {
        int n = tree.numVertices();
        auto adj = tree.getEdgeIndexArray(true);
        std::vector<S> node; node.reserve(n);
        for(int v=0; v<n; v++) node.push_back(_node(v));
        XorEdge.resize(n-1);
        for(int i=0; i<n-1; i++) XorEdge[i] = tree[i].from ^ tree[i].to;
        std::vector<int> bfs(n, 0);
        int bfsi = 1;
        P.assign(n, -1);
        for(int v : bfs){
            for(int e : adj[v]){
                int w = v ^ XorEdge[e];
                if(P[v] != e){ P[w] = e; bfs[bfsi++] = w; }
            }
        }
        low = node;
        for(int i=n-1; i>=1; i--){
            int w = bfs[i];
            int v = w ^ XorEdge[P[w]];
            low[v] = rake(low[v], compress(low[w], P[w], v), v);
        }
        
        high = node;
        for(int i=0; i<n; i++){
            int v = bfs[i];
            int C = adj[v].size();
            S fold = node[v];
            bool emp = true;
            if(v != 0) fold = rake(compress(high[v], P[v], v), node[v], v);
            for(int ci=C-1; ci>=0; ci--){
                int e = adj[v][ci];
                if(P[v] == e) continue;
                int w = v ^ XorEdge[e];
                high[w] = fold;
                fold = rake(compress(low[w], e, v), fold, v);
            }
            fold = node[v];
            emp = true;
            for(int ci=0; ci<C; ci++){
                int e = adj[v][ci];
                if(P[v] == e) continue;
                int w = v ^ XorEdge[e];
                if(!emp) high[w] = rake(fold, high[w], v);
                auto nxlow = compress(low[w], e, v);
                fold = emp ? nxlow : rake(nxlow, fold, v);
                emp = false;
            }
        }
    }

    int edgeBetween(int u, int v){
        if(P[u] >= 0 && XorEdge[P[u]] == (u^v)) return P[u];
        return P[v];
    }

    S getAtVtx(int i){
        if(i == 0) return low[i];
        return rake(compress(high[i], P[i], i), low[i], i);
    }
    S getAtEdge(int root, int edge){
        if(P[root] == edge) return low[root];
        return high[root ^ XorEdge[edge]];
    }
};

public:

// S node(int root)
// S rake(S a, S b, int root)
// S compress(S a, int edgeIndex, int newRoot)
template<
    class NodeInitializer,
    class RakeFunc,
    class CompressFunc
>
static auto Solver(
    const Graph& tree,
    NodeInitializer node,
    RakeFunc rake,
    CompressFunc compress)
{
    return Inner<NodeInitializer, RakeFunc, CompressFunc>(
        tree, std::move(node), std::move(rake), std::move(compress));
}

};

} // namespace nachia

namespace nachia{

// ax + by = gcd(a,b)
// return ( x, - )
std::pair<long long, long long> ExtGcd(long long a, long long b){
    long long x = 1, y = 0;
    while(b){
        long long u = a / b;
        std::swap(a-=b*u, b);
        std::swap(x-=y*u, y);
    }
    return std::make_pair(x, a);
}

} // namespace nachia

namespace nachia{

template<unsigned int MOD>
struct StaticModint{
private:
    using u64 = unsigned long long;
    unsigned int x;
public:

    using my_type = StaticModint;
    template< class Elem >
    static Elem safe_mod(Elem x){
        if(x < 0){
            if(0 <= x+MOD) return x + MOD;
            return MOD - ((-(x+MOD)-1) % MOD + 1);
        }
        return x % MOD;
    }

    StaticModint() : x(0){}
    StaticModint(const my_type& a) : x(a.x){}
    StaticModint& operator=(const my_type&) = default;
    template< class Elem >
    StaticModint(Elem v) : x(safe_mod(v)){}
    unsigned int operator*() const noexcept { return x; }
    my_type& operator+=(const my_type& r) noexcept { auto t = x + r.x; if(t >= MOD) t -= MOD; x = t; return *this; }
    my_type operator+(const my_type& r) const noexcept { my_type res = *this; return res += r; }
    my_type& operator-=(const my_type& r) noexcept { auto t = x + MOD - r.x; if(t >= MOD) t -= MOD; x = t; return *this; }
    my_type operator-(const my_type& r) const noexcept { my_type res = *this; return res -= r; }
    my_type operator-() const noexcept { my_type res = *this; res.x = ((res.x == 0) ? 0 : (MOD - res.x)); return res; }
    my_type& operator*=(const my_type& r)noexcept { x = (u64)x * r.x % MOD; return *this; }
    my_type operator*(const my_type& r) const noexcept { my_type res = *this; return res *= r; }
    my_type pow(unsigned long long i) const noexcept {
        my_type a = *this, res = 1;
        while(i){ if(i & 1){ res *= a; } a *= a; i >>= 1; }
        return res;
    }
    my_type inv() const { return my_type(ExtGcd(x, MOD).first); }
    unsigned int val() const noexcept { return x; }
    static constexpr unsigned int mod() { return MOD; }
    static my_type raw(unsigned int val) noexcept { auto res = my_type(); res.x = val; return res; }
    my_type& operator/=(const my_type& r){ return operator*=(r.inv()); }
    my_type operator/(const my_type& r) const { return operator*(r.inv()); }
};

} // namespace nachia
using Modint = nachia::StaticModint<998244353>;

void testcase(){
    i64 N; cin >> N;
    struct V{ Modint c, x, z; };

    auto tree = nachia::Graph::Input(cin, N, true, N-1, 1);
    auto cmpr = [](V u, int, int) -> V {
            u.z += 1;
            u.c += u.z * u.z;
            return {
                u.c + u.x,
                u.x,
                u.z
            };
        };
    auto dp = nachia::TreeDP<V>::Solver(tree,
        [](int) -> V { return {0,0,0}; },
        [](V u, V v, int) -> V{ return { u.c+v.c, u.x+v.x, u.z+v.z }; },
        cmpr);
    
    Modint ans = 0;
    //rep(v,N) cout << dp.getAtVtx(v).c.val() << " ";
    //cout << endl;
    auto inc = tree.getEdgeIndexArray();
    rep(v,N){
        auto fv = dp.getAtVtx(v);
        for(auto e : inc[v]){
            auto fe = dp.getAtEdge(tree[e].xorval() ^ v, e);
            fe = cmpr(fe, 0, 0);
            //cout << "e = " << e << " , v = " << v << " , c = " << fe.c.val() << endl;
            ans += fe.c * (Modint(N) - fe.z) * (Modint(N) - fe.z);
        }
    }
    rep(v,N){
        for(auto e : inc[v]) if(v < (tree[e].xorval() ^ v)){
            auto fe = dp.getAtEdge(tree[e].xorval() ^ v, e);
            Modint z = fe.z + 1;
            ans -= z * z * (Modint(N) - z) * (Modint(N) - z);
        }
    }
    //cout << ans.val() << '\n';
    ans /= Modint(N*(N-1)/2);
    ans /= Modint(N*(N-1)/2);
    cout << ans.val() << '\n';
}

int main(){
    ios::sync_with_stdio(false); cin.tie(nullptr);
    int T; cin >> T;
    rep(t,T) testcase();
    return 0;
}

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

详细

Test #1:

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

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: 2ms
memory: 3532kb

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: 16ms
memory: 3584kb

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: 260ms
memory: 12272kb

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: 254ms
memory: 12120kb

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: 253ms
memory: 12280kb

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: 234ms
memory: 12192kb

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: 253ms
memory: 12176kb

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: 257ms
memory: 12272kb

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: 245ms
memory: 12208kb

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: 273ms
memory: 12124kb

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: 3524kb

input:

1
2
1 2

output:

1

result:

ok single line: '1'

Extra Test:

score: 0
Extra Test Passed