QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#317512#8180. Bridge Eliminationucup-team1134AC ✓83ms4216kbC++2334.6kb2024-01-29 03:24:372024-01-29 03:24:38

Judging History

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

  • [2024-01-29 03:24:38]
  • 评测
  • 测评结果:AC
  • 用时:83ms
  • 内存:4216kb
  • [2024-01-29 03:24:37]
  • 提交

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 mod=998244353,MAX=2005,INF=1<<30;

// FPS 全部載せ

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

namespace atcoder {
    
    namespace internal {
        
        constexpr long long safe_mod(long long x, long long m) {
            x %= m;
            if (x < 0) x += m;
            return x;
        }
        
        struct barrett {
            unsigned int _m;
            unsigned long long im;
            
            barrett(unsigned int m) : _m(m), im((unsigned long long)(-1) / m + 1) {}
            
            unsigned int umod() const { return _m; }
            
            unsigned int mul(unsigned int a, unsigned int b) const {
                
                unsigned long long z = a;
                z *= b;
#ifdef _MSC_VER
                unsigned long long x;
                _umul128(z, im, &x);
#else
                unsigned long long x =
                (unsigned long long)(((unsigned __int128)(z)*im) >> 64);
#endif
                unsigned int v = (unsigned int)(z - x * _m);
                if (_m <= v) v += _m;
                return v;
            }
        };
        
        constexpr long long pow_mod_constexpr(long long x, long long n, int m) {
            if (m == 1) return 0;
            unsigned int _m = (unsigned int)(m);
            unsigned long long r = 1;
            unsigned long long y = safe_mod(x, m);
            while (n) {
                if (n & 1) r = (r * y) % _m;
                y = (y * y) % _m;
                n >>= 1;
            }
            return r;
        }
        
        constexpr bool is_prime_constexpr(int n) {
            if (n <= 1) return false;
            if (n == 2 || n == 7 || n == 61) return true;
            if (n % 2 == 0) return false;
            long long d = n - 1;
            while (d % 2 == 0) d /= 2;
            for (long long a : {2, 7, 61}) {
                long long t = d;
                long long y = pow_mod_constexpr(a, t, n);
                while (t != n - 1 && y != 1 && y != n - 1) {
                    y = y * y % n;
                    t <<= 1;
                }
                if (y != n - 1 && t % 2 == 0) {
                    return false;
                }
            }
            return true;
        }
        template <int n> constexpr bool is_prime = is_prime_constexpr(n);
        
        constexpr std::pair<long long, long long> inv_gcd(long long a, long long b) {
            a = safe_mod(a, b);
            if (a == 0) return {b, 0};
            
            long long s = b, t = a;
            long long m0 = 0, m1 = 1;
            
            while (t) {
                long long u = s / t;
                s -= t * u;
                m0 -= m1 * u;  // |m1 * u| <= |m1| * s <= b
                
                
                auto tmp = s;
                s = t;
                t = tmp;
                tmp = m0;
                m0 = m1;
                m1 = tmp;
            }
            if (m0 < 0) m0 += b / s;
            return {s, m0};
        }
        
        constexpr int primitive_root_constexpr(int m) {
            if (m == 2) return 1;
            if (m == 167772161) return 3;
            if (m == 469762049) return 3;
            if (m == 754974721) return 11;
            if (m == 998244353) return 3;
            int divs[20] = {};
            divs[0] = 2;
            int cnt = 1;
            int x = (m - 1) / 2;
            while (x % 2 == 0) x /= 2;
            for (int i = 3; (long long)(i)*i <= x; i += 2) {
                if (x % i == 0) {
                    divs[cnt++] = i;
                    while (x % i == 0) {
                        x /= i;
                    }
                }
            }
            if (x > 1) {
                divs[cnt++] = x;
            }
            for (int g = 2;; g++) {
                bool ok = true;
                for (int i = 0; i < cnt; i++) {
                    if (pow_mod_constexpr(g, (m - 1) / divs[i], m) == 1) {
                        ok = false;
                        break;
                    }
                }
                if (ok) return g;
            }
        }
        template <int m> constexpr int primitive_root = primitive_root_constexpr(m);
        
    }  // 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 <numeric>
#include <type_traits>

#ifdef _MSC_VER
#include <intrin.h>
#endif

namespace atcoder {
    
    namespace internal {
        
        struct modint_base {};
        struct static_modint_base : modint_base {};
        
        template <class T> using is_modint = std::is_base_of<modint_base, T>;
        template <class T> using is_modint_t = std::enable_if_t<is_modint<T>::value>;
        
    }  // namespace internal
    
    template <int m, std::enable_if_t<(1 <= m)>* = nullptr>
    struct static_modint : internal::static_modint_base {
        using mint = static_modint;
        
    public:
        static constexpr int mod() { return m; }
        static mint raw(int v) {
            mint x;
            x._v = v;
            return x;
        }
        
        static_modint() : _v(0) {}
        template <class T, internal::is_signed_int_t<T>* = nullptr>
        static_modint(T v) {
            long long x = (long long)(v % (long long)(umod()));
            if (x < 0) x += umod();
            _v = (unsigned int)(x);
        }
        template <class T, internal::is_unsigned_int_t<T>* = nullptr>
        static_modint(T v) {
            _v = (unsigned int)(v % umod());
        }
        static_modint(bool v) { _v = ((unsigned int)(v) % umod()); }
        
        unsigned int val() const { return _v; }
        
        mint& operator++() {
            _v++;
            if (_v == umod()) _v = 0;
            return *this;
        }
        mint& operator--() {
            if (_v == 0) _v = umod();
            _v--;
            return *this;
        }
        mint operator++(int) {
            mint result = *this;
            ++*this;
            return result;
        }
        mint operator--(int) {
            mint result = *this;
            --*this;
            return result;
        }
        
        mint& operator+=(const mint& rhs) {
            _v += rhs._v;
            if (_v >= umod()) _v -= umod();
            return *this;
        }
        mint& operator-=(const mint& rhs) {
            _v -= rhs._v;
            if (_v >= umod()) _v += umod();
            return *this;
        }
        mint& operator*=(const mint& rhs) {
            unsigned long long z = _v;
            z *= rhs._v;
            _v = (unsigned int)(z % umod());
            return *this;
        }
        mint& operator/=(const mint& rhs) { return *this = *this * rhs.inv(); }
        
        mint operator+() const { return *this; }
        mint operator-() const { return mint() - *this; }
        
        mint pow(long long n) const {
            assert(0 <= n);
            mint x = *this, r = 1;
            while (n) {
                if (n & 1) r *= x;
                x *= x;
                n >>= 1;
            }
            return r;
        }
        mint inv() const {
            if (prime) {
                assert(_v);
                return pow(umod() - 2);
            } else {
                auto eg = internal::inv_gcd(_v, m);
                assert(eg.first == 1);
                return eg.second;
            }
        }
        
        friend mint operator+(const mint& lhs, const mint& rhs) {
            return mint(lhs) += rhs;
        }
        friend mint operator-(const mint& lhs, const mint& rhs) {
            return mint(lhs) -= rhs;
        }
        friend mint operator*(const mint& lhs, const mint& rhs) {
            return mint(lhs) *= rhs;
        }
        friend mint operator/(const mint& lhs, const mint& rhs) {
            return mint(lhs) /= rhs;
        }
        friend bool operator==(const mint& lhs, const mint& rhs) {
            return lhs._v == rhs._v;
        }
        friend bool operator!=(const mint& lhs, const mint& rhs) {
            return lhs._v != rhs._v;
        }
        
    private:
        unsigned int _v;
        static constexpr unsigned int umod() { return m; }
        static constexpr bool prime = internal::is_prime<m>;
    };
    
    template <int id> struct dynamic_modint : internal::modint_base {
        using mint = dynamic_modint;
        
    public:
        static int mod() { return (int)(bt.umod()); }
        static void set_mod(int m) {
            assert(1 <= m);
            bt = internal::barrett(m);
        }
        static mint raw(int v) {
            mint x;
            x._v = v;
            return x;
        }
        
        dynamic_modint() : _v(0) {}
        template <class T, internal::is_signed_int_t<T>* = nullptr>
        dynamic_modint(T v) {
            long long x = (long long)(v % (long long)(mod()));
            if (x < 0) x += mod();
            _v = (unsigned int)(x);
        }
        template <class T, internal::is_unsigned_int_t<T>* = nullptr>
        dynamic_modint(T v) {
            _v = (unsigned int)(v % mod());
        }
        dynamic_modint(bool v) { _v = ((unsigned int)(v) % mod()); }
        
        unsigned int val() const { return _v; }
        
        mint& operator++() {
            _v++;
            if (_v == umod()) _v = 0;
            return *this;
        }
        mint& operator--() {
            if (_v == 0) _v = umod();
            _v--;
            return *this;
        }
        mint operator++(int) {
            mint result = *this;
            ++*this;
            return result;
        }
        mint operator--(int) {
            mint result = *this;
            --*this;
            return result;
        }
        
        mint& operator+=(const mint& rhs) {
            _v += rhs._v;
            if (_v >= umod()) _v -= umod();
            return *this;
        }
        mint& operator-=(const mint& rhs) {
            _v += mod() - rhs._v;
            if (_v >= umod()) _v -= umod();
            return *this;
        }
        mint& operator*=(const mint& rhs) {
            _v = bt.mul(_v, rhs._v);
            return *this;
        }
        mint& operator/=(const mint& rhs) { return *this = *this * rhs.inv(); }
        
        mint operator+() const { return *this; }
        mint operator-() const { return mint() - *this; }
        
        mint pow(long long n) const {
            assert(0 <= n);
            mint x = *this, r = 1;
            while (n) {
                if (n & 1) r *= x;
                x *= x;
                n >>= 1;
            }
            return r;
        }
        mint inv() const {
            auto eg = internal::inv_gcd(_v, mod());
            assert(eg.first == 1);
            return eg.second;
        }
        
        friend mint operator+(const mint& lhs, const mint& rhs) {
            return mint(lhs) += rhs;
        }
        friend mint operator-(const mint& lhs, const mint& rhs) {
            return mint(lhs) -= rhs;
        }
        friend mint operator*(const mint& lhs, const mint& rhs) {
            return mint(lhs) *= rhs;
        }
        friend mint operator/(const mint& lhs, const mint& rhs) {
            return mint(lhs) /= rhs;
        }
        friend bool operator==(const mint& lhs, const mint& rhs) {
            return lhs._v == rhs._v;
        }
        friend bool operator!=(const mint& lhs, const mint& rhs) {
            return lhs._v != rhs._v;
        }
        
    private:
        unsigned int _v;
        static internal::barrett bt;
        static unsigned int umod() { return bt.umod(); }
    };
    template <int id> internal::barrett dynamic_modint<id>::bt = 998244353;
    
    using modint998244353 = static_modint<998244353>;
    using modint1000000007 = static_modint<1000000007>;
    using modint = dynamic_modint<-1>;
    
    namespace internal {
        
        template <class T>
        using is_static_modint = std::is_base_of<internal::static_modint_base, T>;
        
        template <class T>
        using is_static_modint_t = std::enable_if_t<is_static_modint<T>::value>;
        
        template <class> struct is_dynamic_modint : public std::false_type {};
        template <int id>
        struct is_dynamic_modint<dynamic_modint<id>> : public std::true_type {};
        
        template <class T>
        using is_dynamic_modint_t = std::enable_if_t<is_dynamic_modint<T>::value>;
        
    }  // namespace internal
    
}  // namespace atcoder

#include <cassert>
#include <type_traits>
#include <vector>

namespace atcoder {
    
    namespace internal {
        
        template <class mint, internal::is_static_modint_t<mint>* = nullptr>
        void butterfly(std::vector<mint>& a) {
            static constexpr int g = internal::primitive_root<mint::mod()>;
            int n = int(a.size());
            int h = internal::ceil_pow2(n);
            
            static bool first = true;
            static mint sum_e[30];  // sum_e[i] = ies[0] * ... * ies[i - 1] * es[i]
            if (first) {
                first = false;
                mint es[30], ies[30];  // es[i]^(2^(2+i)) == 1
                int cnt2 = bsf(mint::mod() - 1);
                mint e = mint(g).pow((mint::mod() - 1) >> cnt2), ie = e.inv();
                for (int i = cnt2; i >= 2; i--) {
                    es[i - 2] = e;
                    ies[i - 2] = ie;
                    e *= e;
                    ie *= ie;
                }
                mint now = 1;
                for (int i = 0; i < cnt2 - 2; i++) {
                    sum_e[i] = es[i] * now;
                    now *= ies[i];
                }
            }
            for (int ph = 1; ph <= h; ph++) {
                int w = 1 << (ph - 1), p = 1 << (h - ph);
                mint now = 1;
                for (int s = 0; s < w; s++) {
                    int offset = s << (h - ph + 1);
                    for (int i = 0; i < p; i++) {
                        auto l = a[i + offset];
                        auto r = a[i + offset + p] * now;
                        a[i + offset] = l + r;
                        a[i + offset + p] = l - r;
                    }
                    now *= sum_e[bsf(~(unsigned int)(s))];
                }
            }
        }
        
        template <class mint, internal::is_static_modint_t<mint>* = nullptr>
        void butterfly_inv(std::vector<mint>& a) {
            static constexpr int g = internal::primitive_root<mint::mod()>;
            int n = int(a.size());
            int h = internal::ceil_pow2(n);
            
            static bool first = true;
            static mint sum_ie[30];  // sum_ie[i] = es[0] * ... * es[i - 1] * ies[i]
            if (first) {
                first = false;
                mint es[30], ies[30];  // es[i]^(2^(2+i)) == 1
                int cnt2 = bsf(mint::mod() - 1);
                mint e = mint(g).pow((mint::mod() - 1) >> cnt2), ie = e.inv();
                for (int i = cnt2; i >= 2; i--) {
                    es[i - 2] = e;
                    ies[i - 2] = ie;
                    e *= e;
                    ie *= ie;
                }
                mint now = 1;
                for (int i = 0; i < cnt2 - 2; i++) {
                    sum_ie[i] = ies[i] * now;
                    now *= es[i];
                }
            }
            
            for (int ph = h; ph >= 1; ph--) {
                int w = 1 << (ph - 1), p = 1 << (h - ph);
                mint inow = 1;
                for (int s = 0; s < w; s++) {
                    int offset = s << (h - ph + 1);
                    for (int i = 0; i < p; i++) {
                        auto l = a[i + offset];
                        auto r = a[i + offset + p];
                        a[i + offset] = l + r;
                        a[i + offset + p] =
                        (unsigned long long)(mint::mod() + l.val() - r.val()) *
                        inow.val();
                    }
                    inow *= sum_ie[bsf(~(unsigned int)(s))];
                }
            }
        }
        
    }  // namespace internal
    
    template <class mint, internal::is_static_modint_t<mint>* = nullptr>
    std::vector<mint> convolution(std::vector<mint> a, std::vector<mint> b) {
        int n = int(a.size()), m = int(b.size());
        if (!n || !m) return {};
        if (std::min(n, m) <= 60) {
            if (n < m) {
                std::swap(n, m);
                std::swap(a, b);
            }
            std::vector<mint> ans(n + m - 1);
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++) {
                    ans[i + j] += a[i] * b[j];
                }
            }
            return ans;
        }
        int z = 1 << internal::ceil_pow2(n + m - 1);
        a.resize(z);
        internal::butterfly(a);
        b.resize(z);
        internal::butterfly(b);
        for (int i = 0; i < z; i++) {
            a[i] *= b[i];
        }
        internal::butterfly_inv(a);
        a.resize(n + m - 1);
        mint iz = mint(z).inv();
        for (int i = 0; i < n + m - 1; i++) a[i] *= iz;
        return a;
    }
    
    template <unsigned int mod = 998244353,
    class T,
    std::enable_if_t<internal::is_integral<T>::value>* = nullptr>
    std::vector<T> convolution(const std::vector<T>& a, const std::vector<T>& b) {
        int n = int(a.size()), m = int(b.size());
        if (!n || !m) return {};
        
        using mint = static_modint<mod>;
        std::vector<mint> a2(n), b2(m);
        for (int i = 0; i < n; i++) {
            a2[i] = mint(a[i]);
        }
        for (int i = 0; i < m; i++) {
            b2[i] = mint(b[i]);
        }
        auto c2 = convolution(move(a2), move(b2));
        std::vector<T> c(n + m - 1);
        for (int i = 0; i < n + m - 1; i++) {
            c[i] = c2[i].val();
        }
        return c;
    }
    
    std::vector<long long> convolution_ll(const std::vector<long long>& a,
                                          const std::vector<long long>& b) {
        int n = int(a.size()), m = int(b.size());
        if (!n || !m) return {};
        
        static constexpr unsigned long long MOD1 = 754974721;  // 2^24
        static constexpr unsigned long long MOD2 = 167772161;  // 2^25
        static constexpr unsigned long long MOD3 = 469762049;  // 2^26
        static constexpr unsigned long long M2M3 = MOD2 * MOD3;
        static constexpr unsigned long long M1M3 = MOD1 * MOD3;
        static constexpr unsigned long long M1M2 = MOD1 * MOD2;
        static constexpr unsigned long long M1M2M3 = MOD1 * MOD2 * MOD3;
        
        static constexpr unsigned long long i1 =
        internal::inv_gcd(MOD2 * MOD3, MOD1).second;
        static constexpr unsigned long long i2 =
        internal::inv_gcd(MOD1 * MOD3, MOD2).second;
        static constexpr unsigned long long i3 =
        internal::inv_gcd(MOD1 * MOD2, MOD3).second;
        
        auto c1 = convolution<MOD1>(a, b);
        auto c2 = convolution<MOD2>(a, b);
        auto c3 = convolution<MOD3>(a, b);
        
        std::vector<long long> c(n + m - 1);
        for (int i = 0; i < n + m - 1; i++) {
            unsigned long long x = 0;
            x += (c1[i] * i1) % MOD1 * M2M3;
            x += (c2[i] * i2) % MOD2 * M1M3;
            x += (c3[i] * i3) % MOD3 * M1M2;
            long long diff =
            c1[i] - internal::safe_mod((long long)(x), (long long)(MOD1));
            if (diff < 0) diff += MOD1;
            static constexpr unsigned long long offset[5] = {
                0, 0, M1M2M3, 2 * M1M2M3, 3 * M1M2M3};
            x -= offset[diff % 5];
            c[i] = x;
        }
        
        return c;
    }
    
}  // namespace atcoder

using mint=atcoder::modint998244353;

vector<mint> prebat(vector<mint> S,int szsum){
    int z = 1 << atcoder::internal::ceil_pow2(szsum-1);
    auto res=S;
    res.resize(z);
    atcoder::internal::butterfly(res);
    return res;
}
// szsum = aの配列の長さ + bの配列の長さ

vector<mint> sufbat(vector<mint> S,int szsum){
    int z = 1 << atcoder::internal::ceil_pow2(szsum-1);
    auto res=S;
    atcoder::internal::butterfly_inv(res);
    res.resize(szsum-1);
    mint iz = mint(z).inv();
    for (int i = 0; i < szsum - 1; i++) res[i] *= iz;
    return res;
}
// szsum = aの配列の長さ + bの配列の長さ

mint inv[MAX],fac[MAX],finv[MAX];

void make(){
    
    fac[0]=fac[1]=1;
    finv[0]=finv[1]=1;
    inv[1]=1;
    
    for(int i=2;i<MAX;i++){
        inv[i]=-inv[mod%i]*(mod/i);
        fac[i]=fac[i-1]*i;
        finv[i]=finv[i-1]*inv[i];
    }
}

mint comb(ll a,ll b){
    if(a<b) return 0;
    return fac[a]*finv[b]*finv[a-b];
}

mint perm(ll a,ll b){
    if(a<b) return 0;
    return fac[a]*finv[a-b];
}

vector<mint> bibun(vector<mint> F,int deg){
    vector<mint> res(deg+1);
    for(int i=1;i<si(F)&&i-1<=deg;i++){
        res[i-1]=F[i]*i;
    }
    
    return res;
}

vector<mint> sekibun(vector<mint> F,int deg){
    vector<mint> res(deg+1);
    for(int i=0;i<min(si(F),deg);i++){
        res[i+1]=F[i]*inv[i+1];
    }
    
    return res;
}

vector<mint> invv(vector<mint> F,int deg){
    assert(F[0]!=0);
    
    mint kake=mint(F[0]).inv();
    for(int i=0;i<si(F);i++){
        F[i]*=kake;
    }
    vector<mint> G(1,1);
    int len=1;
    while(len<=deg){
        vector<mint> f=F;f.resize(len*2);
        vector<mint> g=G;g.resize(len*2);
        
        atcoder::internal::butterfly(f);
        atcoder::internal::butterfly(g);
        
        for(int i=0;i<len*2;i++) f[i]*=g[i];
        
        atcoder::internal::butterfly_inv(f);
        vector<mint> nf(len*2);
        for(int i=len;i<2*len;i++) nf[i-len]=f[i];
        
        f=nf;
        atcoder::internal::butterfly(f);
        
        for(int i=0;i<len*2;i++) f[i]*=g[i];
        
        atcoder::internal::butterfly_inv(f);
        
        mint iz=mint(len*2).inv();
        mint coe=-iz*iz;
        
        G.resize(len*2);
        
        for(int i=0;i<len;i++) G[len+i]=f[i]*coe;
        
        len*=2;
    }
    
    G.resize(deg+1);
    for(int i=0;i<=deg;i++) G[i]*=kake;
    
    return G;
}//1/Tのdeg次以下を返す

vector<mint> logg(vector<mint> F,int deg){
    assert(F[0]==1);
    
    vector<mint> FF=bibun(F,deg);
    vector<mint> waru=invv(F,deg);
    
    vector<mint> G=atcoder::convolution(FF,waru);
    
    G=sekibun(G,deg);
    
    return G;
}
// F0 = 1

vector<mint> expp(vector<mint> F,int deg){
    if(si(F)){
        assert(F[0]==0);
    }
    
    vector<mint> G(1,1);
    int len=1;
    while(len<=deg){
        vector<mint> nex=logg(G,len*2-1);
        for(int i=0;i<si(nex);i++) nex[i]*=(-1);
        for(int i=0;i<si(nex);i++){
            if(i<si(F)) nex[i]+=F[i];
        }
        nex[0]++;
        nex=atcoder::convolution(nex,G);
        nex.resize(len*2);
        
        len*=2;
        G=nex;
    }
    
    G.resize(deg+1);
    
    return G;
}
// F0 = 0

vector<mint> poww(vector<mint> F,int deg,ll K){
    if(K==0){
        vector<mint> res(deg+1);
        res[0]=1;
        return res;
    }
    if(si(F)==0){
        vector<mint> res(deg+1);
        return res;
    }
    
    ll geta=-1;
    mint kake=0;
    for(int i=0;i<si(F);i++){
        if(F[i]!=0){
            geta=i;
            kake=F[i].inv();
            break;
        }
    }
    
    if(geta==-1){
        vector<mint> res(deg+1);
        return res;
    }
    
    if(geta>1000000000LL/K){
        vector<mint> res(deg+1);
        return res;
    }
    if(geta*K>deg){
        vector<mint> res(deg+1);
        return res;
    }
    
    vector<mint> nF(si(F)-geta);
    for(int i=geta;i<si(F);i++){
        nF[i-geta]=(F[i]*kake);
    }
    
    F=nF;
    
    vector<mint> FF=logg(nF,deg-geta*K);
    for(int i=0;i<si(FF);i++) FF[i]*=K;
    
    vector<mint> G=expp(FF,deg-geta*K);
    
    kake=kake.inv();
    kake=kake.pow(K);
    
    vector<mint> res(deg+1);
    for(int i=0;i<si(G);i++){
        res[geta*K+i]=G[i]*kake;
    }
    
    return res;
}

mint senkeizenka(vector<mint> A,vector<mint> C,ll K){
    if(K<si(A)) return A[K];
    
    int D=si(A);
    assert(si(A)==si(C));
    vector<mint> Q(D+1);
    Q[0]=1;
    for(int i=1;i<=D;i++) Q[i]=-C[i-1];
    
    auto P=atcoder::convolution(A,Q);
    P.resize(D);
    
    while(K){
        auto Qneg=Q;
        for(int i=1;i<si(Qneg);i+=2) Qneg[i]=-Qneg[i];
        auto x=atcoder::convolution(P,Qneg);
        auto y=atcoder::convolution(Q,Qneg);
        
        P.clear();
        Q.clear();
        for(int i=(K&1);i<si(x);i+=2) P.push_back(x[i]);
        for(int i=0;i<si(y);i+=2) Q.push_back(y[i]);
        K/=2;
    }
    
    return P[0]/Q[0];
}
//a[0],...,a[d-1]
//c[1],...,c[d]

mint senkeizenka2(vector<mint> P,vector<mint> Q,ll K){
    
    while(K){
        auto Qneg=Q;
        for(int i=1;i<si(Qneg);i+=2) Qneg[i]=-Qneg[i];
        auto x=atcoder::convolution(P,Qneg);
        auto y=atcoder::convolution(Q,Qneg);
        
        P.clear();
        Q.clear();
        for(int i=(K&1);i<si(x);i+=2) P.push_back(x[i]);
        for(int i=0;i<si(y);i+=2) Q.push_back(y[i]);
        K/=2;
    }
    
    return P[0]/Q[0];
}
// P/Q

// make() を呼ばないとsekibun呼ぶやつで一部バグる
// MAX=2*deg ぐらい必要な気がする

pair<vector<mint>,vector<mint>> warizan(vector<mint> P,vector<mint> Q){
    if(si(P)<si(Q)) return mp(vector<mint>{},P);
    
    auto revP=P;reverse(all(revP));
    auto revQ=Q;reverse(all(revQ));
    revQ=invv(revQ,si(P)-si(Q));
    auto shou=atcoder::convolution(revP,revQ);
    shou.resize(si(P)-si(Q)+1);
    reverse(all(shou));
    
    auto hiku=atcoder::convolution(Q,shou);
    
    vector<mint> amari(si(P));
    for(int i=0;i<si(P);i++){
        amari[i]=P[i]-hiku[i];
    }
    while(si(shou)&&shou.back()==0) shou.pop_back();
    while(si(amari)&&amari.back()==0) amari.pop_back();
    return mp(shou,amari);
}
// 最高位が0でないようにしている(0のときは空)
// 多項式での除算

vector<mint> multieval(vector<mint> P,vector<mint> que){
    if(si(que)==0) return {};
    int N=si(que),n=1;
    while(n<N) n*=2;
    que.resize(n);
    
    vector<vector<mint>> Atree(n+n-1),Btree(n+n-1);
    for(int i=0;i<n;i++) Atree[n-1+i]={-que[i],1};
    for(int i=n-2;i>=0;i--){
        Atree[i]=atcoder::convolution(Atree[2*i+1],Atree[2*i+2]);
    }
    
    Btree[0]=warizan(P,Atree[0]).se;
    for(int i=1;i<n+n-1;i++){
        Btree[i]=warizan(Btree[(i-1)/2],Atree[i]).se;
    }
    
    vector<mint> res(N,0);
    for(int i=0;i<N;i++){
        if(si(Btree[n-1+i])) res[i]=Btree[n-1+i][0];
    }
    
    return res;
}

vector<mint> multieval_touhi(vector<mint> P,mint w,int M){
    if(M==0) return {};
    
    int N=si(P);
    
    if(N==0) return vector<mint>(M,0);
    
    if(w==0){
        vector<mint> res(M,P[0]);
        res[0]=0;
        for(int i=0;i<N;i++) res[0]+=P[i];
        return res;
    }
    
    vector<mint> y(N),v(N+M-1);
    for(ll i=0;i<N;i++) y[i]=P[i]/w.pow(i*(i-1)/2);
    for(ll i=0;i<N+M-1;i++) v[i]=w.pow(i*(i-1)/2);
    
    reverse(all(y));
    
    auto z=atcoder::convolution(y,v);
    
    vector<mint> res(M);
    
    for(ll i=0;i<M;i++){
        res[i]=z[N-1+i]/w.pow(i*(i-1)/2);
    }
    
    return res;
}
// w^0,...,w^(M-1)まで答える
// 0^0=1

vector<mint> Bernoulli(int N){
    vector<mint> F(N+1);
    for(int i=0;i<=N;i++) F[i]=finv[i+1];
    F=invv(F,N);
    
    for(int i=0;i<=N;i++){
        F[i]*=fac[i];
    }
    return F;
}

vector<mint> Taylor_Shift(vector<mint> F,ll c){
    int N=si(F);
    vector<mint> A(N),B(N);
    for(int i=0;i<N;i++){
        A[i]=F[N-1-i]*fac[N-1-i];
        B[i]=finv[i]*mint(c).pow(i);
    }
    
    vector<mint> p=atcoder::convolution(A,B);
    
    for(int i=0;i<N;i++) p[i]*=finv[N-1-i];
    
    vector<mint> res(N);
    
    for(int i=0;i<N;i++) res[i]=p[N-1-i];
    
    return res;
}

vector<mint> manyproduct(vector<vector<mint>> S){
    deque<vector<mint>> deq;
    for(auto a:S) deq.push_back(a);
    while(si(deq)>1){
        auto a=deq.front();deq.pop_front();
        auto b=deq.front();deq.pop_front();
        deq.push_back(atcoder::convolution(a,b));
    }
    return deq[0];
}

vector<mint> PrefixSum(vector<mint> p){
    int N=si(p);
    vector<mint> f(N);
    for(int i=1;i<N;i++) f[i]=p[i]*fac[i];
    
    vector<mint> Be=Bernoulli(N);
    if(si(Be)>1) Be[1]=-Be[1];
    
    vector<mint> g(N);
    for(int j=0;j<N;j++) g[j]=Be[j]*finv[j];
    reverse(all(g));
    
    auto h=atcoder::convolution(f,g);
    
    vector<mint> res(N+1);
    for(int i=1;i<=N;i++){
        res[i]=h[N-2+i]*finv[i];
    }
    
    res[0]+=p[0];
    res[1]+=p[0];
    
    return res;
}

mint zen[MAX],f[MAX],S[MAX];

int main(){
    
    std::ifstream in("text.txt");
    std::cin.rdbuf(in.rdbuf());
    cin.tie(0);
    ios::sync_with_stdio(false);
    
    make();
    
    int N;cin>>N;
    vector<ll> A(N);
    for(int i=0;i<N;i++) cin>>A[i];
    
    if(N==1){
        cout<<A[0]<<endl;
        return 0;
    }
    
    if(N==2){
        cout<<(A[0]*A[1])%mod<<endl;
        return 0;
    }
    
    for(ll n=1;n<=N;n++){
        zen[n]=mint(2).pow(n*(n-1)/2);
        f[n]=zen[n];
        for(ll i=1;i<n;i++) f[n]-=comb(n-1,i-1)*f[i]*zen[n-i];
    }
    
    S[1]=1;
    for(ll n=3;n<N;n++){
        S[n]=f[n];
        
        vector<mint> T(n);
        for(ll j=1;j<n;j++) T[j]=S[j]*finv[j-1]*n;
        auto Z=expp(T,n);
        
        S[n]-=fac[n]*(mint(n).inv().pow(2))*Z[n];
    }
    
    vector<vector<mint>> B;
    for(ll x:A) B.push_back({1,x});
    auto C=manyproduct(B);
    
    ll n=N;
    
    mint ans=0;
    
    S[n]=f[n];
    
    vector<mint> T(n),TT(n);
    for(ll j=1;j<n;j++) T[j]=S[j]*finv[j-1]*n;
    for(ll j=1;j<n;j++) TT[j-1]=S[j]*finv[j-1]*j*n;
    
    auto Z=T,ZZ=TT;
    for(ll k=2;k<=n;k++){
        Z=atcoder::convolution(Z,T);
        Z.resize(n+1);
        ZZ=atcoder::convolution(ZZ,TT);
        ZZ.resize(n+1);
        
        ans+=fac[n-k]*(mint(n).inv().pow(2))*ZZ[n-k]*C[k];
        
        S[n]-=fac[n]*(mint(n).inv().pow(2))*finv[k]*Z[n];
    }
    
    ans+=S[n]*C[1];
    
    cout<<ans.val()<<"\n";
}


Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

3
8 5 9

output:

1102

result:

ok "1102"

Test #2:

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

input:

5
4 2 1 3 10

output:

63860

result:

ok "63860"

Test #3:

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

input:

7
229520041 118275986 281963154 784360383 478705114 655222915 970715006

output:

35376232

result:

ok "35376232"

Test #4:

score: 0
Accepted
time: 51ms
memory: 3912kb

input:

300
7 8 2 8 6 5 5 3 2 3 8 0 6 0 1 0 10 7 10 0 1 0 6 7 2 6 4 7 9 4 6 5 5 9 8 5 4 5 3 5 4 4 10 2 4 9 7 5 2 2 5 6 3 6 8 2 8 3 6 2 5 1 10 3 0 7 1 9 6 5 10 0 3 0 2 4 2 7 6 10 1 0 0 9 4 3 5 5 2 6 1 8 5 4 0 0 5 8 8 1 3 9 9 9 8 1 4 10 7 4 8 5 0 4 3 4 4 8 1 6 1 10 9 3 2 5 0 0 5 2 7 5 4 10 3 5 10 10 7 6 10 3 ...

output:

409590176

result:

ok "409590176"

Test #5:

score: 0
Accepted
time: 63ms
memory: 3972kb

input:

335
4 3 7 7 8 1 4 7 8 8 4 3 5 5 6 8 8 9 3 7 2 4 6 6 6 3 0 7 8 4 6 1 9 10 9 9 0 7 10 3 3 4 10 5 10 4 10 3 7 7 1 9 8 4 0 3 8 1 10 10 7 5 2 7 6 0 4 7 5 9 1 4 10 3 2 9 2 0 1 5 3 5 5 9 9 3 5 6 10 6 9 5 10 10 8 10 5 9 6 1 10 6 7 1 0 7 10 1 6 7 8 2 2 10 1 3 4 1 5 3 3 2 4 10 3 5 8 0 10 0 9 4 9 2 7 3 8 7 4 7...

output:

997747

result:

ok "997747"

Test #6:

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

input:

84
2 5 3 4 5 8 10 5 2 10 7 6 10 10 7 7 3 2 1 7 8 5 9 10 7 5 6 1 2 8 2 8 6 5 4 6 9 0 3 9 3 2 0 2 9 0 4 4 8 10 3 4 6 10 10 5 8 1 10 8 2 7 3 10 8 8 3 2 8 7 4 10 2 6 9 9 3 6 3 3 9 0 7 6

output:

182929290

result:

ok "182929290"

Test #7:

score: 0
Accepted
time: 2ms
memory: 4092kb

input:

54
9 2 1 10 6 6 10 4 7 6 0 3 8 10 5 7 8 6 1 10 9 6 1 8 0 4 2 7 4 0 9 8 5 3 0 4 3 6 1 8 4 1 4 9 6 6 8 0 8 0 0 7 6 9

output:

43066240

result:

ok "43066240"

Test #8:

score: 0
Accepted
time: 1ms
memory: 3800kb

input:

32
0 8 6 8 1 3 9 5 9 0 4 2 4 4 3 10 2 3 1 8 2 6 5 3 9 5 0 0 5 2 1 4

output:

718335570

result:

ok "718335570"

Test #9:

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

input:

1
998244352

output:

998244352

result:

ok "998244352"

Test #10:

score: 0
Accepted
time: 82ms
memory: 3992kb

input:

400
998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244...

output:

764763555

result:

ok "764763555"

Test #11:

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

input:

85
998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 9982443...

output:

360553407

result:

ok "360553407"

Test #12:

score: 0
Accepted
time: 19ms
memory: 4128kb

input:

191
998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244352 998244...

output:

991556265

result:

ok "991556265"

Test #13:

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

input:

5
998244352 998244352 998244352 998244352 998244352

output:

998243313

result:

ok "998243313"

Test #14:

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

input:

1
1

output:

1

result:

ok "1"

Test #15:

score: 0
Accepted
time: 82ms
memory: 3868kb

input:

400
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

output:

304058802

result:

ok "304058802"

Test #16:

score: 0
Accepted
time: 78ms
memory: 3916kb

input:

386
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

output:

874115996

result:

ok "874115996"

Test #17:

score: 0
Accepted
time: 56ms
memory: 3988kb

input:

313
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

output:

597837845

result:

ok "597837845"

Test #18:

score: 0
Accepted
time: 41ms
memory: 3908kb

input:

268
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

output:

419739297

result:

ok "419739297"

Test #19:

score: 0
Accepted
time: 2ms
memory: 3856kb

input:

54
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

output:

643244867

result:

ok "643244867"

Test #20:

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

input:

48
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

output:

338935899

result:

ok "338935899"

Test #21:

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

input:

12
1 1 1 1 1 1 1 1 1 1 1 1

output:

530659406

result:

ok "530659406"

Test #22:

score: 0
Accepted
time: 1ms
memory: 3788kb

input:

16
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

output:

873741770

result:

ok "873741770"

Test #23:

score: 0
Accepted
time: 70ms
memory: 4196kb

input:

358
1115290 857418774 525660612 441235960 968251556 195367707 499270374 150410361 311616821 559224631 56376437 943235745 210570297 973440142 173148033 156186709 113638344 240700037 220654177 232430149 10319333 895951986 632968612 969427208 953160305 662164174 33843437 666747237 34205190 811103418 41...

output:

286780900

result:

ok "286780900"

Test #24:

score: 0
Accepted
time: 61ms
memory: 4216kb

input:

344
210579027 582997879 503991744 614640417 67235757 419878515 164535437 554084256 51607125 652025880 891447125 13583488 80121136 152736049 421847155 801187930 34239618 40500488 767047613 353848772 24784010 319866280 913730443 802405315 9245074 512437704 262407695 883841184 511503173 334945884 19176...

output:

217532565

result:

ok "217532565"

Test #25:

score: 0
Accepted
time: 59ms
memory: 3980kb

input:

325
630363144 393404219 366794662 459012744 644644744 90410787 930109789 246555884 917192211 5371492 414476764 571657222 667592533 200323050 421503836 125424416 264941519 988742481 275608116 281878470 441716151 276997372 469030579 287933529 258099275 745817136 121648206 734858183 6675212 48521173 17...

output:

805089310

result:

ok "805089310"

Test #26:

score: 0
Accepted
time: 83ms
memory: 3976kb

input:

400
823489320 406308599 710963770 183707427 192930969 941365774 318564299 391028855 945374838 651744270 515755727 220857626 599403217 214957584 335628890 771694833 40989299 34892948 630275822 869708185 432704750 924850167 707864789 232688853 406616372 529994171 782650336 979286144 653704962 98275198...

output:

227120863

result:

ok "227120863"

Test #27:

score: 0
Accepted
time: 83ms
memory: 3992kb

input:

400
805673855 954340879 768398694 792304488 160627816 690839001 634355243 680917132 889295686 174793413 162216449 663827931 792641124 536196712 718524372 416336507 377989502 506596252 498339899 205499242 720836814 666357765 542341092 715613501 108264501 828631634 378880723 4945299 472651139 36366555...

output:

197153359

result:

ok "197153359"

Test #28:

score: 0
Accepted
time: 83ms
memory: 3928kb

input:

400
573858409 158564131 626297515 95107209 839325592 131488841 262394741 598473086 279712965 923126037 768477685 872125938 43550359 350073805 625331165 631979459 231780563 364979372 994161997 417207682 561100817 652033756 620534272 372707170 800776175 349668140 135175766 794164905 319904460 23767601...

output:

309947167

result:

ok "309947167"

Test #29:

score: 0
Accepted
time: 14ms
memory: 3792kb

input:

161
454284697 718044840 911733869 788445829 374976576 283555956 330659567 534673219 763772621 533686340 997431381 315009839 801324614 867648208 840434404 84390366 444646874 652727596 245127393 429009611 491221735 782941712 766298213 670004861 389539042 58372655 501168063 678515082 901575199 7964062 ...

output:

871565443

result:

ok "871565443"

Test #30:

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

input:

162
151292163 943012123 167343147 819676643 584819196 603260437 344227100 217480474 257123917 755733732 306150953 58563430 585700931 430100762 23364684 779598621 281842628 501243718 739611077 892539286 74267401 75305112 125317256 859095786 751541515 405943984 918972027 808877799 705127200 721405494 ...

output:

273432531

result:

ok "273432531"

Test #31:

score: 0
Accepted
time: 47ms
memory: 3912kb

input:

286
600838530 575651850 385279426 475664485 619069265 780822783 860939782 184686123 193863774 466950919 765401970 705574987 282843644 717393988 375193483 210523577 335822289 399592519 691770149 949281236 374732311 386267435 94137955 739197796 853274439 85692571 391770291 584612694 455182007 64033146...

output:

581998699

result:

ok "581998699"

Test #32:

score: 0
Accepted
time: 2ms
memory: 4088kb

input:

61
453833616 501467684 4992671 214825639 871776849 218199413 42498305 303731723 912156523 129282295 439845605 182960525 185237067 162024603 36559317 688854981 935232225 246423320 92982685 695989722 630828913 551225463 167009365 765939546 822255011 178394229 882957486 3774194 362820770 200498412 9203...

output:

455579427

result:

ok "455579427"

Test #33:

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

input:

25
900307596 286223988 229751451 948490346 250323590 175633754 171483351 707853698 603512678 51411170 126676903 326582510 111531585 521302732 467030281 284302822 453471425 898992972 344271140 632092014 841124127 159268130 234849517 332336122 538047172

output:

641428561

result:

ok "641428561"

Test #34:

score: 0
Accepted
time: 2ms
memory: 3788kb

input:

50
893955548 5432673 340595831 583427119 94992225 787645123 311038284 546749098 933218937 561482178 527027577 871516321 329687526 96875316 862464008 320975040 435140352 951500073 831730146 242883780 961810021 310011134 441489680 217976348 203907166 525210038 295522145 713990656 44280374 492792810 10...

output:

474987173

result:

ok "474987173"

Test #35:

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

input:

17
726738121 723815755 532257301 649033140 817058831 665912348 585846647 472719308 53020833 679093694 601943548 536712177 917063040 137577090 676474390 447455603 55046910

output:

205253339

result:

ok "205253339"

Test #36:

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

input:

13
319526944 707203324 397137993 712092752 253972256 682960643 636749775 764641774 359483944 695780350 619279205 717907790 322375408

output:

301609478

result:

ok "301609478"

Test #37:

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

input:

15
673123463 250231589 715576329 413978055 995958701 401244843 682058967 349009605 504949036 838330837 739330277 480154478 764761812 434210368 470676772

output:

460419982

result:

ok "460419982"

Extra Test:

score: 0
Extra Test Passed