QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#706715#9526. Subsequence Countingucup-team5243AC ✓300ms46140kbC++1715.9kb2024-11-03 13:05:532024-11-03 13:05:53

Judging History

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

  • [2024-11-03 13:05:53]
  • 评测
  • 测评结果:AC
  • 用时:300ms
  • 内存:46140kb
  • [2024-11-03 13:05:53]
  • 提交

answer

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using i64 = long long;
#define rep(i,n) for(int i=0; i<int(n); i++)
using namespace std;

#include <cassert>
#include <utility>

namespace nachia{

template<class Elem>
struct MatrixModulo{
private:
    int h;
    int w;
    std::vector<Elem> elems;
public:
    
    MatrixModulo(int new_h=0, int new_w=0)
        : h(new_h), w(new_w), elems(h*w, Elem(0)){}
    MatrixModulo(const MatrixModulo &) = default;
    int numRow() const { return h; }
    int numColumn() const { return w; }
    int height() const { return numRow(); }
    int width() const { return numColumn(); }
    typename std::vector<Elem>::iterator operator[](int y){ return elems.begin() + (y*w); }
    typename std::vector<Elem>::const_iterator operator[](int y) const { return elems.begin() + (y*w); }
    static MatrixModulo Identity(int n){
        auto res = MatrixModulo(n,n);
        for(int i=0; i<n; i++) res[i][i]=Elem(1);
        return res;
    }
    MatrixModulo transposed() const {
        auto res = MatrixModulo(w,h);
        for(int i=0; i<h; i++) for(int j=0; j<w; j++) res[j][i] = elems[i*w+j];
        return res;
    }
    void swapColumns(int x1, int x2){
        assert(0 <= x1 && x1 < numColumn());
        assert(0 <= x2 && x2 < numColumn());
        for(int y=0; y<numRow(); y++) std::swap((*this)[y][x1], (*this)[y][x2]);
    }
    void swapRows(int y1, int y2){
        assert(0 <= y1 && y1 < numRow());
        assert(0 <= y2 && y2 < numRow());
        for(int x=0; x<numColumn(); x++) std::swap((*this)[y1][x], (*this)[y2][x]);
    }
    MatrixModulo operator*(const MatrixModulo& r) const {
        assert(width() == r.height());
        auto res = MatrixModulo(h, r.w);
        for(int i=0; i<h; i++) for(int j=0; j<w; j++) for(int k=0; k<r.w; k++){
            res[i][k] += (*this)[i][j] * r[j][k];
        }
        return res;
    }
    std::vector<Elem> operator*(const std::vector<Elem>& r) const {
        assert(width() == int(r.size()));
        auto res = std::vector<Elem>(h);
        for(int i=0; i<h; i++) for(int j=0; j<w; j++){
            res[i] += (*this)[i][j] * r[j];
        }
        return res;
    }
    Elem det() const {
        assert(height() == width());
        MatrixModulo g = *this;
        Elem ans = 1;
        for(int i=0; i<h; i++){
            int tg = -1;
            for(int j=i; j<h; j++){ if(g[j][i].val() != 0) tg = j; }
            if(tg == -1) return 0;
            if(tg != i) ans = -ans;
            for(int j=0; j<h; j++) std::swap(g[i][j], g[tg][j]);
            tg = i;
            ans *= g[i][i];
            Elem const_coeff = g[i][i].inv();
            for(int j=0; j<h; j++) g[i][j] *= const_coeff;
            for(int j=i+1; j<h; j++) for(int k=h-1; k>=i; k--) g[j][k] -= g[j][i] * g[i][k];
        }
        return ans;
    }
    int rank() const {
        if(height() == 0 || width() == 0) return 0;
        MatrixModulo g = *this;
        int y = 0;
        for(int d=0; d<w; d++){
            if(y == h) break;
            int tg = -1;
            for(int i=y; i<h; i++){ if(g[i][d].val() != 0){ tg = i; break; } }
            if(tg == -1) continue;
            for(int j=d; j<w; j++) std::swap(g[y][j], g[tg][j]);
            tg = y;
            Elem const_coeff = g[y][d].inv();
            for(int j=d; j<w; j++) g[y][j] *= const_coeff;
            for(int i=y+1; i<h; i++) for(int j=w-1; j>=d; j--) g[i][j] -= g[i][d] * g[y][j];
            y++;
        }
        return y;
    }
    MatrixModulo pow(unsigned long long i){
        auto a = *this;
        auto res = Identity(height());
        while(i){
            if(i%2) res = res * a;
            a = a * a; i /= 2;
        }
        return res;
    }
};


} // 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

namespace nachia{

template<
    class F,
    F composition(const F& f, const F& x)
>
struct DualSegtree {

    struct Node { F f; bool propagated; };
    int N;
    int logN;
    std::vector<Node> A;

    void mapf(Node& a, F f) {
        a.propagated = false;
        a.f = composition(f, a.f);
    }
    void spread(int i) {
        if(A[i].propagated || !(i < N)) return;
        mapf(A[i*2], A[i].f);
        mapf(A[i*2+1], A[i].f);
        A[i] = A[0];
    }

    DualSegtree(int n, F id) {
        N=1; logN=0;
        while(N<n){ N *= 2; logN++; }
        A.assign(N*2, { id, true });
    }
    DualSegtree(const std::vector<F>& a, F id) : DualSegtree(a.size(), id) {
        for(int i=0; i<a.size(); i++){ A[i+N].f = a[i]; A[i+N].propagated = false; }
    }

    void clear(int p) {
        p += N;
        for(int d=logN; d; d--) spread(p >> d);
        A[p] = A[0];
    }
    F get(int p){
        p += N;
        for(int d=logN; d; d--) spread(p >> d);
        return A[p].f;
    }
    void apply(int l, int r, F f){
        if(!(l < r)) return;
        if(l == 0 && r == N){ mapf(A[1], f); return; }
        l += N; r += N;
        for(int d=logN; d; d--){
            if((l >> d) << d != l) spread(l >> d);
            if((r >> d) << d != r) spread(r >> d);
        }
        while(l < r){
            if(l&1){ mapf(A[l++], f); } l /= 2;
            if(r&1){ mapf(A[--r], f); } r /= 2;
        }
    }
    void apply(int p, F f){
        p += N;
        for(int d=logN; d; d--) spread(p >> d);
        mapf(A[p], f);
    }
};

} // namespace nachia;

#include <iterator>
#include <functional>

template<class Elem> struct vec;

template<class Iter>
struct seq_view{
    using Ref = typename std::iterator_traits<Iter>::reference;
    using Elem = typename std::iterator_traits<Iter>::value_type;
    Iter a, b;
    Iter begin() const { return a; }
    Iter end() const { return b; }
    int size() const { return (int)(b-a); }
    seq_view(Iter first, Iter last) : a(first), b(last) {}
    seq_view sort() const { std::sort(a, b); return *this; }
    Ref& operator[](int x) const { return *(a+x); }
    template<class F = std::less<Elem>, class ret = vec<int>> ret sorti(F f = F()) const {
        ret x(size()); for(int i=0; i<size(); i++) x[i] = i;
        x().sort([&](int l, int r){ return f(a[l],a[r]); });
        return x;
    }
    template<class ret = vec<Elem>> ret col() const { return ret(begin(), end()); }
    template<class ret = vec<Elem>> ret cumsum() const {
        auto res = ret(size() + 1, Elem(0));
        for(int i=0; i<size(); i++) res[i+1] = res[i] + operator[](i);
        return res;
    }
    template<class F = std::equal_to<Elem>, class ret = vec<std::pair<Elem, int>>>
    ret rle(F eq = F()) const {
        auto x = ret();
        for(auto& a : (*this)){
            if(x.size() == 0 || !eq(x[x.size()-1].first, a)) x.emp(a, 1); else x[x.size()-1].second++;
        } return x;
    }
    template<class F> seq_view sort(F f) const { std::sort(a, b, f); return *this; }
    Iter uni() const { return std::unique(a, b); }
    Iter lb(const Elem& x) const { return std::lower_bound(a, b, x); }
    Iter ub(const Elem& x) const { return std::upper_bound(a, b, x); }
    int lbi(const Elem& x) const { return lb(x) - a; }
    int ubi(const Elem& x) const { return ub(x) - a; }
    seq_view bound(const Elem& l, const Elem& r) const { return { lb(l), lb(r) }; }
    template<class F> Iter lb(const Elem& x, F f) const { return std::lower_bound(a, b, x, f); }
    template<class F> Iter ub(const Elem& x, F f) const { return std::upper_bound(a, b, x, f); }
    template<class F> Iter when_true_to_false(F f) const {
        if(a == b) return a;
        return std::lower_bound(a, b, *a,
            [&](const Elem& x, const Elem&){ return f(x); });
    }
    seq_view same(Elem x) const { return { lb(x), ub(x) }; }
    template<class F> auto map(F f) const {
        vec<typename Iter::value_type> r;
        for(auto& x : *this) r.emp(f(x));
        return r;
    }
    Iter max() const { return std::max_element(a, b); }
    Iter min() const { return std::min_element(a, b); }
    template<class F = std::less<Elem>>
    Iter min(F f) const { return std::min_element(a, b, f); }
    seq_view rev() const { std::reverse(a, b); return *this; }
};

template<class Elem>
struct vec {
public:
    using Base = typename std::vector<Elem>;
    using Iter = typename Base::iterator;
    using CIter = typename Base::const_iterator;
    using View = seq_view<Iter>;
    using CView = seq_view<CIter>;

    vec(){}
    explicit vec(int n, const Elem& value = Elem()) : a(0<n?n:0, value) {}
    template <class I2> vec(I2 first, I2 last) : a(first, last) {}
    vec(std::initializer_list<Elem> il) : a(std::move(il)) {}
    vec(Base b) : a(std::move(b)) {}
    operator Base() const { return a; }

    Iter begin(){ return a.begin(); }
    CIter begin() const { return a.begin(); }
    Iter end(){ return a.end(); }
    CIter end() const { return a.end(); }
    int size() const { return a.size(); }
    bool empty() const { return a.empty(); }
    Elem& back(){ return a.back(); }
    const Elem& back() const { return a.back(); }
    vec& sortuni(){ (*this)().sort(); a.erase((*this)().uni(), end()); return *this; }
    vec sortunied(){ vec x = *this; x.sortuni(); return x; }
    Iter operator()(int x){ return a.begin() + x; }
    CIter operator()(int x) const { return a.begin() + x; }
    View operator()(int l, int r){ return { (*this)(l), (*this)(r) }; }
    CView operator()(int l, int r) const { return { (*this)(l), (*this)(r) }; }
    View operator()(){ return (*this)(0,size()); }
    CView operator()() const { return (*this)(0,size()); }
    Elem& operator[](int x){ return a[x]; }
    const Elem& operator[](int x) const { return a[x]; }
    Base& operator*(){ return a; }
    const Base& operator*() const { return a; }
    vec& push(Elem args){
        a.push_back(std::move(args));
        return *this;
    }
    template<class... Args>
    vec& emp(Args &&... args){
        a.emplace_back(std::forward<Args>(args) ...);
        return *this;
    }
    template<class Range>
    vec& app(Range& x){ for(auto& v : x){ emp(v); } return *this; }
    Elem pop(){ Elem x = std::move(a.back()); a.pop_back(); return x; }
    void resize(int sz){ a.resize(sz); }
    void reserve(int sz){ a.reserve(sz); }
    bool operator==(const vec& r) const { return a == r.a; }
    bool operator!=(const vec& r) const { return a != r.a; }
    bool operator<(const vec& r) const { return a < r.a; }
    bool operator<=(const vec& r) const { return a <= r.a; }
    bool operator>(const vec& r) const { return a > r.a; }
    bool operator>=(const vec& r) const { return a >= r.a; }
    vec<vec<Elem>> pile(int n) const { return vec<vec<Elem>>(n, *this); }
    template<class F> vec& filter(F f){
        int p = 0;
        for(auto& x : a) if(f(x)) std::swap(a[p++],x);
        resize(p); return *this;
    }
    vec& operator+=(const vec& r){ return app(r); }
    vec operator+(const vec& r) const { vec x = *this; x += r; return x; }
    vec operator*(int t) const { vec res; while(t--){ res += *this; } return res; }
private: Base a;
};

template<class IStr, class U, class T>
IStr& operator>>(IStr& is, vec<std::pair<U,T>>& v){ for(auto& x:v){ is >> x.first >> x.second; } return is; }
template<class IStr, class T>
IStr& operator>>(IStr& is, vec<T>& v){ for(auto& x:v){ is >> x; } return is; }
template<class OStr, class T>
OStr& operator<<(OStr& os, const vec<T>& v){
    for(int i=0; i<v.size(); i++){
        if(i){ os << ' '; } os << v[i];
    } return os;
}
template<class OStr, class U, class T>
OStr& operator<<(OStr& os, const vec<std::pair<U,T>>& v){
    for(int i=0; i<v.size(); i++){
        if(i){ os << ' '; } os << '(' << v[i].first << ',' << v[i].second << ')';
    } return os;
}
using Modint = nachia::StaticModint<998244353>;
using Mat = nachia::MatrixModulo<Modint>;

Mat opmat(const Mat& f, const Mat& x){ return x * f; }

Mat solve(int X, i64 L, i64 d, vec<pair<Mat, i64>> rle){
    if(L == 1){
        return rle[0].first;
    }
    if(d*2 > L){
        vec<pair<Mat,i64>> nxrle(1, {rle[0].first,1});
        nxrle += rle().rev().col();
        nxrle.back().second -= 1;
        if(nxrle.back().second == 0) nxrle.pop();
        return solve(X, L, L-d, move(nxrle));
    }
    vec<i64> chp;
    chp.push(0);
    for(auto& [u,v] : rle) chp.push(chp.back() + v);
    vec<i64> chp_ds = chp().map([&](i64 x){ return x % d; }).sortunied();
    i64 ds_sz = chp_ds.size();
    chp_ds.push(d);
    nachia::DualSegtree<Mat, opmat> ds(ds_sz, Mat::Identity(X));
    rep(i,rle.size()){
        i64 l = chp[i];
        i64 r = chp[i+1];
        i64 lpds = chp_ds().lbi(l%d);
        i64 rpds = chp_ds().lbi(r%d);
        if(r/d == l/d){
            ds.apply(lpds, rpds, rle[i].first);
        } else {
            ds.apply(lpds, ds_sz, rle[i].first);
            ds.apply(0, ds_sz, rle[i].first.pow(r/d-l/d-1));
            ds.apply(0, rpds, rle[i].first);
        }
    }
    vec<pair<Mat, i64>> nxrle;
    rep(i,ds_sz) nxrle.push({ ds.get(i), chp_ds[i+1] - chp_ds[i] });
    return solve(X, d, d-L%d, move(nxrle));
}

void testcase(){
    i64 N, M, K, L; cin >> N >> M >> K >> L;
    vec<i64> A(M); cin >> A;
    vec<pair<Mat, i64>> rle;
    rep(i,N){
        i64 a,b; cin >> a >> b;
        Mat m = Mat::Identity(M+1);
        rep(j,M) if(A[j] == b) m[j][j+1] = 1;
        rle.push({ m, a });
    }
    i64 d = nachia::ExtGcd(K, L).first;
    if(d < 0) d += L;
    auto mp = solve(M+1, L, d, rle);
    auto ans = mp[0][M];
    cout << ans.val() << '\n';
}

int main(){
    ios::sync_with_stdio(false); cin.tie(nullptr);
    testcase();
    return 0;
}

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

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

4 2 17 27
3 1
10 3
6 1
10 3
1 1

output:

76

result:

ok single line: '76'

Test #2:

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

input:

5 3 1789 15150
555 718 726
72 555
1029 718
5807 726
1002 718
7240 555

output:

390415327

result:

ok single line: '390415327'

Test #3:

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

input:

1 1 1 1000000000
1000
1000000000 1000

output:

1755647

result:

ok single line: '1755647'

Test #4:

score: 0
Accepted
time: 125ms
memory: 7440kb

input:

1999 10 999999999 1000000000
944 901 986 915 979 988 947 999 969 946
198832 985
235662 982
367137 938
219700 949
166086 906
488084 905
891250 984
243743 971
253382 987
181971 935
2382 948
462701 981
4681 925
113363 916
119397 921
337742 982
427128 921
285959 986
197975 978
140753 907
167150 974
4576...

output:

211590728

result:

ok single line: '211590728'

Test #5:

score: 0
Accepted
time: 250ms
memory: 29872kb

input:

2000 10 207560381 499173270
382 246 825 688 810 66 333 717 903 444
242322 825
303194 246
266460 66
133293 444
499376 688
175256 333
260041 717
202138 444
84931 688
353443 825
137750 382
333307 66
450617 810
27484 246
349436 717
45179 444
146073 810
107846 717
416816 246
255378 825
433826 688
273215 ...

output:

686508296

result:

ok single line: '686508296'

Test #6:

score: 0
Accepted
time: 256ms
memory: 30564kb

input:

2000 10 261469558 497769147
990 38 906 66 751 758 913 137 187 724
253600 187
50741 758
58978 724
358384 751
258090 137
423638 990
121415 137
162742 758
93886 724
279287 913
392322 38
495784 758
195957 906
47122 913
87008 751
17599 66
22711 38
58373 724
116467 990
495160 724
471978 758
24585 724
3064...

output:

989869378

result:

ok single line: '989869378'

Test #7:

score: 0
Accepted
time: 286ms
memory: 39144kb

input:

2000 10 321529781 512205698
105 216 706 872 564 639 983 85 153 396
319747 706
46163 639
134011 983
293977 153
176149 983
214154 216
45308 706
270691 396
491463 216
207041 639
118670 983
207549 639
430999 706
294263 872
137031 983
270440 85
480934 153
56566 85
462772 872
53771 639
455400 105
496369 8...

output:

43580469

result:

ok single line: '43580469'

Test #8:

score: 0
Accepted
time: 271ms
memory: 35056kb

input:

2000 10 445061541 492744658
724 778 518 949 399 846 571 290 26 719
95511 399
430323 571
269833 399
378561 778
247054 719
449770 571
452091 719
31296 724
107940 26
330171 724
459597 719
454361 949
71045 724
332444 290
165408 518
123580 719
352964 518
187501 571
206988 778
95308 26
351267 846
22564 77...

output:

616245282

result:

ok single line: '616245282'

Test #9:

score: 0
Accepted
time: 270ms
memory: 35068kb

input:

2000 10 82854895 499384144
533 699 969 632 566 827 967 951 475 208
67174 699
373746 475
43811 827
314087 566
487694 632
150698 475
411781 967
289698 475
202029 967
137762 208
21408 967
185906 632
322311 208
111984 967
219226 533
137525 632
194071 969
415968 951
495074 566
384006 699
75700 533
319248...

output:

325482724

result:

ok single line: '325482724'

Test #10:

score: 0
Accepted
time: 274ms
memory: 36288kb

input:

2000 10 68884267 496908428
911 83 655 38 43 219 401 868 444 362
373884 868
301252 43
71730 83
152590 444
495048 43
220127 868
42667 83
152766 401
295425 911
156010 868
194248 655
258290 362
495166 868
359444 38
228210 83
236963 911
373081 401
219519 38
462869 444
132749 83
126049 362
233585 444
4346...

output:

618545771

result:

ok single line: '618545771'

Test #11:

score: 0
Accepted
time: 262ms
memory: 32724kb

input:

2000 10 296584211 502951247
749 916 549 440 155 770 822 335 591 623
391756 916
403204 335
301242 591
162665 440
377091 623
24972 155
312374 916
171135 623
224221 822
408433 623
157158 822
55740 623
425392 591
37832 916
298703 440
119707 591
101034 749
125274 770
6109 440
78022 916
118181 591
325648 ...

output:

601538508

result:

ok single line: '601538508'

Test #12:

score: 0
Accepted
time: 281ms
memory: 40284kb

input:

2000 10 166200743 502716830
533 628 821 905 330 77 520 46 735 156
96144 46
47146 735
295659 905
171260 156
458468 735
6371 77
76608 330
218288 533
67674 821
140084 520
397185 628
439197 520
466128 77
489650 628
280149 77
235961 821
314891 628
285703 821
456792 533
401436 520
415332 905
335720 735
46...

output:

714220375

result:

ok single line: '714220375'

Test #13:

score: 0
Accepted
time: 280ms
memory: 35500kb

input:

2000 10 494777999 498279924
923 543 789 607 512 597 885 462 759 380
472583 543
70 885
281396 597
31713 885
294039 512
495370 607
338181 380
344775 597
457867 607
362253 543
457963 607
431365 597
489637 923
104753 380
49184 923
452889 543
46665 923
326714 462
332474 923
92685 543
293550 380
223152 51...

output:

867398339

result:

ok single line: '867398339'

Test #14:

score: 0
Accepted
time: 255ms
memory: 24476kb

input:

2000 10 145282979 489563793
128 159 828 90 300 425 977 189 186 533
414271 425
461949 90
173115 300
188953 186
147473 90
361413 300
473121 828
418946 128
449971 828
114925 159
102198 828
420347 300
56815 533
334139 90
384997 977
84207 90
202111 977
318891 90
123614 189
42891 300
48668 128
354240 300
...

output:

642735856

result:

ok single line: '642735856'

Test #15:

score: 0
Accepted
time: 260ms
memory: 27052kb

input:

2000 10 73726788 493104227
599 622 889 670 210 778 374 327 308 768
358274 622
227891 778
375954 768
466366 778
411108 374
347592 599
265078 622
174121 327
355147 374
167867 599
46552 374
10552 778
114210 622
331772 768
302246 599
24244 778
91362 622
130440 889
395599 599
394176 308
81768 374
83741 3...

output:

550082279

result:

ok single line: '550082279'

Test #16:

score: 0
Accepted
time: 281ms
memory: 44520kb

input:

2000 10 152855876 496805251
413 309 740 266 721 715 21 857 206 62
209597 62
330590 857
51271 413
168907 721
473281 21
413081 266
196578 721
219198 21
396781 715
53173 206
200590 266
302416 740
15732 721
414567 740
163152 715
138244 413
158638 62
329207 857
16320 740
246121 21
187905 721
262236 62
90...

output:

937550461

result:

ok single line: '937550461'

Test #17:

score: 0
Accepted
time: 267ms
memory: 35908kb

input:

2000 10 370831065 494204662
382 47 32 870 479 272 956 381 367 794
429604 382
154570 479
61831 382
492147 956
327498 272
427937 381
286339 479
468675 382
197165 479
83760 794
37841 32
283143 870
275120 272
76888 382
438285 381
281443 47
238356 32
353474 794
112098 870
380747 272
161610 479
393113 956...

output:

609619628

result:

ok single line: '609619628'

Test #18:

score: 0
Accepted
time: 264ms
memory: 24736kb

input:

2000 10 200672622 505250813
878 452 69 924 341 370 146 95 189 859
34803 95
36193 859
154299 146
211738 189
69700 859
436922 452
499998 341
338104 69
478735 452
489784 146
180937 189
488456 452
196359 95
126209 924
188052 452
321395 924
189009 859
87452 189
255497 878
43661 341
112027 146
33154 69
44...

output:

56885687

result:

ok single line: '56885687'

Test #19:

score: 0
Accepted
time: 295ms
memory: 42012kb

input:

2000 10 72438867 486841996
394 384 548 742 861 766 155 863 283 525
347582 283
399712 861
451073 394
30203 155
477852 742
146217 861
256320 548
448082 384
104663 155
210939 742
351868 525
253138 548
271447 283
238297 525
464783 394
148139 861
354538 384
260219 155
243223 548
498139 525
291494 863
341...

output:

788937438

result:

ok single line: '788937438'

Test #20:

score: 0
Accepted
time: 275ms
memory: 39788kb

input:

2000 10 12876147 507434473
669 614 751 903 152 518 761 303 63 275
385798 669
260649 275
314982 761
84162 614
324086 669
275099 903
22416 63
216034 669
395106 751
149779 63
474229 303
434728 518
313498 903
9711 152
365631 275
177888 669
496592 152
245728 614
394926 152
10600 63
471425 751
289977 761
...

output:

63922908

result:

ok single line: '63922908'

Test #21:

score: 0
Accepted
time: 300ms
memory: 41656kb

input:

2000 10 240752091 504760936
128 816 447 424 211 177 102 675 680 898
270030 128
30581 177
239215 211
69720 102
285784 447
172262 675
362194 898
308818 177
257890 211
175781 102
352094 816
11391 211
19385 447
375117 177
201000 128
262442 675
237421 102
100994 211
102985 128
85249 177
496945 675
444348...

output:

227952735

result:

ok single line: '227952735'

Test #22:

score: 0
Accepted
time: 293ms
memory: 46140kb

input:

2000 10 237980579 505987937
892 269 84 481 972 522 978 105 450 479
252830 105
189317 450
56029 105
262872 522
279860 978
388378 269
84117 522
131970 105
422569 269
331506 479
96166 450
324575 84
144671 450
140397 978
453063 105
220994 84
150678 450
476768 105
330178 84
296397 105
421757 481
5724 269...

output:

468458072

result:

ok single line: '468458072'

Test #23:

score: 0
Accepted
time: 282ms
memory: 38684kb

input:

2000 10 272341843 508681404
116 160 499 709 151 622 443 51 628 184
41291 628
415609 116
126094 709
36858 116
200281 151
249818 160
126135 622
161783 116
354229 160
378133 709
14269 160
72260 499
217499 628
492068 184
13814 116
206702 499
141318 628
489670 116
347538 184
337073 499
257293 622
234135 ...

output:

5538813

result:

ok single line: '5538813'

Test #24:

score: 0
Accepted
time: 274ms
memory: 33648kb

input:

2000 10 356002797 504473516
719 731 800 845 438 24 89 893 91 616
209787 800
11719 89
184449 438
63108 91
331474 719
368355 438
286223 893
100984 91
308890 719
364976 91
244872 845
303525 731
205243 91
147458 800
216532 89
497673 800
280025 719
456560 91
305453 89
254073 24
48745 893
460814 438
27832...

output:

986718855

result:

ok single line: '986718855'

Test #25:

score: 0
Accepted
time: 275ms
memory: 37988kb

input:

2000 10 127175740 494689853
275 190 710 754 848 8 273 837 501 733
440135 8
333895 501
210229 190
88530 273
316662 190
42142 837
163058 8
155823 275
206862 273
23687 837
217900 733
269239 501
463533 710
489832 501
296607 8
364225 501
361620 190
69562 754
220522 273
8424 754
447614 848
292734 501
3145...

output:

297118416

result:

ok single line: '297118416'

Test #26:

score: 0
Accepted
time: 271ms
memory: 38684kb

input:

2000 10 183513063 506311438
833 936 339 149 842 216 182 627 896 257
275174 216
238462 627
100861 896
135959 182
230471 842
273524 149
403111 936
365497 896
331581 149
154269 257
225488 936
458484 339
13236 627
261000 216
6749 339
46847 833
341899 149
46436 257
462934 339
149769 216
330206 257
133342...

output:

23998350

result:

ok single line: '23998350'

Extra Test:

score: 0
Extra Test Passed