QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#250167#7621. Palindromeucup-team1134AC ✓4283ms164936kbC++1738.9kb2023-11-12 22:19:542023-11-25 19:25:53

Judging History

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

  • [2023-11-25 19:25:53]
  • 自动重测本题所有获得100分的提交记录
  • 测评结果:AC
  • 用时:4283ms
  • 内存:164936kb
  • [2023-11-12 22:19:55]
  • 评测
  • 测评结果:100
  • 用时:4702ms
  • 内存:164928kb
  • [2023-11-12 22:19:54]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return true; } return false; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return true; } return false; }
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define mp make_pair
#define si(x) int(x.size())
const int mod1=998244353,mod2=1000000009,MAX=500005,INF=1<<30;

//https://judge.yosupo.jp/submission/41769

#pragma once
#include <algorithm>
#include <cassert>
#include <numeric>
#include <string>
#include <vector>

// CUT begin
// Suffix array algorithms from AtCoder Library
// Document: <https://atcoder.github.io/ac-library/master/document_ja/string.html>
namespace internal {

std::vector<int> sa_naive(const std::vector<int>& s) {
    int n = int(s.size());
    std::vector<int> sa(n);
    std::iota(sa.begin(), sa.end(), 0);
    std::sort(sa.begin(), sa.end(), [&](int l, int r) {
        if (l == r) return false;
        while (l < n && r < n) {
            if (s[l] != s[r]) return s[l] < s[r];
            l++, r++;
        }
        return l == n;
    });
    return sa;
}

std::vector<int> sa_doubling(const std::vector<int>& s) {
    int n = int(s.size());
    std::vector<int> sa(n), rnk = s, tmp(n);
    std::iota(sa.begin(), sa.end(), 0);
    for (int k = 1; k < n; k *= 2) {
        auto cmp = [&](int x, int y) {
            if (rnk[x] != rnk[y]) return rnk[x] < rnk[y];
            int rx = x + k < n ? rnk[x + k] : -1;
            int ry = y + k < n ? rnk[y + k] : -1;
            return rx < ry;
        };
        std::sort(sa.begin(), sa.end(), cmp);
        tmp[sa[0]] = 0;
        for (int i = 1; i < n; i++) { tmp[sa[i]] = tmp[sa[i - 1]] + (cmp(sa[i - 1], sa[i]) ? 1 : 0); }
        std::swap(tmp, rnk);
    }
    return sa;
}

// SA-IS, linear-time suffix array construction
// Reference:
// G. Nong, S. Zhang, and W. H. Chan,
// Two Efficient Algorithms for Linear Time Suffix Array Construction
template <int THRESHOLD_NAIVE = 10, int THRESHOLD_DOUBLING = 40> std::vector<int> sa_is(const std::vector<int>& s, int upper) {
    int n = int(s.size());
    if (n == 0) return {};
    if (n == 1) return {0};
    if (n == 2) {
        if (s[0] < s[1]) {
            return {0, 1};
        } else {
            return {1, 0};
        }
    }
    if (n < THRESHOLD_NAIVE) { return sa_naive(s); }
    if (n < THRESHOLD_DOUBLING) { return sa_doubling(s); }

    std::vector<int> sa(n);
    std::vector<bool> ls(n);
    for (int i = n - 2; i >= 0; i--) { ls[i] = (s[i] == s[i + 1]) ? ls[i + 1] : (s[i] < s[i + 1]); }
    std::vector<int> sum_l(upper + 1), sum_s(upper + 1);
    for (int i = 0; i < n; i++) {
        if (!ls[i]) {
            sum_s[s[i]]++;
        } else {
            sum_l[s[i] + 1]++;
        }
    }
    for (int i = 0; i <= upper; i++) {
        sum_s[i] += sum_l[i];
        if (i < upper) sum_l[i + 1] += sum_s[i];
    }

    auto induce = [&](const std::vector<int>& lms) {
        std::fill(sa.begin(), sa.end(), -1);
        std::vector<int> buf(upper + 1);
        std::copy(sum_s.begin(), sum_s.end(), buf.begin());
        for (auto d : lms) {
            if (d == n) continue;
            sa[buf[s[d]]++] = d;
        }
        std::copy(sum_l.begin(), sum_l.end(), buf.begin());
        sa[buf[s[n - 1]]++] = n - 1;
        for (int i = 0; i < n; i++) {
            int v = sa[i];
            if (v >= 1 && !ls[v - 1]) { sa[buf[s[v - 1]]++] = v - 1; }
        }
        std::copy(sum_l.begin(), sum_l.end(), buf.begin());
        for (int i = n - 1; i >= 0; i--) {
            int v = sa[i];
            if (v >= 1 && ls[v - 1]) { sa[--buf[s[v - 1] + 1]] = v - 1; }
        }
    };

    std::vector<int> lms_map(n + 1, -1);
    int m = 0;
    for (int i = 1; i < n; i++) {
        if (!ls[i - 1] && ls[i]) { lms_map[i] = m++; }
    }
    std::vector<int> lms;
    lms.reserve(m);
    for (int i = 1; i < n; i++) {
        if (!ls[i - 1] && ls[i]) { lms.push_back(i); }
    }

    induce(lms);

    if (m) {
        std::vector<int> sorted_lms;
        sorted_lms.reserve(m);
        for (int v : sa) {
            if (lms_map[v] != -1) sorted_lms.push_back(v);
        }
        std::vector<int> rec_s(m);
        int rec_upper = 0;
        rec_s[lms_map[sorted_lms[0]]] = 0;
        for (int i = 1; i < m; i++) {
            int l = sorted_lms[i - 1], r = sorted_lms[i];
            int end_l = (lms_map[l] + 1 < m) ? lms[lms_map[l] + 1] : n;
            int end_r = (lms_map[r] + 1 < m) ? lms[lms_map[r] + 1] : n;
            bool same = true;
            if (end_l - l != end_r - r) {
                same = false;
            } else {
                while (l < end_l) {
                    if (s[l] != s[r]) { break; }
                    l++;
                    r++;
                }
                if (l == n || s[l] != s[r]) same = false;
            }
            if (!same) rec_upper++;
            rec_s[lms_map[sorted_lms[i]]] = rec_upper;
        }

        auto rec_sa = sa_is<THRESHOLD_NAIVE, THRESHOLD_DOUBLING>(rec_s, rec_upper);

        for (int i = 0; i < m; i++) { sorted_lms[i] = lms[rec_sa[i]]; }
        induce(sorted_lms);
    }
    return sa;
}

} // namespace internal

std::vector<int> suffix_array(const std::vector<int>& s, int upper) {
    assert(0 <= upper);
    for (int d : s) { assert(0 <= d && d <= upper); }
    auto sa = internal::sa_is(s, upper);
    return sa;
}

template <class T> std::vector<int> suffix_array(const std::vector<T>& s) {
    int n = int(s.size());
    std::vector<int> idx(n);
    iota(idx.begin(), idx.end(), 0);
    sort(idx.begin(), idx.end(), [&](int l, int r) { return s[l] < s[r]; });
    std::vector<int> s2(n);
    int now = 0;
    for (int i = 0; i < n; i++) {
        if (i && s[idx[i - 1]] != s[idx[i]]) now++;
        s2[idx[i]] = now;
    }
    return internal::sa_is(s2, now);
}

std::vector<int> suffix_array(const std::string& s) {
    int n = int(s.size());
    std::vector<int> s2(n);
    for (int i = 0; i < n; i++) { s2[i] = s[i]; }
    return internal::sa_is(s2, 255);
}

// Reference:
// T. Kasai, G. Lee, H. Arimura, S. Arikawa, and K. Park,
// Linear-Time Longest-Common-Prefix Computation in Suffix Arrays and Its
// Applications
template <class T> std::vector<int> lcp_array(const std::vector<T>& s, const std::vector<int>& sa) {
    int n = int(s.size());
    assert(n >= 1);
    std::vector<int> rnk(n);
    for (int i = 0; i < n; i++) { rnk[sa[i]] = i; }
    std::vector<int> lcp(n - 1);
    int h = 0;
    for (int i = 0; i < n; i++) {
        if (h > 0) h--;
        if (rnk[i] == 0) continue;
        int j = sa[rnk[i] - 1];
        for (; j + h < n && i + h < n; h++) {
            if (s[j + h] != s[i + h]) break;
        }
        lcp[rnk[i] - 1] = h;
    }
    return lcp;
}

std::vector<int> lcp_array(const std::string& s, const std::vector<int>& sa) {
    int n = int(s.size());
    std::vector<int> s2(n);
    for (int i = 0; i < n; i++) { s2[i] = s[i]; }
    return lcp_array(s2, sa);
}

// Count keyword occurence in str
// Complexity: O(min(|str|, |keyword|) * lg |str|)
int count_keyword_occurence(const std::string& str, const std::vector<int>& suffarr, const std::string& keyword) {
    const int n = str.size(), m = keyword.size();
    assert(n == suffarr.size());
    if (n < m) return 0;
    auto f1 = [&](int h) {
        for (int j = 0; h + j < n and j < m; j++) {
            if (str[h + j] < keyword[j]) return true;
            if (str[h + j] > keyword[j]) return false;
        }
        return n - h < m;
    };
    auto f2 = [&](int h) {
        for (int j = 0; h + j < n and j < m; j++) {
            // if (str[h + j] < keyword[j]) return true;
            if (str[h + j] > keyword[j]) return false;
        }
        return true;
    };
    const auto L = std::partition_point(suffarr.begin(), suffarr.end(), f1);
    const auto R = std::partition_point(L, suffarr.end(), f2);
    return std::distance(L, R);
    // return std::vector<int>(L, R); // if you need occurence positions
}
#pragma once
#include <algorithm>
#include <cassert>
#include <vector>

// CUT begin
// Range Minimum Query for static sequence by sparse table
// Complexity: O(NlogN) for precalculation, O(1) per query
template <typename T> struct StaticRMQ {
    inline T func(const T &l, const T &r) const noexcept { return std::min<T>(l, r); }
    int N, lgN;
    T defaultT;
    std::vector<std::vector<T>> data;
    std::vector<int> lgx_table;
    StaticRMQ() = default;
    StaticRMQ(const std::vector<T> &sequence, T defaultT) : N(sequence.size()), defaultT(defaultT) {
        lgx_table.resize(N + 1);
        for (int i = 2; i < N + 1; i++) lgx_table[i] = lgx_table[i >> 1] + 1;
        lgN = lgx_table[N] + 1;
        data.assign(lgN, std::vector<T>(N, defaultT));
        data[0] = sequence;
        for (int d = 1; d < lgN; d++) {
            for (int i = 0; i + (1 << d) <= N; i++) {
                data[d][i] = func(data[d - 1][i], data[d - 1][i + (1 << (d - 1))]);
            }
        }
    }
    T get(int l, int r) const { // [l, r), 0-indexed
        assert(l >= 0 and r <= N);
        if (l >= r) return defaultT;
        int d = lgx_table[r - l];
        return func(data[d][l], data[d][r - (1 << d)]);
    }
};
#include <algorithm>
#include <utility>
#include <vector>
#include <string>

struct LongestCommonPrefix {
    const int N;
    std::vector<int> sainv; // len = N
    StaticRMQ<int> rmq;
    LongestCommonPrefix(const std::string s) : N(s.size()) {
        auto sa = suffix_array(s);
        auto lcp = lcp_array(s, sa);
        sainv.resize(N);
        for (int i = 0; i < N; i++) sainv[sa[i]] = i;
        rmq = {lcp, N};
    }
    int lcplen(int l1, int l2) const {
        if (l1 == l2) return N - l1;
        if (l1 == N or l2 == N) return 0;
        l1 = sainv[l1], l2 = sainv[l2];
        if (l1 > l2) std::swap(l1, l2);
        return rmq.get(l1, l2);
    }
};
#include <algorithm>
#include <string>
#include <tuple>
#include <utility>
#include <vector>

// CUT begin
// Lyndon factorization based on Duval's algorithm
// **NOT VERIFIED YET**
// Reference:
// [1] K. T. Chen, R. H. Fox, R. C. Lyndon,
//     "Free Differential Calculus, IV. The Quotient Groups of the Lower Central Series,"
//     Annals of Mathematics, 81-95, 1958.
// [2] J. P. Duval, "Factorizing words over an ordered alphabet,"
//     Journal of Algorithms, 4(4), 363-381, 1983.
// - https://cp-algorithms.com/string/lyndon_factorization.html
// - https://qiita.com/nakashi18/items/66882bd6e0127174267a
template <typename T> std::vector<std::pair<int, int>> lyndon_factorization(const std::vector<T> &S) {
    const int N = S.size();
    std::vector<std::pair<int, int>> ret;
    for (int l = 0; l < N;) {
        int i = l, j = i + 1;
        while (j < N and S[i] <= S[j]) i = (S[i] == S[j] ? i + 1 : l), j++;
        ret.emplace_back(l, j - i), l += j - i;
    }
    return ret;
}

std::vector<std::pair<int, int>> lyndon_factorization(const std::string &s) {
    const int N = int(s.size());
    std::vector<int> v(N);
    for (int i = 0; i < N; i++) v[i] = s[i];
    return lyndon_factorization<int>(v);
}

// Compute the longest Lyndon prefix for each suffix s[i:N]
// (Our implementation is $O(N \log N)$)
// Example:
// - `teletelepathy` -> [1,4,1,2,1,4,1,2,1,4,1,2,1]
// Reference:
// [1] H. Bannai et al., "The "Runs" Theorem,"
// SIAM Journal on Computing, 46.5, 1501-1514, 2017.
template <typename String>
std::vector<int> longest_lyndon_prefixes(const String &s, const LongestCommonPrefix &rh) {
    const int N = s.size();
    std::vector<std::pair<int, int>> st{{N, N}};
    std::vector<int> ret(N);
    for (int i = N - 1, j = i; i >= 0; i--, j = i) {
        while (st.size() > 1) {
            int iv = st.back().first, jv = st.back().second;
            int l = rh.lcplen(i, iv);
            if (!(iv + l < N and s[i + l] < s[iv + l])) break;
            j = jv;
            st.pop_back();
        }
        st.emplace_back(i, j);
        ret[i] = j - i + 1;
    }
    return ret;
}

// Compute all runs in given string
// Complexity: $O(N \log N)$ in this implementation (Theoretically $O(N)$ achievable)
// N = 2e5 -> ~800 ms
// Reference:
// [1] H. Bannai et al., "The "Runs" Theorem,"
// SIAM Journal on Computing, 46.5, 1501-1514, 2017.
std::vector<std::tuple<int, int, int>> run_enumerate(std::string s) {
    if (s.empty()) return {};
    LongestCommonPrefix rh(s);
    std::reverse(s.begin(), s.end());
    LongestCommonPrefix rrev(s);
    std::reverse(s.begin(), s.end());
    auto t = s;
    auto lo = *std::min_element(s.begin(), s.end()), hi = *std::max_element(s.begin(), s.end());
    for (auto &c : t) c = hi - (c - lo);
    auto l1 = longest_lyndon_prefixes(s, rh), l2 = longest_lyndon_prefixes(t, rh);
    int N = s.size();
    std::vector<std::tuple<int, int, int>> ret;
    for (int i = 0; i < N; i++) {
        int j = i + l1[i], L = i - rrev.lcplen(N - i, N - j), R = j + rh.lcplen(i, j);
        if (R - L >= (j - i) * 2) ret.emplace_back(j - i, L, R);

        if (l1[i] != l2[i]) {
            j = i + l2[i], L = i - rrev.lcplen(N - i, N - j), R = j + rh.lcplen(i, j);
            if (R - L >= (j  - i) * 2) ret.emplace_back(j - i, L, R);
        }
    }
    std::sort(ret.begin(), ret.end());
    ret.erase(std::unique(ret.begin(), ret.end()), ret.end());
    return ret;
}
#include <iostream>
#include <string>
#define PROBLEM "https://judge.yosupo.jp/problem/runenumerate"
using namespace std;

// https://snuke.hatenablog.com/entry/2014/12/02/235837

vector<int> mana(string S){
    vector<int> R(si(S));
    int c = 0;
    for (int i = 0; i < S.size(); ++i) {
        int l = c - (i-c);
        if (i+R[l] < c+R[c]) {
            R[i] = R[l];
        } else {
            int j = c+R[c] - i;
            while (i-j >= 0 && i+j < S.size() && S[i-j] == S[i+j]) ++j;
            R[i] = j;
            c = i;
        }
    }
    return R;
}

struct Rollinghash{
    string S;
    int n;
    int base1;
    int base2;
    vector<ll> h1,h2,ru1,ru2;
    
    void make(string &T,int ba1,int ba2){
        S=T;
        n=S.size();
        h1.assign(n+1,0);
        h2.assign(n+1,0);
        ru1.assign(n+1,0);
        ru2.assign(n+1,0);
        base1=ba1;
        base2=ba2;
        
        ru1[0]=1;
        ru2[0]=1;
        
        for(int i=1;i<=n;i++){
            h1[i]=h1[i-1]*base1+ll(S[i-1]-'a'+1);
            h1[i]%=mod1;
            
            h2[i]=h2[i-1]*base2+ll(S[i-1]-'a'+1);
            h2[i]%=mod2;
            
            ru1[i]=ru1[i-1]*base1%mod1;
            ru2[i]=ru2[i-1]*base2%mod2;
        }
    }
    
    pair<ll,ll> ha(int l,int r){
        pair<ll,ll> res;
        res.fi=(h1[r]-h1[l]*ru1[r-l]%mod1+mod1)%mod1;
        res.se=(h2[r]-h2[l]*ru2[r-l]%mod2+mod2)%mod2;
        
        return res;
    }//開区間
};

// BIT セグ木 遅延セグ木 のみ

// from: https://gist.github.com/yosupo06/ddd51afb727600fd95d9d8ad6c3c80c9
// (based on AtCoder STL)

#include <algorithm>
#include <array>
#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;
        }
        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>

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

#include <cassert>
#include <vector>

namespace atcoder {
    
    template <class T> struct fenwick_tree {
        using U = internal::to_unsigned_t<T>;
        
    public:
        fenwick_tree() : _n(0) {}
        fenwick_tree(int n) : _n(n), data(n) {}
        
        void add(int p, T x) {
            assert(0 <= p && p < _n);
            p++;
            while (p <= _n) {
                data[p - 1] += U(x);
                p += p & -p;
            }
        }
        
        T sum(int l, int r) {
            assert(0 <= l && l <= r && r <= _n);
            return sum(r) - sum(l);
        }
        
    private:
        int _n;
        std::vector<U> data;
        
        U sum(int r) {
            U s = 0;
            while (r > 0) {
                s += data[r - 1];
                r -= r & -r;
            }
            return s;
        }
    };
    
}  // namespace atcoder


#include <algorithm>
#include <cassert>
#include <iostream>
#include <vector>
namespace atcoder {
    
    template <class S,
    S (*op)(S, S),
    S (*e)(),
    class F,
    S (*mapping)(F, S),
    F (*composition)(F, F),
    F (*id)()>
    struct lazy_segtree {
    public:
        lazy_segtree() : lazy_segtree(0) {}
        lazy_segtree(int n) : lazy_segtree(std::vector<S>(n, e())) {}
        lazy_segtree(const std::vector<S>& v) : _n(int(v.size())) {
            log = internal::ceil_pow2(_n);
            size = 1 << log;
            d = std::vector<S>(2 * size, e());
            lz = std::vector<F>(size, id());
            for (int i = 0; i < _n; i++) d[size + i] = v[i];
            for (int i = size - 1; i >= 1; i--) {
                update(i);
            }
        }
        
        void set(int p, S x) {
            assert(0 <= p && p < _n);
            p += size;
            for (int i = log; i >= 1; i--) push(p >> i);
            d[p] = x;
            for (int i = 1; i <= log; i++) update(p >> i);
        }
        
        S get(int p) {
            assert(0 <= p && p < _n);
            p += size;
            for (int i = log; i >= 1; i--) push(p >> i);
            return d[p];
        }
        
        S prod(int l, int r) {
            assert(0 <= l && l <= r && r <= _n);
            if (l == r) return e();
            
            l += size;
            r += size;
            
            for (int i = log; i >= 1; i--) {
                if (((l >> i) << i) != l) push(l >> i);
                if (((r >> i) << i) != r) push(r >> i);
            }
            
            S sml = e(), smr = e();
            while (l < r) {
                if (l & 1) sml = op(sml, d[l++]);
                if (r & 1) smr = op(d[--r], smr);
                l >>= 1;
                r >>= 1;
            }
            
            return op(sml, smr);
        }
        
        S all_prod() { return d[1]; }
        
        void apply(int p, F f) {
            assert(0 <= p && p < _n);
            p += size;
            for (int i = log; i >= 1; i--) push(p >> i);
            d[p] = mapping(f, d[p]);
            for (int i = 1; i <= log; i++) update(p >> i);
        }
        void apply(int l, int r, F f) {
            assert(0 <= l && l <= r && r <= _n);
            if (l == r) return;
            
            l += size;
            r += size;
            
            for (int i = log; i >= 1; i--) {
                if (((l >> i) << i) != l) push(l >> i);
                if (((r >> i) << i) != r) push((r - 1) >> i);
            }
            
            {
                int l2 = l, r2 = r;
                while (l < r) {
                    if (l & 1) all_apply(l++, f);
                    if (r & 1) all_apply(--r, f);
                    l >>= 1;
                    r >>= 1;
                }
                l = l2;
                r = r2;
            }
            
            for (int i = 1; i <= log; i++) {
                if (((l >> i) << i) != l) update(l >> i);
                if (((r >> i) << i) != r) update((r - 1) >> i);
            }
        }
        
        template <bool (*g)(S)> int max_right(int l) {
            return max_right(l, [](S x) { return g(x); });
        }
        template <class G> int max_right(int l, G g) {
            assert(0 <= l && l <= _n);
            assert(g(e()));
            if (l == _n) return _n;
            l += size;
            for (int i = log; i >= 1; i--) push(l >> i);
            S sm = e();
            do {
                while (l % 2 == 0) l >>= 1;
                if (!g(op(sm, d[l]))) {
                    while (l < size) {
                        push(l);
                        l = (2 * l);
                        if (g(op(sm, d[l]))) {
                            sm = op(sm, d[l]);
                            l++;
                        }
                    }
                    return l - size;
                }
                sm = op(sm, d[l]);
                l++;
            } while ((l & -l) != l);
            return _n;
        }
        
        template <bool (*g)(S)> int min_left(int r) {
            return min_left(r, [](S x) { return g(x); });
        }
        template <class G> int min_left(int r, G g) {
            assert(0 <= r && r <= _n);
            assert(g(e()));
            if (r == 0) return 0;
            r += size;
            for (int i = log; i >= 1; i--) push((r - 1) >> i);
            S sm = e();
            do {
                r--;
                while (r > 1 && (r % 2)) r >>= 1;
                if (!g(op(d[r], sm))) {
                    while (r < size) {
                        push(r);
                        r = (2 * r + 1);
                        if (g(op(d[r], sm))) {
                            sm = op(d[r], sm);
                            r--;
                        }
                    }
                    return r + 1 - size;
                }
                sm = op(d[r], sm);
            } while ((r & -r) != r);
            return 0;
        }
        
    private:
        int _n, size, log;
        std::vector<S> d;
        std::vector<F> lz;
        
        void update(int k) { d[k] = op(d[2 * k], d[2 * k + 1]); }
        void all_apply(int k, F f) {
            d[k] = mapping(f, d[k]);
            if (k < size) lz[k] = composition(f, lz[k]);
        }
        void push(int k) {
            all_apply(2 * k, lz[k]);
            all_apply(2 * k + 1, lz[k]);
            lz[k] = id();
        }
    };
    
}  // namespace atcoder

#include <algorithm>
#include <cassert>
#include <vector>

namespace atcoder {
    
    template <class S, S (*op)(S, S), S (*e)()> struct segtree {
    public:
        segtree() : segtree(0) {}
        segtree(int n) : segtree(std::vector<S>(n, e())) {}
        segtree(const std::vector<S>& v) : _n(int(v.size())) {
            log = internal::ceil_pow2(_n);
            size = 1 << log;
            d = std::vector<S>(2 * size, e());
            for (int i = 0; i < _n; i++) d[size + i] = v[i];
            for (int i = size - 1; i >= 1; i--) {
                update(i);
            }
        }
        
        void set(int p, S x) {
            assert(0 <= p && p < _n);
            p += size;
            d[p] = x;
            for (int i = 1; i <= log; i++) update(p >> i);
        }
        
        S get(int p) {
            assert(0 <= p && p < _n);
            return d[p + size];
        }
        
        S prod(int l, int r) {
            assert(0 <= l && l <= r && r <= _n);
            S sml = e(), smr = e();
            l += size;
            r += size;
            
            while (l < r) {
                if (l & 1) sml = op(sml, d[l++]);
                if (r & 1) smr = op(d[--r], smr);
                l >>= 1;
                r >>= 1;
            }
            return op(sml, smr);
        }
        
        S all_prod() { return d[1]; }
        
        template <bool (*f)(S)> int max_right(int l) {
            return max_right(l, [](S x) { return f(x); });
        }
        template <class F> int max_right(int l, F f) {
            assert(0 <= l && l <= _n);
            assert(f(e()));
            if (l == _n) return _n;
            l += size;
            S sm = e();
            do {
                while (l % 2 == 0) l >>= 1;
                if (!f(op(sm, d[l]))) {
                    while (l < size) {
                        l = (2 * l);
                        if (f(op(sm, d[l]))) {
                            sm = op(sm, d[l]);
                            l++;
                        }
                    }
                    return l - size;
                }
                sm = op(sm, d[l]);
                l++;
            } while ((l & -l) != l);
            return _n;
        }
        
        template <bool (*f)(S)> int min_left(int r) {
            return min_left(r, [](S x) { return f(x); });
        }
        template <class F> int min_left(int r, F f) {
            assert(0 <= r && r <= _n);
            assert(f(e()));
            if (r == 0) return 0;
            r += size;
            S sm = e();
            do {
                r--;
                while (r > 1 && (r % 2)) r >>= 1;
                if (!f(op(d[r], sm))) {
                    while (r < size) {
                        r = (2 * r + 1);
                        if (f(op(d[r], sm))) {
                            sm = op(d[r], sm);
                            r--;
                        }
                    }
                    return r + 1 - size;
                }
                sm = op(d[r], sm);
            } while ((r & -r) != r);
            return 0;
        }
        
    private:
        int _n, size, log;
        std::vector<S> d;
        
        void update(int k) { d[k] = op(d[2 * k], d[2 * k + 1]); }
    };
    
}  // namespace atcoder

using T=pair<int,int>;

T f(T a,T b){
    return mp(min(a.fi,b.fi),max(a.se,b.se));
}

T ti(){
    return mp(INF,-INF);
}

vector<pair<int,int>> wh[MAX];

int main(){
    
    std::ifstream in("text.txt");
    std::cin.rdbuf(in.rdbuf());
    cin.tie(0);
    ios::sync_with_stdio(false);
    
    int N;string S;
    cin >> N;
    cin >> S;
    int Q;cin>>Q;
    vector<pair<int,int>> que(Q);
    for(int i=0;i<Q;i++){
        int a,b;cin>>a>>b;a--;
        que[i]=mp(a,b);
    }
    vector<pair<int,int>> ans(Q,mp(INF,0));
    
    for(int q=0;q<2;q++){
        for(int i=0;i<MAX;i++) wh[i].clear();
        auto v = LongestCommonPrefix(S);
        auto ret = run_enumerate(S);
        for(auto p:ret){
            auto [t,l,r]=p;
            wh[t].push_back(mp(l,r));
            //cout<<t<<" "<<l<<" "<<r<<endl;
        }
        
        for(int i=1;i<MAX;i++) sort(all(wh[i]));
        
        ll ha1=37,ha2=43;
        Rollinghash ro1,ro2;
        ro1.make(S,ha1,ha2);
        reverse(all(S));
        ro2.make(S,ha1,ha2);
        reverse(all(S));
        
        vector<int> maki=mana(S);
        string SSS;
        for(int i=0;i<N;i++){
            if(i) SSS+='$';
            SSS+=S[i];
        }
        vector<int> magu=mana(SSS);
        
        vector<pair<int,int>> defki,defgu;
        for(int i=0;i<N;i++){
            defki.push_back(mp(i-(maki[i]-1),i+(maki[i]-1)));
        }
        for(int i=1;i<si(magu);i+=2){
            if(magu[i]<=1) defgu.push_back(mp(INF-1,-INF+1));
            else defgu.push_back(mp(i/2-(magu[i]/2-1),i/2+1+(magu[i]/2-1)));
        }
        
        //for(auto [a,b]:defki) cout<<a<<" "<<b<<endl;
        
        //for(auto [a,b]:defgu) cout<<a<<" "<<b<<endl;
        
        atcoder::segtree<T,f,ti> segki(defki),seggu(defgu);
        
        for(int qq=0;qq<Q;qq++){
            auto [l,r]=que[qq];
            int L=0,R=r-l+1;
            while(R-L>1){
                int M=(L+R)/2;
                auto a=ro1.ha(l,l+M),b=ro2.ha(N-r,N-r+M);
                if(a==b) L=M;
                else R=M;
            }
            if(L==r-l) ans[qq].fi=0;
            else{
                int x=l+L,y=r-L;
                int len=y-x;
                {
                    int lenki=(len+1)/2;
                    int left=y-lenki-1,right=y-1;
                    while(right-left>1){
                        int mid=(left+right)/2;
                        auto re=segki.prod(y-lenki,mid+1);
                        if(re.se>=y-1) right=mid;
                        else left=mid;
                    }
                    int sakuL=x,sakuR=y-((y-right)*2-1); //[)
                    
                    if(chmin(ans[qq].fi,sakuR-sakuL)) ans[qq].se=0;
                    
                    if(ans[qq].fi==sakuR-sakuL){
                        int misyu=INF;
                        for(int a=1;a*a<=sakuR-sakuL;a++){
                            if((sakuR-sakuL)%a) continue;
                            {
                                auto it=lower_bound(all(wh[a]),mp(sakuL,INF));
                                if(it!=wh[a].begin()){
                                    it--;
                                    if((*it).fi<=sakuL&&(*it).se>=sakuR) chmin(misyu,a);
                                }
                            }
                            {
                                auto it=lower_bound(all(wh[(sakuR-sakuL)/a]),mp(sakuL,INF));
                                if(it!=wh[(sakuR-sakuL)/a].begin()){
                                    it--;
                                    if((*it).fi<=sakuL&&(*it).se>=sakuR) chmin(misyu,(sakuR-sakuL)/a);
                                }
                            }
                        }
                        
                        if(misyu<=sakuR-sakuL){
                            int a=misyu;
                            auto it=lower_bound(all(wh[a]),mp(sakuL,INF));
                            if(it!=wh[a].begin()){
                                it--;
                                int cn=(sakuL-max(l,(*it).fi)+a-1)/a+1;
                                if(cn>2){
                                    int lele=sakuL-max(l,(*it).fi);
                                    if(1){
                                        ans[qq].se+=lele+1;
                                    }else{
                                        ans[qq].se+=cn;
                                    }
                                }
                                else{
                                    ans[qq].se++;
                                    int le=l-1,ri=sakuL;
                                    while(ri-le>1){
                                        int mi=(le+ri)/2;
                                        if(sakuR-sakuL<sakuL-mi) le=mi;
                                        else{
                                            auto a=ro1.ha(mi,sakuL);
                                            auto b=ro1.ha(sakuR-(sakuL-mi),sakuR);
                                            if(a==b) ri=mi;
                                            else le=mi;
                                        }
                                    }
                                    ans[qq].se+=sakuL-ri;
                                }
                            }
                        }else{
                            ans[qq].se++;
                            int le=l-1,ri=sakuL;
                            while(ri-le>1){
                                int mi=(le+ri)/2;
                                if(sakuR-sakuL<sakuL-mi) le=mi;
                                else{
                                    auto a=ro1.ha(mi,sakuL);
                                    auto b=ro1.ha(sakuR-(sakuL-mi),sakuR);
                                    if(a==b) ri=mi;
                                    else le=mi;
                                }
                            }
                            ans[qq].se+=sakuL-ri;
                        }
                    }
                }
                if(len>=2){
                    int lengu=(len)/2;
                    int left=y-lengu-2,right=y-1;
                    while(right-left>1){
                        int mid=(left+right)/2;
                        auto re=seggu.prod(y-lengu-1,mid+1);
                        if(re.se>=y-1) right=mid;
                        else left=mid;
                    }
                    if(right==y-1) continue;
                    
                    int sakuL=x,sakuR=y-((y-right-1)*2); //[)
                    
                    if(chmin(ans[qq].fi,sakuR-sakuL)) ans[qq].se=0;
                    
                    if(ans[qq].fi==sakuR-sakuL){
                        int misyu=INF;
                        for(int a=1;a*a<=sakuR-sakuL;a++){
                            if((sakuR-sakuL)%a) continue;
                            {
                                auto it=lower_bound(all(wh[a]),mp(sakuL,INF));
                                if(it!=wh[a].begin()){
                                    it--;
                                    if((*it).fi<=sakuL&&(*it).se>=sakuR) chmin(misyu,a);
                                }
                            }
                            {
                                auto it=lower_bound(all(wh[(sakuR-sakuL)/a]),mp(sakuL,INF));
                                if(it!=wh[(sakuR-sakuL)/a].begin()){
                                    it--;
                                    if((*it).fi<=sakuL&&(*it).se>=sakuR) chmin(misyu,(sakuR-sakuL)/a);
                                }
                            }
                        }
                        
                        if(misyu<=sakuR-sakuL){
                            int a=misyu;
                            auto it=lower_bound(all(wh[a]),mp(sakuL,INF));
                            if(it!=wh[a].begin()){
                                it--;
                                int cn=(sakuL-max(l,(*it).fi)+a-1)/a+1;
                                if(cn>2){
                                    int lele=sakuL-max(l,(*it).fi);
                                    if(1){
                                        ans[qq].se+=lele+1;
                                    }else{
                                        ans[qq].se+=cn;
                                    }
                                }
                                else{
                                    ans[qq].se++;
                                    int le=l-1,ri=sakuL;
                                    while(ri-le>1){
                                        int mi=(le+ri)/2;
                                        if(sakuR-sakuL<sakuL-mi) le=mi;
                                        else{
                                            auto a=ro1.ha(mi,sakuL);
                                            auto b=ro1.ha(sakuR-(sakuL-mi),sakuR);
                                            if(a==b) ri=mi;
                                            else le=mi;
                                        }
                                    }
                                    ans[qq].se+=sakuL-ri;
                                }
                            }
                        }else{
                            ans[qq].se++;
                            int le=l-1,ri=sakuL;
                            while(ri-le>1){
                                int mi=(le+ri)/2;
                                if(sakuR-sakuL<sakuL-mi) le=mi;
                                else{
                                    auto a=ro1.ha(mi,sakuL);
                                    auto b=ro1.ha(sakuR-(sakuL-mi),sakuR);
                                    if(a==b) ri=mi;
                                    else le=mi;
                                }
                            }
                            ans[qq].se+=sakuL-ri;
                        }
                    }
                }
            }
        }
        
        reverse(all(S));
        for(int qq=0;qq<Q;qq++){
            swap(que[qq].fi,que[qq].se);
            que[qq].fi=N-que[qq].fi;
            que[qq].se=N-que[qq].se;
        }
    }
    
    for(int q=0;q<Q;q++){
        if(ans[q].fi==0) cout<<0<<" "<<0<<"\n";
        else cout<<ans[q].fi<<" "<<ans[q].se<<"\n";
    }
    
}

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

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 15348kb

input:

5 abcca
3
1 5
3 4
3 5

output:

1 1
0 0
1 1

result:

ok 3 lines

Test #2:

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

input:

5 babdb
2
1 4
3 4

output:

1 1
1 2

result:

ok 2 lines

Test #3:

score: 0
Accepted
time: 6ms
memory: 15356kb

input:

50 gqlggjglsqlgjflqflqfwfqqfqqffwfqlfwfqlwgsllsgwlqga
3262
26 32
22 28
10 17
9 28
39 47
14 18
18 35
15 31
22 49
15 21
15 23
12 45
1 49
3 13
18 24
14 23
19 26
21 27
1 46
17 34
23 32
13 26
15 43
39 46
17 28
40 49
14 44
3 37
4 15
20 39
1 17
1 17
1 17
17 34
1 17
1 17
1 17
17 34
1 17
17 34
17 34
1 17
17 ...

output:

2 1
0 0
7 2
13 1
1 1
4 2
17 2
14 1
21 1
6 2
4 1
28 2
35 3
10 2
5 1
5 1
2 2
2 1
38 1
1 2
5 3
11 1
26 2
0 0
5 2
4 2
27 1
34 2
10 1
17 1
16 2
16 2
16 2
1 2
16 2
16 2
16 2
1 2
16 2
1 2
1 2
16 2
1 2
16 2
1 2
1 2
16 2
16 2
1 2
16 2
16 2
16 2
16 2
1 2
1 2
1 2
1 2
16 2
1 2
1 2
16 2
1 2
1 2
16 2
1 2
16 2
1 2...

result:

ok 3262 lines

Test #4:

score: 0
Accepted
time: 10ms
memory: 15776kb

input:

95 fqoywgnlyjyzpyyyszsnsyzpzqldyqlyjdlnqsyzzqzzssszzqzzysqszjylqdlllldzqlyjzsnsyusqzzzsszzsszzzqso
8421
11 89
11 70
41 42
79 94
62 67
37 55
73 90
78 92
4 77
14 16
13 86
36 45
6 21
37 93
16 56
27 72
9 39
73 82
48 80
20 94
63 83
6 85
37 55
20 37
37 55
37 55
20 37
20 37
20 37
37 55
20 37
20 37
37 55
37...

output:

73 1
59 2
1 2
0 0
0 0
0 0
10 3
3 1
69 1
0 0
70 1
9 2
13 1
38 2
38 1
45 2
28 3
5 1
28 1
59 1
17 1
78 1
0 0
17 2
0 0
0 0
17 2
17 2
17 2
0 0
17 2
17 2
0 0
0 0
0 0
17 2
17 2
0 0
17 2
0 0
0 0
17 2
0 0
17 2
17 2
17 2
17 2
0 0
0 0
17 2
17 2
17 2
0 0
17 2
17 2
17 2
0 0
17 2
17 2
0 0
17 2
0 0
17 2
17 2
17 2
...

result:

ok 8421 lines

Test #5:

score: 0
Accepted
time: 8ms
memory: 15764kb

input:

273 byqssdbrubbububbhsrssusdrbbdubbfqrfdsbsqshbbbdsruqfsdusbqbubbsrqssudhrquqrhduhhhbhubbubbsbhrfsfrdsduqbsrsssbdhfqusubhsbudbhubsbfbsbbbrsubbhhsqbudsdubqshhbbusrbbbsbfbsbuhbdubshbusuqfhdbsssrsbqudsdrfsfrhbsbbubbuhbbfbbrdsfrdsddsbbqrfdbubfuhbbbhsbuuddbrbhuhrffqrbbdbqdrqqbfudqs
8827
28 168
33 273
125...

output:

96 1
240 2
61 1
58 1
86 1
94 1
19 2
13 2
171 2
191 1
37 2
33 1
36 1
90 1
13 1
42 2
64 1
95 1
7 1
231 1
193 1
100 1
5 1
111 2
203 2
73 1
5 1
37 1
35 2
34 1
34 1
34 1
34 1
34 1
34 1
34 1
34 1
34 1
34 1
35 2
34 1
34 1
34 1
34 1
35 2
35 2
35 2
34 1
35 2
34 1
35 2
35 2
35 2
34 1
34 1
34 1
34 1
34 1
34 1
...

result:

ok 8827 lines

Test #6:

score: 0
Accepted
time: 42ms
memory: 16584kb

input:

1630 gpdmjhvkfrxglffvjgghhtjujfrktintghhwunzwwufktxvuobnkajinjrkrubtrxfwvverhgkfcxkhpldpalxfwesrwnzjnjggvbtffgtagwmgrbrakjggedtjyhwkjclkyftdtlszfwdsjolwfjbwisftbfxumytlglgeaemklejwjytwhadqjwstzmqfzrfnyjmnhhkrmnsaabkgffggmazoemaznnwkrwjzajwgkftkhsbswmrytnnljynfkzjjwzrstlqdjwnfyawreltmeaeglkjtymafffgl...

output:

388 2
300 1
806 1
13 2
518 1
1079 2
570 2
759 2
440 2
701 1
0 0
6 1
1019 1
28 1
930 2
575 2
36 1
647 1
455 1
156 2
188 2
1151 1
252 2
1281 2
218 2
423 1
423 2
318 1
1053 2
366 2
754 1
1110 1
197 2
144 1
266 1
537 2
644 2
180 2
808 2
1274 1
133 1
271 1
1014 2
366 1
498 2
855 2
108 2
199 2
201 1
475 1...

result:

ok 64835 lines

Test #7:

score: 0
Accepted
time: 1021ms
memory: 79312kb

input:

242681 nuvwtjlknjuypqzgbbkqljrojspjdoiesidzihlfiouurvgykdvvwyonssgajdkcobgyezfmetbjbrhiuveczngqjgbndmqwckapzuoborgyoixplzxpmptqpfdkokdpjuagixkjurccreyaaeyvpduutxqsmvtgtlfeugbvxmnmtfjxqnnvnkzcqacpwqsfjwlpfuemheleqlfzdqnrmvnnqifrtugyikhdlmwxtjalxexfdusvzqfecsyyrcnxrvgkjjkilvaqjiylbxlrfktnlxunnwjdftvxw...

output:

83044 1
37882 2
216157 2
48382 1
10896 2
176055 2
105310 2
155181 2
81628 1
18757 2
43985 1
18517 1
77084 1
60712 1
60844 1
3686 1
28003 1
16940 1
109452 1
227172 2
19371 1
74520 1
205350 2
9148 2
36108 2
56490 2
213082 2
36744 2
33340 1
64057 1
50728 2
4440 2
9544 2
38310 2
50945 2
7694 2
95347 1
9...

result:

ok 108152 lines

Test #8:

score: 0
Accepted
time: 411ms
memory: 63772kb

input:

180103 qwfrakvhsdleaugctbpvricopqgvnlrehvkpwerwmuxmcvievsfwckmdgferkwupuclsppcwkrrmkphflwsrobnphvfblplpqoriniddagiamlmbueympfijmexgjqodqpzzmxqvkvdturtgryppbojfhdiwmqllanylzqpmirzykccrwclylcejxejnnfmilusxgkouzikivzjgdmlsjtpogssfflroagwzrxxaroxernwhgknnlyoiuiplpkeagxqdsjfmabgmxfwjrdwalkydubsuilywjopqx...

output:

36 2
23992 2
62392 1
9269 1
34734 2
85369 2
20691 2
1030 1
83979 1
123117 2
89661 2
155084 2
10317 1
1934 1
12145 2
4175 2
47274 1
35439 1
96980 2
72256 1
25986 1
41548 1
818 2
11184 1
24031 2
45793 1
14250 2
89381 2
17294 1
84621 1
40414 2
55400 1
8323 2
25646 2
714 2
32042 1
58243 1
77992 1
18882 ...

result:

ok 37053 lines

Test #9:

score: 0
Accepted
time: 921ms
memory: 36648kb

input:

73372 mehadcsrhwawmxbxvvxifuynioutljndybapfdksfdeveztcckdskevoszwwnsgddzdtfwgkutzxnyfvxreojsuihgikqzevlcucghiwsfrgkzeqtsqirlpmmotugmcyfyvvuzupctonsrhjjyvzqqngeclnzrufmkfponiuqhccufaoeultlwnqkzwtvirzkznvjmpmhuhabjumdzbcwzqkednbftjezuhhpsdrjoixuodbnylovfouqosbhsloyzzvfmbemghgucwbzskhijtnkcxpwwudheiqya...

output:

1460 2
12675 1
40437 1
43220 1
8004 2
19049 1
28796 1
63645 2
39662 2
3277 2
16125 2
1570 1
11919 1
34196 1
9732 2
6417 2
17545 1
23590 2
47081 2
31666 2
7006 2
12116 1
42893 1
3318 1
55561 1
7436 1
5446 1
149 2
5348 2
16859 1
13004 1
22913 2
11114 1
4882 2
13019 1
3067 1
44996 1
9517 2
16829 2
2719...

result:

ok 224618 lines

Test #10:

score: 0
Accepted
time: 1405ms
memory: 64620kb

input:

186088 bxwcogtrxvazjmagnlvigjzocjrleehmugtdsfwqfyqtgyvakswmwdulujtikjwawswnbmjpzhrsfnocciwuvhnnkekjkftskwokihunshpelsagdtwphczbdjzrjxhgygatpziuukhzjgqjjoalgrzmozauezjnbpljzqllkeognywybodbhfnjpksvwikpgcxpjrrjxhmhszlezdwouaeuxtgpupbhlmtwdjyrwuxgxzonmsunmryapxnuoicapisawessxbvdwrwqlafdabnsihkhlxgszuobj...

output:

18108 1
32696 2
30914 2
119897 2
31752 1
75298 2
78498 1
42110 2
143396 1
1132 2
163178 2
4096 2
948 1
56404 1
68376 1
10237 2
94467 1
101883 1
8666 1
151812 2
74144 2
66102 1
72213 2
4053 2
16411 1
27608 1
15003 2
176714 2
62891 2
78697 2
20178 2
94239 1
75452 2
2379 2
118246 2
4684 2
58526 1
51779...

result:

ok 172922 lines

Test #11:

score: 0
Accepted
time: 1523ms
memory: 66340kb

input:

186410 ojchhvgbrjsztaoafyjhyfqggvmvjzwrtwnmogssbntvkvqhhtwzasnvndmqpchuvqqevtlobrornktvmemunbmyhvvjyhlcrvlwbqtvqgdpzlrdnclxcxkizmhxjxldaloqoitfndvkhnwfemqmvjlsjzuxhrofhhnmugqcreurwdbsqbuqnfcajnpdftlntmjfeviiaebjkcwxnszstwyjnhwegcltalytuksezobgotzonpibxrnajrxxcrcmhxacyxhghbmlbgeccfgetgorsokiutfnvbium...

output:

16856 1
71655 2
83151 1
2075 2
3199 1
90981 1
51907 1
20486 1
41939 1
4637 1
8199 2
61726 2
38456 1
56904 1
21357 1
33586 1
15873 2
40636 1
17730 1
83981 2
19237 2
39632 1
35226 1
9114 1
39309 1
67049 1
3720 2
82968 1
50575 2
34133 2
4566 2
15440 2
31468 2
7908 1
37504 1
76914 1
17951 1
5141 2
55150...

result:

ok 219919 lines

Test #12:

score: 0
Accepted
time: 338ms
memory: 74664kb

input:

219911 emslzelqkdqnfzzpqymsagwiidrlsycvfxfnayhtswbmguhobocnxgbifwqmtjdfvfqbjimptekcnuornjajduukeixeheuzncviysiijtlngtggedpcgdmdeakwwuxjvgccbhxqfzbtxitfqvuktfwfpduwozrbbsshrdnwfvqmsewgifgocchkxpylnpwqiqxgoiqdhrgxjwdgebmljhvreclzavaggsltebavidgvtwkbyzafxoyyxwnczpfdbasqcugbsfauaaqpwhgybnqtkywiutudrxwrk...

output:

1910 1
57927 2
0 0
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4758 1
4...

result:

ok 111910 lines

Test #13:

score: 0
Accepted
time: 978ms
memory: 25000kb

input:

27591 qoamkvpkhebzvrlmbrhtyobcauixphhughiosaymkjwgvzeleiihphqjljdyxwmauixecqirqvgdkggnrouvmsknplfyqzupozdogbjhlvtmhhipthoohtkuefvevjtonyaxkkvaydtckbfswhbowtwgoiwrmriodgzdzbbgzuvmcxsxhkkmrxbomuovbfrudedgcgpnthijskseiuswhsjqchnmxxaiyjmwluhlybvrhlsdejiqlqswbalxrslxsfmtzpshngxrudibpxqrisgveoyhczmydkxvym...

output:

2337 2
11280 1
2120 1
7631 1
15249 1
12389 1
2491 1
701 1
12413 2
4742 1
3119 1
3845 1
241 1
2242 1
2976 2
1942 1
17140 2
9309 2
319 1
2487 1
9295 1
7747 2
1566 2
343 1
2848 2
16762 2
1031 2
8117 2
1280 1
6269 2
3941 1
11367 1
678 1
5591 2
9710 1
4459 1
11616 1
2066 2
2380 1
4209 2
6821 1
6895 1
286...

result:

ok 246741 lines

Test #14:

score: 0
Accepted
time: 1144ms
memory: 109020kb

input:

341125 bjqwhatbyjvcngipxliiyuijsjrjxwzthvhjchimmogzhyzzljdbbczxodxncpyynadfkjvjbbbsaixetwghtrkltyulbzpgjkaapbfiifelylfchmucgvqnzotpttltvvmykzqnsoecbjxauzebuveqfzkboboqagcispceyymhalospakelzhefprccpyjhwwwituaikrtdejyfpvxnmzpubeeddtiutlombedfkiqkytygyhejqmxzfuzhsnjqtakbcofgmfiemkmgzklqowgtaaqfmscgqypj...

output:

42658 2
24213 2
46758 2
40638 2
35799 2
21163 1
30618 1
79653 2
64601 2
37538 2
29919 1
72152 1
66691 2
27081 1
31116 1
304408 1
25602 1
60614 2
122304 1
101913 2
14577 1
51665 1
65739 1
33235 1
91654 1
60465 2
7624 2
110716 1
23286 2
19248 2
30402 1
136250 1
19871 1
51645 1
287756 2
23703 1
27572 2...

result:

ok 254470 lines

Test #15:

score: 0
Accepted
time: 822ms
memory: 77500kb

input:

230956 ickghckqwfctpfezebvddraiypwzfkwowntqjvzoggowxcsvdjfqyohfijsmarguyitysnqbxfqlqbedbezmshickgoeiqnonxobfakhlzkllytezozcnjcclrhuscvdyickhagzoszoioylpsaliembknmhsufbttnnxqskmjavhjdfcnjqjkgszavgpiothnhqxptqjptzplbefpbiqkbaqjnqqjsedcspqimscrnbqxvlerdjkgamyvzpcedkemfedghtbgcsshufuntyrqgjzdhlostohexdx...

output:

26052 1
71434 1
1169 2
38032 1
3940 2
97505 1
37638 2
98861 1
9927 2
72459 1
34568 1
59872 2
3180 1
43380 1
15059 1
87580 1
4370 1
10425 2
32180 2
24344 1
14788 2
70666 1
66862 2
10455 1
32939 1
66572 2
76295 1
16250 2
131590 2
54251 2
92669 2
32912 1
74600 1
90259 2
4324 1
105051 1
11870 1
67918 1
...

result:

ok 270570 lines

Test #16:

score: 0
Accepted
time: 616ms
memory: 68776kb

input:

186071 aurostviurvtoiqoypigphfzrikzcgkmeaxyfcacrfgfjydrrvkdceqtytiltlmsbdrzladsefbgsvvrzlfabpdxkdooihngxhvfqonavyudmrebnmzueivszflrtjskbtxfgtjozblqizihgrqfmmlhyzfxwuqcdockhovkktwzlafxsppkbixemorifpukqynsdhnipgsasthpdwpdyomtuwqrxpcudgwaeipvkjootitghgtixekeobafapvunnipfohipbyygnfvinxtjjjxbczaeylzyxkrh...

output:

34423 1
12829 1
59438 2
35421 1
12255 1
100163 2
41577 2
6774 2
14807 2
104600 2
59322 2
54175 1
46155 1
18036 1
6280 2
10689 2
44895 2
36330 1
829 2
75255 2
14503 2
18365 1
10852 2
90978 1
124489 2
34974 2
54825 1
39876 1
11946 1
141883 2
3108 1
51119 2
120937 2
49211 2
1419 2
28253 1
29689 1
67478...

result:

ok 220760 lines

Test #17:

score: 0
Accepted
time: 4ms
memory: 15616kb

input:

883 uwxjjnxwxyycekwnxjswwvckkijydwykkyknzjxdinwjynwnwyxnkxjkjjkkxksknivknknkwnfwkjkvvekkjkwwjjjnkwxwjxkeejnxyevxzkxkycyekwzyxjjxywnwssxjvnsxjijkywvjsjnwvvknkjwnnjkkxkfvxwxxkxscsnikwwijjwxnwjswnwyzwwuxyykknjsskjkywvzsjkwusvxwwxuwkkkjwwvjjwsknsywxxkxwkxwwnxyjvkkwnksckxwwzvxjjwxknjsjkjkywfzsjkwusjxxkww...

output:

303 1
193 1
81 2
273 1
73 1
413 2
325 5
283 1
580 1
805 2
275 1
272 2
369 2
104 1
6 2
55 1
121 2
119 2
189 1
790 1
84 1
47 2
270 2
26 2
92 1
0 0
291 1
471 2
147 2
72 1
207 1
124 2
226 2
611 2
73 5
118 1
470 2
451 1
8 1
458 2
815 2
79 1
154 2
451 2
208 1
12 1
18 1
207 4
44 1
854 2
76 2
624 2
293 1
16...

result:

ok 982 lines

Test #18:

score: 0
Accepted
time: 1954ms
memory: 146304kb

input:

472761 envwahmuzbjgpbfooqveovgpgcbaizookxzjbsvolqobhgqooppxqyogfkravafjbmpphmuhaspqzbveokgmvmtrvreydvzhnrobjhedpjmlimhhlxflunicljgdbflupeixutyijzgxbogqqmfsiuedrmiahzgrkoakxkizltpebontmiwodbcdgiyontejtuhddqtwwbqeumzlzxdhkxrwrviobkgqjzqxiyktgglrzzybxfzzyphawcgyxrtzofhjtsatadktznxndnpkbbpnjzbgbovpebpjh...

output:

42945 2
57333 2
33037 2
17593 1
3640 2
283278 1
235 1
145834 2
24727 1
62907 1
34843 1
8435 2
209632 2
111930 2
165564 1
27460 2
107039 1
57323 2
42421 1
66110 2
25508 2
50677 2
46223 2
224524 2
244787 2
52728 1
16379 1
12113 1
327854 1
154852 1
14554 2
107947 1
120597 1
29922 1
75243 2
67854 1
6966...

result:

ok 316350 lines

Test #19:

score: 0
Accepted
time: 427ms
memory: 22916kb

input:

7581 nhxypwhnsvffyndvpcyikdwvbojfjoklrglgfauutedxurmtbbvbmmfblzosjtgyjxgczcwknxvkmubwabdkbiekjgiislyyprxpuhzozaaxvomyfxvypwtkaxwlbimniknzddkluevaqojgewnnbiicykokqytknohbzcczgziwyzjhvqbwikoejuqwankwnzatneuvfifyzvfokjyifdjkpghjhtjoqyuvaznibylhsounbogylainkhujrwiwbyonhkykhonkuqnwjxaboukftykzjddwwoaxpbo...

output:

3512 1
2504 2
140 2
3722 1
1516 2
2471 1
4092 1
4304 1
597 2
448 1
1357 2
1789 2
4747 1
2260 2
20 2
2518 2
2628 2
6316 2
304 1
877 1
1804 1
0 0
6341 1
199 1
5509 1
1583 2
1918 2
3976 1
2679 1
5595 1
3104 2
3809 1
6466 1
6410 1
258 2
894 2
3365 2
1636 2
5163 2
80 2
215 1
2743 2
4962 2
3452 2
965 1
35...

result:

ok 393809 lines

Test #20:

score: 0
Accepted
time: 3277ms
memory: 148816kb

input:

467766 mxuayezmqogeshfzwafkdxcltkyqtypxsnpvkxjwtomllsfhbxirmxrbmyyqmwdnkkmweutzdxvkmjuoaloiaopqpgvvydtqsvyovwukjhiwlxszkeohdlyjcdqrzickzoukctdoezzdaclzilbvkavparigpqiatjtkhnigsijkgdxiaudxmbrxpdeipsottlivhxsolknqfiaicdpaykilqhiswtmjsflihogbrjjabzhnsyoafmstrsgcxpgwrttmyhkozzmgaasjvdhuuchgamfmxlfbbcetl...

output:

172804 1
54153 1
70896 1
196364 1
36793 2
123989 2
88131 2
116327 2
82036 2
35156 1
58359 1
199524 2
152120 2
4471 2
26955 1
113717 1
43725 1
3478 1
76277 1
33067 2
153326 2
129770 1
60717 2
193455 1
17709 2
58766 1
87199 2
131308 1
48512 2
52995 2
215092 2
129085 2
213267 2
102490 2
116165 1
18889 ...

result:

ok 388654 lines

Test #21:

score: 0
Accepted
time: 1288ms
memory: 148716kb

input:

490464 ltdcgjjalpmgvzoknpjnxypjmedcdmaicpgkwvbmocnssmhmgqfjerpalxhnkuizvpnjstnvukzutxipujwbodmgsxbtpgjngvcloguvrfbbhglbbyeczeytfaonjvpqutmbutcsrdvnknoeafrkewolovuzzjwytknjbjldmzjzgkxgvzaqhewmczglyrderennzatgxtazuijqgsfraiqzfbcnuuieclunezelsviekdgwquslfyhazwjbtwxohxemnpsunrbeehwilrspwijbspcchxgecwfmq...

output:

142827 2
22589 2
190886 2
90982 1
4054 2
71858 2
6821 2
52417 1
162855 1
21524 1
46855 2
200940 1
27630 1
200902 1
1373 1
156336 1
208478 1
197279 1
166654 1
29822 2
4359 2
103054 1
52243 1
148247 1
278767 1
399145 2
97331 1
1291 2
134796 2
156632 1
106598 1
7107 1
141123 2
133845 2
114029 2
70057 1...

result:

ok 269116 lines

Test #22:

score: 0
Accepted
time: 2489ms
memory: 131868kb

input:

425242 vzsfinkepzcxiqiwutuqebzzixujmgesgipzyvpldkcsemypikjkofofdqkrqgwwdybjorhzdtdrjllsjvrovgrcvbcvwgwnbatlocohpxeithfsxsuuzjuxlpxwmprcixrirqeuwukadsmbttgewbfxancxpcfnpqwtclblzayuxtodaqzrnsffyjshhllcrcuwuhizyfsbiyxevgnswoluhmrzsyuetyqyyrfhwhomzdviizvfpvdjslankliasgoczaynnigvdenubndrzrnwafdmsutpaiagj...

output:

63325 1
196071 1
24390 1
213585 2
71814 1
12851 1
104957 1
20309 1
39446 1
167041 1
37453 2
252872 1
17358 2
24770 1
231991 1
53193 1
156609 2
4639 1
69098 1
273174 1
85829 1
126147 1
19273 2
77581 2
14335 1
160418 1
28264 1
10924 1
132290 1
107880 1
47783 1
60076 1
1261 2
128806 1
167946 1
132126 1...

result:

ok 303077 lines

Test #23:

score: 0
Accepted
time: 1285ms
memory: 147692kb

input:

454707 vwbyukoygoqqrigcfszkipbdbzjzyttdzskqtqlcpbgthriyjeossefveqawvtqmxafdtcfsmzencamtbzgpvuaiomnytsldtnmqyiyapzjyqwsmikkdzdwabupkoemlmufpukkqludgltwfmguyaxlhxqsgzafkplcsdrrzuvokwlcafaqcxrwoqekrquvltxhmurnjubdpxwqiestyuxfzczmcfwgswepvnobukiqgccvdtsjwzryaszihgrnontqxrkvpcrnrraqnsfycttlmgqasqxzomgwrg...

output:

128697 1
122598 2
254911 1
20413 2
62351 1
197560 3
55270 1
118182 2
51929 2
275074 2
3345 1
121324 2
19046 2
10571 1
143485 1
178154 2
40683 1
102973 1
110924 1
49711 1
113492 2
24565 2
179580 1
57191 1
50743 2
30440 1
191559 2
238898 2
96727 1
3338 2
81109 2
146811 1
92114 2
31328 2
137044 1
37068...

result:

ok 319866 lines

Test #24:

score: 0
Accepted
time: 1161ms
memory: 136248kb

input:

428928 vzgfzwrlobbigranxhmtgswspagsapxvebdexhntjvoltdjafhhcgkobvrxtsyrjnjmbtwpaqtbwxmqjicohrcxxxwoguggqowvmzrssafyyxqfgkslldcztzzpqjzqnxyqedqxqnnaxrbedchyciebnzudpypnfrfvzvhwrktucmtduopyhaglqevkphglkasbtgfbbdqjgxdplijajihtuttfukbbjirumyyuxnitwyjilyrelfrbducmaugzrgkewxcwktzcsrnkjulkbaondlaxibbleivowg...

output:

118116 2
303426 1
158523 1
5363 2
96434 2
108531 2
57265 2
78273 1
39897 2
52883 2
196420 2
167452 2
159055 1
178369 2
68989 1
0 0
38920 2
72320 3
133357 1
50610 2
126369 1
22656 3
319666 2
70959 2
50519 2
2753 2
90361 1
103184 2
139908 1
191361 2
3929 1
45672 1
39900 2
36241 2
103404 2
39655 1
7987...

result:

ok 373485 lines

Test #25:

score: 0
Accepted
time: 3111ms
memory: 105400kb

input:

314262 mbdjwwfvzqaspeoiexlqxmrlyuoolnnkidvdglszjlgzolwbdnhubckcvsztafntbjxswxmvmrvtxpaperptfcntgvbjtyakjxvyaoqiamxizuwqorsgdprxrseresikqbjlsyrnomnrnojekvidktavpiraattgcfsmlzcffbnmzjyvyziodlifsgnlrzlkkcwunfgfwuvpjqrpcqqjagrxbglfguhsnprjxeuushsefcbybntjprjttvfroeqiutqtnwgcvqldllccqufjevxnplevqmegozcxw...

output:

154418 2
16960 1
103408 2
77635 1
201145 1
148788 2
13123 1
171110 1
115337 2
146478 1
25566 2
26141 1
3881 1
31902 1
213972 1
25530 2
125052 1
65575 2
126216 2
142989 1
178707 2
290957 2
64379 1
215579 1
2987 1
109457 2
6756 2
79774 2
60621 2
129094 2
149523 1
57649 1
2200 2
132753 1
58773 2
38075 ...

result:

ok 372975 lines

Test #26:

score: 0
Accepted
time: 3558ms
memory: 146640kb

input:

473345 yssaokzadzdzwpxlvavmrsuuwhovysvtcwhabnurlbpavlhpmzxdfbuavqykcpdkbawwnuhoadbektfvjfsdxmeiabdbicqabwsrdcxrwonsitbugmmgomhyrhtidxxqssqgxnfyvowfpzdmnshsilbeucnrgwlymndpbcvuprpteagixtfdlkwdqzydhnisvhsftcbagzxksdoizbzlisqrsrblxxcqraxdboiuoahjsvvqnavubfsmtvnctnfyilvbwuyuycntboikpynyfqyltslpyrqkufpdy...

output:

26045 2
92986 2
131091 2
98180 1
169157 2
169756 1
291875 1
176714 2
8839 2
173234 1
156976 2
5856 1
225621 2
54482 1
55314 1
260577 1
264562 1
267898 1
46760 2
79964 1
169773 1
160589 2
240762 2
48240 2
52291 2
248942 2
71062 2
170830 2
38396 1
206871 2
62246 1
230237 2
250690 1
107169 1
97001 1
21...

result:

ok 382491 lines

Test #27:

score: 0
Accepted
time: 1340ms
memory: 146248kb

input:

466710 dwginluwtgjslxqrozdqemoxtlujcqzptsweddoefrtfmnnyhtvllwgzgfdskoztqirvqlcbaiynfvpwgpnnyyjvfcbjbyaphyxhuxkyobnhefulkudwlqexrjokdihkezvwleapgmitgcdlvfzacwofjgyhvgijhgpcviqcqzjxhweydxcxsbkljylktfvthsrhyyboomrotqrmdxexhbkwcvqwffemtipafzcxwycstjbijbptvkxufqjfyweptlfboctrgbolfogwvqghixsnucmhsjinlpcif...

output:

139129 1
320780 2
50556 1
168598 1
221315 2
260545 2
299464 2
43913 1
241072 1
50187 1
2843 2
5810 1
286808 1
106766 1
28411 1
52637 1
207829 1
52713 1
19630 1
4863 2
49190 1
126306 1
128787 1
179698 1
138097 2
81942 1
69844 2
7513 1
7117 1
433683 2
51537 1
75520 2
90833 1
234279 2
67468 1
124997 1
...

result:

ok 355378 lines

Test #28:

score: 0
Accepted
time: 986ms
memory: 21252kb

input:

2872 hahahahahahahaaaahhhaahhhhaahaahahhahahhaahhhhhhhhhhhahhahahaaaaahahahhahhaahhaaaaahhhhahahhahhahahahaahaahhhahahhhahaahhhahaaahhhhhahahhaahhhahhaaahhhahahhahahahhahhahahhhhhahahhhahhhhhhaahhahhhhahhhaahahhhahhhhhahhaahaaahhhhhhhhhaaahhhahhhahaahhaaahaahhahhaaahahaaahahaaahhhahhhhhhaahhhhahhhha...

output:

95 1
1697 1
291 1
240 1
224 6
766 1
2 1
1861 5
771 1
859 2
855 1
1177 2
623 1
196 2
1113 2
444 2
14 1
409 5
516 1
2433 1
138 2
561 2
1784 1
252 1
964 1
333 1
389 1
1846 2
1934 3
76 1
971 1
438 3
1761 2
911 1
165 1
433 3
647 1
733 2
66 1
2447 1
582 1
117 2
866 1
1581 1
417 1
592 1
1196 1
634 1
1276 1...

result:

ok 350131 lines

Test #29:

score: 0
Accepted
time: 1171ms
memory: 22352kb

input:

4757 zyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyyyzzzyzzyyzyzzzyzzzzyyzyzyzzzzyyzyzyzyzyzyyzzyzyzyzzyzyyzyzyzzyzzyzyzyzyzyyyyzzyzyzyzyzzzyyyyzzyzzyyyzzyzzzzzyzyyzyyzyzzzyzyzzyzzzyyyyzzyyyzyyyyyyzyyyzzzzzyzyzzyyzzzyzyzyyzyzzyyyzzyzyzzzyzyyzyzzzyyzzzyyyyzyzyyyyyyyyzzyzzzyzzzzzyyzzyzzyzzzzyzyzzzyyyzyyyy...

output:

1831 1
3162 2
975 1
594 1
1588 1
2359 1
1134 1
0 0
30 3
2470 3
1047 1
4111 1
398 3
688 2
1984 2
1353 1
2070 2
1211 1
1586 1
525 1
1223 2
773 1
180 2
49 4
1180 2
498 1
384 5
4287 2
313 1
151 1
1 1
1340 2
642 1
388 7
894 1
1845 1
505 4
2686 1
78 2
1032 2
0 0
273 2
1402 2
253 1
378 1
308 1
2230 2
273 1...

result:

ok 379636 lines

Test #30:

score: 0
Accepted
time: 1395ms
memory: 22752kb

input:

7581 nhnhnhnhnhnhnhnhnhnhnhnhnhnhnhnhnhnhnhnhnhnhnhnhnhnhnhnhnhnhnnhhnhnhhhnhhhnnhnnnnhnnnnnnnhnhnhnnhhhhhhnhnnnnnhhhhhnnnnhhnhhnnnnhhhhnnhhhnnhhnhhhnnnnnhnhnnhhhhhnnnnhhhhnnnnnhnnnhnnhnnnhhnnnnhnnhhhnnhnhhnnhhhhhhhnhnhhhhhhnhnhhhhnnhnnnnhnhnhhnhnnnnhhnnnnnnnhnhnnnnnhnhnnhnhnnnhhhhnhnnnhnnhnnhnnnhnn...

output:

6495 2
1340 1
1169 2
1780 5
5972 1
3712 2
1082 1
149 1
2392 1
1001 3
95 2
2201 3
79 5
732 1
1234 1
608 2
849 3
1628 2
3014 2
977 1
2198 3
1859 1
1224 2
1185 1
2431 1
1472 1
2509 1
2878 1
573 2
287 3
467 3
926 1
5441 2
5216 1
3133 1
885 2
527 1
1218 1
2965 1
85 2
562 2
908 2
4325 1
5380 1
6463 3
767 ...

result:

ok 393809 lines

Test #31:

score: 0
Accepted
time: 2447ms
memory: 44524kb

input:

85669 kakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakaka...

output:

20535 1
19105 5
55139 1
6481 2
1895 1
16337 1
11263 6
8777 2
19422 1
2511 2
31189 3
38864 1
14580 3
9373 5
21583 1
1771 1
1860 1
6374 1
8148 2
28259 1
16758 2
7574 1
33 2
12236 1
7942 1
44077 8
7278 4
27231 2
16719 7
15133 1
929 1
1327 1
75214 1
11131 2
11824 1
6196 1
3012 1
36032 3
403 1
64015 2
38...

result:

ok 386442 lines

Test #32:

score: 0
Accepted
time: 4165ms
memory: 155684kb

input:

467766 mxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxmxm...

output:

88624 1
68899 1
99970 1
4509 1
104737 1
94922 2
228678 2
72099 2
179105 2
46773 1
233751 2
63799 1
148929 4
23755 2
84195 1
32691 5
38650 7
36139 4
37167 1
98245 3
1395 1
63589 3
53793 1
94090 1
100458 1
48951 1
95325 2
226595 2
1592 1
141733 1
162326 4
59236 1
142415 3
212166 1
214788 2
32652 1
406...

result:

ok 388654 lines

Test #33:

score: 0
Accepted
time: 3925ms
memory: 153716kb

input:

450567 hyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhhhyhyhyhhyyhyhhhyhhyhhyhyhhhyhhhyyyyyyyhyyyhhhyhyhhhhhyyhhyyyhhyyyyhyhyyhhyhyhhhhhyhyhyhyyhyyhhhhyyhyhhhhhyhyyyhyyyhyhyhyhhhhhyyyyyyyhhhhyyhyyyhyyhh...

output:

302958 4
97887 1
127813 3
349731 1
106088 1
75378 4
21284 1
121929 1
10130 2
48360 1
174006 2
50549 1
31560 1
66023 1
21149 3
169644 1
88434 1
169395 3
134729 4
44873 3
325361 1
19140 1
45870 2
32067 2
241152 3
61742 1
241947 1
184679 4
91347 1
152526 1
79672 1
104727 2
109516 2
32589 3
7264 1
11703...

result:

ok 370071 lines

Test #34:

score: 0
Accepted
time: 3673ms
memory: 152808kb

input:

461960 jljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljljlj...

output:

287122 1
163230 3
19723 1
27559 5
62982 1
65519 1
78361 1
123221 1
161099 2
25551 1
164906 1
385812 1
19084 1
34177 1
4442 1
103644 4
210038 1
174290 3
26924 1
353410 1
227084 2
65224 1
327957 2
146285 1
48927 1
73154 1
114518 1
8384 1
174287 1
60060 2
150394 3
86736 1
87524 2
244212 1
29715 2
71969...

result:

ok 337620 lines

Test #35:

score: 0
Accepted
time: 4283ms
memory: 164936kb

input:

493783 cycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycycyyycycycccycycccycycycycccycycyccyycyyycycccyccycyycccccycycycycycyyycyyycycycycccccycycycycycyyyccyyyycccycycycycyccyycycyyycycycyyyyyyyycy...

output:

128958 1
156145 1
213180 2
158382 1
48447 2
41664 1
242677 1
301386 1
7713 1
129486 2
63871 4
169260 1
180052 2
159428 1
36482 1
246069 3
196037 3
46331 3
252091 3
209772 1
222837 2
148441 2
324660 1
20588 8
304283 2
11720 2
174830 2
195118 1
178272 1
248569 1
129640 1
165936 2
139075 1
135828 1
249...

result:

ok 393100 lines

Test #36:

score: 0
Accepted
time: 3181ms
memory: 159764kb

input:

490464 ltltltltltltltltltltltltltltltltltltltltltltltltltltltltltltltltltltltltltlltltttlttltltltltttltlllltlltttllltltltltllltllttlltlllltltltltltttltllltttltltlllllttttttltltltltlttllltltltltltltttltltltltltltltltllltltltltttltltltlttlllltltlttlllttttltttltltltltttltltltltllttttltltltltltltltltttl...

output:

17548 1
116890 3
385602 1
345670 2
33425 1
92526 1
119395 1
232165 1
149810 4
183022 1
129199 2
342393 2
151044 6
175603 2
49376 1
133004 1
72635 3
155059 3
215433 1
286654 3
125654 4
408193 1
454073 1
295591 3
304190 2
236094 1
60719 1
29490 1
282931 1
88562 2
88360 2
227458 2
91466 1
455609 1
3519...

result:

ok 269116 lines

Test #37:

score: 0
Accepted
time: 3410ms
memory: 152812kb

input:

454707 vwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwv...

output:

47810 1
12653 1
302693 1
160385 1
1234 1
310372 1
259678 1
42119 3
163219 1
19776 1
358317 1
236581 1
68051 3
320587 1
254829 2
124480 1
111143 3
157130 1
70799 1
242816 1
198952 1
18363 1
117936 1
11187 1
36209 1
23923 2
168100 1
227405 2
74272 1
30095 1
72129 1
15742 1
57879 3
1742 5
128447 2
4168...

result:

ok 319866 lines

Test #38:

score: 0
Accepted
time: 2971ms
memory: 83572kb

input:

225793 bqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbbbqbbbbbqqbqqqqqqbqbqbqbbqbbqbqbqbqbbbqbbbqbqbbbqbqbbbqbqqqbqqbbqqqbqbqqqqqbqqqbqbqbbqqbqbqbqbqbqqqbqqqbbbqqqqbbbbqbqbqqqqqbqqqbqbqbqbbbqqqbqqqbbqqbqbqbqbbbqqqbqbqbbbqqqqqqqbqbqqqbqbbbqbqbqbbbbbqqqbqbqb...

output:

28426 3
70215 1
897 2
71507 1
9085 1
54948 1
5607 2
47856 2
56916 2
35019 1
15386 1
132056 1
57047 1
46334 1
42943 2
109717 1
25530 4
16670 1
9809 1
26325 2
147477 3
13802 1
63226 7
32984 1
49195 2
46491 2
36956 6
12770 1
53868 1
21935 2
43645 1
117480 2
89195 1
80398 3
1866 2
28153 3
150129 1
17172...

result:

ok 373671 lines

Test #39:

score: 0
Accepted
time: 2499ms
memory: 145688kb

input:

467766 rlnhpbwjlywapfaasbaoszkozanjrsandukghcrykhkqdkhbselyricojkfzklkkzlkxuxuzhbqcwufbixdqnznhfafegxzuaekgrabikukzjtazpidchjpvmflmkiemadaxkmjdjpekzvwjqdkwawryazicokzzzbbdpcehbpprezhofuzqvqdkkrmjkkdztayrwjgpkcuyeaylmyyzlabcxcyvuvrgafybbkbhnyokmduubbabauwxolzqzkaaytkfqojbnlziezcykkhbcfwhgbboegtcpixqc...

output:

357 1
240 1
602 1
86 1
137 1
465 1
232 1
427 1
101 1
418 1
414 1
427 1
133 1
253 1
579 1
579 1
121 1
483 1
614 1
123 1
219 1
377 1
499 1
303 2
177 1
209 1
588 1
128 1
424 1
558 1
303 1
103 1
608 1
446 1
337 1
464 1
342 1
69 1
567 1
366 1
21 1
558 1
365 1
294 1
510 1
67 1
60 1
127 1
351 1
601 1
468 1...

result:

ok 388654 lines

Test #40:

score: 0
Accepted
time: 2861ms
memory: 144060kb

input:

450567 oopiyxxvkcjzazlcdsyajkbiycnzahgyeygafdknmkkixdsfyuzndzrgccdoccwaxjnpbyrbhynjxlqzjgrghupgkfbtzxfovmyansuvndugmetvazcafsbayuyjrkwtvauzkixkyespychhtiwksimfknqgbzbvkbreyguknpaafdzpvbyezophrtkxbawqcwbksxbippabepgjbkxumqobaqknxqmqbcplbdnzafrgneoidskzyardohfulyuvbrchvnvybwnowvzgbapwvvatcsyihtnayknkb...

output:

314 1
17 1
7 1
287 1
322 1
254 1
154 2
151 1
66 1
158 1
393 1
66 1
135 1
374 1
140 1
17 1
172 1
77 1
2 1
195 2
16 1
217 1
107 1
49 1
232 1
344 2
60 1
339 1
366 1
120 1
404 2
351 1
148 1
345 1
139 1
315 1
14 1
304 1
55 1
204 1
196 1
226 1
111 1
328 1
77 1
379 1
278 1
186 1
396 1
375 1
185 1
229 1
132...

result:

ok 370071 lines

Test #41:

score: 0
Accepted
time: 2667ms
memory: 143180kb

input:

461960 daaavyrgmdokkybatocvzlufnzswcwrchvaxzpjibaclehygywaxdakcbamywqhksrjhkzzeakkwhwlhaaajwkqorzcnbjrnlloyaealylkabqegvltmxuflkthfeyfnbijokmjfhykblzhufjijmhdgmykkmiskbyzyqsvleavkbhmykymbzbwgyfzyobevyqvxeqbyyipkxnydirftagybguzclalvzzzwxayybrlbskmamwkdbaaollzkipsyxvvgyasamcmvazwqmdbznaodlrakkvfkaagvq...

output:

432 1
243 1
125 1
86 1
364 1
153 1
446 1
105 1
463 1
108 1
299 1
294 1
265 1
207 1
142 1
204 1
423 1
51 1
446 1
83 1
229 1
69 1
447 1
256 1
299 2
226 1
344 1
117 1
430 1
381 1
297 1
99 1
261 1
295 1
245 1
365 1
317 1
386 1
363 1
385 1
422 1
328 2
268 1
95 1
403 1
203 1
252 1
413 1
283 1
441 1
243 1
...

result:

ok 337620 lines

Test #42:

score: 0
Accepted
time: 3099ms
memory: 154436kb

input:

493783 ovivpzoedyyjkwrbvkrtiiwkozfzztpprgtwikrzsiefvtbwizyjytrbaakufuaosztydoesxxmaqiblagaexysgjsztwyunmstfrrxibbjhehyzqetkkzkypkxtzcbbprbctbklydyrckrkfxeeeknpbtnvhoefyzoqyyzawvmtsqysozubwubdkwzacjhuxgrpsznwptazayicaacbvgdbhkihdqntslxqtowtayxvkoazqjqokqsvbayetpyancqjwmlwgbubsymqaxuhrpatcmgzppataltmh...

output:

398 2
418 1
80 1
77 1
213 1
318 1
170 1
385 1
363 1
100 1
42 1
281 1
455 1
318 1
64 1
315 1
458 1
113 1
339 1
403 1
287 1
67 1
120 1
22 1
225 1
158 1
278 1
425 2
384 1
247 1
244 1
359 1
69 1
42 1
371 1
184 1
196 1
79 2
31 3
354 1
62 1
337 1
228 2
2 1
445 1
64 1
164 1
428 1
417 1
10 1
16 1
191 1
316 ...

result:

ok 393100 lines

Test #43:

score: 0
Accepted
time: 2747ms
memory: 136788kb

input:

436409 xkabeithdpbcihaxracbaweybahlkrbpjcbwbkuwtjrcualbouzgsckgzazyflxhmkgauawkvsmawojbwpbafnakbaehptatbzwbuaflyafmsccsduygixbyxokvbwtkkgeeooujkdbdugabvncbkhdalecbkufadaeyybkxhgwynsytjhavgkwdxjyykyuyfygdsjyekikzhavhdubkrbnwicpnzdskwmtamrzboknbwszibkbbekboqkljurhryyvcfofrmnezamzrdxkchkkkiitvaxxlikubx...

output:

307 1
79 1
217 1
36 1
356 1
139 2
46 1
151 1
240 1
240 1
96 1
20 1
98 1
157 1
324 1
72 1
31 1
56 1
228 1
202 1
275 1
366 1
392 1
390 1
272 1
83 1
161 1
244 1
219 1
231 1
232 1
303 1
373 1
247 1
217 1
118 1
141 1
349 1
47 1
49 1
0 0
23 1
405 1
139 1
152 1
403 1
313 1
59 1
313 1
282 1
129 1
376 1
249 ...

result:

ok 355325 lines

Test #44:

score: 0
Accepted
time: 1850ms
memory: 149552kb

input:

490464 kzyqauaymvyotgfesamhymskzbbvsqikkravgiavcekkenbkmqaniyheyybqlkmydvvjtdbykbmkbjsuqpwnqldbwzdssstpcxpwhgubsirmcakkapmofahvvodsznkezyalzzktfghhmkykqaynpnxtrzqpbiyjwczamdzjumzjojbbpwwujfytkrhatkdhwcktyyqqececobgoyywguohizvckiblfenowywjklbknxylhgkejahlnnndbqglgarydkbqedpxknxcnzgdivybvmxkqyxmkbbyja...

output:

280 2
282 1
33 1
243 1
243 1
99 1
113 1
168 1
103 1
240 1
174 1
318 1
62 1
366 1
202 1
152 1
213 1
253 1
67 1
161 1
357 1
366 1
85 1
162 1
154 1
202 2
153 1
308 1
19 1
208 1
199 1
175 1
153 1
20 1
259 1
175 1
138 1
38 1
154 1
84 1
16 1
29 1
233 1
61 1
98 1
144 1
23 1
92 1
245 1
282 1
317 2
23 1
96 1...

result:

ok 269116 lines

Test #45:

score: 0
Accepted
time: 1674ms
memory: 145640kb

input:

479116 wiqvdcqkezvxqihvwbodnwgjqkcaljhysgyyyzfbsfhozwxxbrdwfxlblpybvqvgqjzevhynbypsfumtjcdyivbzdiqxlawzvxrcfmrpbhxrwiakyrsbkakpadthqjkmkmwuqauafxzczjvaarcmazustduyrzyueymdklqmlqhitzolghxyyexgbgulrhirbvqwsbsyzxhqdhksujmjvqrfacyjeacbkkamuhldjbadyigawgkfyjzhxlbtyrdolsxipnttarpvzpqsegqtotazbbqeobbzsnrok...

output:

106 2
20 1
157 2
341 1
276 1
271 1
348 1
157 1
38 1
146 1
12 1
252 1
19 1
126 1
335 2
349 1
85 2
281 1
23 1
194 1
18 1
240 1
31 1
146 1
13 1
153 1
179 1
229 1
214 1
307 1
243 1
243 1
226 1
298 1
95 1
186 1
335 1
189 1
197 1
78 1
54 1
176 1
67 1
96 1
168 1
19 1
79 1
281 1
236 1
77 1
351 1
191 1
114 1...

result:

ok 191647 lines

Test #46:

score: 0
Accepted
time: 3210ms
memory: 153920kb

input:

497017 bnovpukiikrazkdyubolyaqiztoyiceahfkcvezymaqemkiarknusseycmgraabcyorbpbfbeyxacbxxayayqblxtfbbexnbbiibikhdjfcykbrqabyrrjvdnblyzbciybyxaarjqpvnybdxanfzncitocclakcobazzrmqbwkcwkbuakvbxabekqmybnkkttkknbymqkebaxbvkaubkwckwbqmrzzabockalccoticnzfnaxdbynvpqjraaxybyicbzylbndvjrrybaqrbkycfjdhkibiibbnxeb...

output:

49 2
147 1
158 1
52 1
11 1
77 1
143 1
49 1
107 1
90 1
79 1
100 1
58 1
96 1
67 1
96 1
66 1
156 1
167 1
43 1
117 1
44 1
55 1
161 1
185 1
98 1
113 1
152 1
32 1
52 1
109 1
117 1
115 1
7 1
5 1
71 1
85 1
149 1
117 1
47 1
12 1
188 1
99 1
56 1
47 1
153 1
59 1
162 1
33 1
128 1
116 1
45 1
132 1
132 1
91 1
28 ...

result:

ok 398270 lines

Test #47:

score: 0
Accepted
time: 2834ms
memory: 134848kb

input:

428928 egaqxqxzkablqpcjexywkrpbprvuhtpukhkqvkeyhtsoeaxndrjlsjkgjabpicbuzuzqbyoqykmudrnqmzguicabihrbrirbfkyycthknnzgaendlmdiuvfcmbbtrcbvkeztrwxgflvgfwimtkoxebmokwzjyleuyimlnkycjuwdgzicxlznzfktzuwmpaaxakwbhqndeekoyffpoqldhnmqjklcmdedpvlqkjpzfizxjvnxixkqbcsayencsdtpvelzeljznmfoxwdpucktwagaotxodznkkyuks...

output:

1 1
87 1
36 1
247 1
163 1
200 1
264 1
228 1
83 1
34 2
143 1
52 1
97 1
158 1
88 1
127 1
229 1
238 1
323 1
45 1
328 1
157 1
198 1
120 1
254 1
208 1
265 1
237 1
151 1
140 1
126 1
173 1
176 1
63 1
86 2
140 1
248 2
338 1
65 1
342 1
318 1
190 1
137 1
151 1
272 1
106 1
282 1
194 1
95 1
196 1
135 1
159 1
88...

result:

ok 373485 lines

Test #48:

score: 0
Accepted
time: 2886ms
memory: 152576kb

input:

496121 ukyhzlkuxbfewvyojdexruirflzcyojxyiyzazbnqqamkxjxzhqglacfoxajrhaqazynzssznyzaqahrjaxofcalgqhzxjxkmaqqnbzazyiyxjoyczlfriurxedjoyvwefbxuklzhykuukyhzlkuxbfewvyojdexruirflzcyojxyiyzazbnqqamkxjxzhqglacfoxajrhaqazynzssznyzaqahrjaxofcalgqhzxjxkmaqqnbzazyiyxjoyczlfriurxedjoyvwefbxuklzhykuukyhzlkuxbfew...

output:

27 2
42 1
16 1
39 1
43 1
62 1
60 1
46 1
34 1
59 1
32 1
11 1
18 1
15 1
58 1
16 1
48 1
15 1
40 1
43 1
69 1
0 0
69 1
30 1
69 1
69 1
56 1
29 1
25 1
5 1
8 1
14 1
53 1
20 1
59 1
0 0
51 1
39 1
2 1
54 1
61 1
69 1
10 1
38 1
32 1
44 1
42 1
26 2
22 1
55 1
66 1
52 1
30 1
12 1
63 1
19 1
44 1
20 1
15 1
22 1
13 1
...

result:

ok 371154 lines

Test #49:

score: 0
Accepted
time: 480ms
memory: 146720kb

input:

474987 jwnjmvfuxldgdpywzdrheociakvdxfvjmmwyuoiveblxurzrqvetqidgjsnrthwunoapjsusmxtaueljoigheszqsitpisdvmrktmmeqpavnwlnmczxabgphadghhudazcrfnmdokdgavetopuabyypedweoytzsjfltzzucilwmgstxzfmaovakkkkhanagibtqvwzhsdvpqipxtxjgfctmcstjurgjunmltrdwrxcllxjslcofceqgqbunuskqynrhrrhaxpzqeknqfqolqyyrzpqxgrznkqajl...

output:

175157 1
190919 1
225612 1
94989 2
26227 2
89225 2
405926 1
38145 2
119572 1
34388 1
74688 2
356074 1
179262 2
101110 2
0 0
58512 1
174856 1
47974 2
42055 2
245418 2
68369 1
253045 1
53299 1
109144 1
1176 2
167400 1
99944 1
222341 1

result:

ok 28 lines

Extra Test:

score: 0
Extra Test Passed