#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define lowbit(x) ((x) & -(x)) #define lson l,mid,id<<1 #define rson mid+1,r,id<<1|1 #define ls id<<1 #define rs id<<1|1 #define MID(l,r) ((l)+(((r)-(l))>>1)) #define fi first #define se second #define mk make_pair #define mt make_tuple #define pb push_back #define epb emplace_back #define all(a) a.begin(),a.end() #define rall(a) a.rbegin(),a.rend() using LL = long long; //using LL = __int64; using pii = pair; using pdd = pair; using pLL = pair; const int INF = 0x3f3f3f3f; const LL LINF = 0x3f3f3f3f3f3f3f3f; const double pi = acos(-1.0); const double eps = 1e-8; const int e5 = 100000; // 1e5 const int e6 = 1000000; //1e6; const int MOD_1e9 = 1000000007; //1e9 + 7 const int MOD_998 = 998244353; const int MOD = MOD_1e9; template< typename T = int > inline T read() { char c = '\0'; bool f = false; T x = 0; while(c < '0' || '9' < c) {if(c == '-') f = true; c = getchar();} while('0' <= c && c <= '9') {x = (x << 1) + (x << 3) + (c & 0xf); c = getchar();} if(f) return -x; return x; } template< typename T > inline void read(T &x) {x = read();} template< typename T, typename ...Args > inline void read(T &x, Args &...args) {read(x); read(args...);} template< typename T > inline void get_min(T &x, T y) {if(y < x) x = y;} template< typename T > inline void get_max(T &x, T y) {if(x < y) x = y;} template< typename T > inline void get_unique(vector &vec) {sort(all(vec)); vec.erase(unique(all(vec)), vec.end());} inline int sig(double x) {return x < -eps ? -1 : eps < x;} LL fp(LL a, LL n, LL mod = MOD) { if(n < 0) a = fp(a, mod - 2, mod), n = -n; LL res = 1; for(; n; n >>= 1, a = a * a % mod) if(n & 1) res = res * a % mod; return res; } template< int mod > struct Mint { int x; Mint():x(0) {} Mint(int _x): x(_x) {if(x < 0 || x >= mod) x %= mod; if(x < 0) x += mod;} Mint(LL _x) {if(_x < 0 || _x >= mod) _x %= mod; if(_x < 0) _x += mod; x = _x;} Mint operator - () const {return Mint(mod - x);} Mint operator + (const Mint &rhs) const {return Mint(x + rhs.x >= mod ? x + rhs.x - mod : x + rhs.x);} Mint operator - (const Mint &rhs) const {return Mint(x - rhs.x < 0 ? x - rhs.x + mod : x - rhs.x);} Mint operator * (const Mint &rhs) const {return Mint((LL)x * rhs.x % mod);} Mint operator / (const Mint &rhs) const {return Mint((LL)x * fp(rhs.x, -1, mod) % mod);} bool operator == (const Mint &rhs) const {return x == rhs.x;} bool operator != (const Mint &rhs) const {return x != rhs.x;} Mint &operator += (const Mint &rhs) {x += rhs.x; if(x >= mod) x -= mod; return *this;} Mint &operator -= (const Mint &rhs) {x -= rhs.x; if(x < 0) x += mod; return *this;} Mint &operator *= (const Mint &rhs) {x = (LL)x * rhs.x % mod; return *this;} Mint &operator /= (const Mint &rhs) {x = (LL)x * fp(rhs.x, -1, mod) % mod; return *this;} friend ostream &operator << (ostream &out, const Mint &rhs) {return out << to_string(rhs.x);} Mint inv() {return Mint(fp(x, -1, mod));} Mint pow(int k) {return Mint(fp(x, k, mod));} Mint pow(const Mint &t) {return Mint(fp(x, t.x, mod));} }; const int maxn = (int) 2e5 + 20; const int maxm = (int) 2e6 + 20; using mint = Mint; void work() { int n; cin >>n; vector a(n); for(int i = 0; i < n; i++) cin >>a[i]; mint ans = mint(a[0] / 2); // cout < xx, yy; for(int j = 0; j < x * 2; j++) { if(j % 2 == 0) xx.pb(mk(j * y, (j + 1) * y)); } for(int j = 0; j < y; j++) { if(j % 2 == 0) yy.pb(mk(j * x, (j + 1) * x)); } vector tmp(x * 2); for(int j = 0; j < 2 * x; j++) { int p = 0; int wcnt = 0, bcnt = 0; for(auto &pr : yy) { while(p < xx.size() && pr.fi >= xx[p].se) { p++; } if((xx[p].fi <= pr.fi && pr.fi < xx[p].se) || (xx[p].fi <= pr.se && pr.se < xx[p].se)) { bcnt++; } else { wcnt++; } } tmp[j] = wcnt; for(auto &pr : yy) { pr.fi++; pr.se++; } } // for(int j = 0; j < 2 * x; j++) // { // cout <