#include<bits/stdc++.h>using namespace std;const int N = 1e5 + 5;//树 struct tree{int to[N << 1], nxt[N << 1], hd[N], idx, w[N << 1];void add(int u, int v, int val) { to[++ idx] = v, nxt[idx] = hd[u], hd[u] = idx, w[idx] = val; }void dfs(int u, int fa){for(int i = hd[u]; i; i = nxt[i]) if(to[i] != fa){int v = to[i];//...dfs(v, u);//...}}
};//二叉树struct Binary_tree{int tr[N][2];void pre(int u){//objectsif(tr[u][0]) pre(tr[u][0]);if(tr[u][1]) pre(tr[u][1]);}void mid(int u){if(tr[u][0]) mid(tr[u][0]);//objectsif(tr[u][1]) mid(tr[u][1]);}void nxt(int u){if(tr[u][0]) nxt(tr[u][0]);if(tr[u][1]) nxt(tr[u][1]);//objects}
};//gcdint gcd(int a, int b){return b == 0 ? a : gcd(b, a % b);
} //素数筛namespace sushushai{bitset<1000001> vis;int p[1000010], cnt = 0;void shai(){for(int i = 2; i <= 1000000; i ++) {if(vis[i]) continue;p[++ cnt] = i;cerr<<i<<'\n'; //		if(1ll * i * i > 1000000ll) continue;for(int j = i * 2; j <= 1000000; j += i) vis[j] = 1;}for(int i = 1; i <= 25; i ++) cout<<p[i];} }//排列组合namespace CA{const int Mod = 1e9 + 7;int n, m, d[1000010], fac[1000010], ifac[1000010], h[1000010], stl[1010][1010], stl1[50010][205];int qp(int x, int y){ // 快速幂x %= Mod;int res = 1;while(y){if(y & 1) (res *= x) %= Mod;(x *= x) %= Mod;y >>= 1;}return res;}void init(){ // 阶乘、逆元预处理ifac[0] = fac[0] = 1;for(int i = 1; i <= 1000; i ++) fac[i] = fac[i - 1] * i % Mod;for(int i = 1; i <= 1000; i ++) ifac[i] = qp(fac[i], Mod - 2);}void inith(){ // 卡特兰数h[0] = 1;for(int i = 1; i <= 1000000; i ++) h[i] = h[i - 1] * (4 * i - 2) % Mod * qp(i + 1, Mod - 2) % Mod;}int C(int x, int y){ // 组合数return fac[x] % Mod * ifac[y] % Mod * ifac[x - y] % Mod;}void init2(){ // 错排d[0] = 1, d[1] = 0, d[2] = 1;for(int i = 3; i <= 1000000; i ++) d[i] = (i - 1) * (d[i - 1] + d[i - 2]) % Mod;}int calt(int x, bool k){ // 卡特兰; 1:预处理;2:现场处理if(k) return h[x];return (C(2 * x, x) - C(2 * x, x - 1) % Mod + Mod) % Mod;}void initstl(){ // 第二类斯特林数stl[0][0] = 1;for(int i = 1; i <= 1000; i ++){for(int j = 1; j <= i; j ++){stl[i][j] = (stl[i - 1][j - 1] + j * stl[i - 1][j] % Mod) % Mod;}}}void initstl1(){// 第一类斯特林数stl1[0][0] = 1;for(int i = 1; i <= 50000; i ++){for(int j = 1; j <= min(i, 200); j ++){stl1[i][j] = (stl1[i - 1][j - 1] + (i - 1) * stl1[i - 1][j] % Mod) % Mod;}}}
} //单调namespace monotonous{int n, ans[3000010], q[3000010], a[3000010];stack<int> st;void mstack(){ //单调栈 for(int i = 1; i <= n; i ++){while(!st.empty() && a[st.top()] < a[i]){int id = st.top();st.pop();ans[id] = i;}st.push(i);} } void mqueue(){int ll = 1, rr = 0, k = 114514;// k为窗口长度 for(int i = 2; i <= n; i ++){while(ll <= rr && i - k > q[ll]) ll ++;while(ll <= rr && a[q[rr]] > a[i]) rr --;q[++ rr] = i;}}
} //DSUnamespace DSU{int fa[N], sz[N];int find(int x){ return x == fa[x] ? x : fa[x] = find(fa[x]); }void init(){for(int i = 1; i <= 10000; i ++) fa[i] = i, sz[i] = 1;}void merge(int u, int v){int x = find(u), y = find(v);if(x == y) return ;sz[y] += sz[x];fa[x] = y;}
} //BITnamespace BIT{int c[N]; #define lowbit(x) x&(-x)void upd(int x, int v){for(; x <= N - 5; x += lowbit(x)) c[x] += v;}int qry(int x){int res = 0;for(; x; x -= lowbit(x)) res += c[x];return res;}
}//segtreenamespace segtree{int n = 100000, a[N];#define ls (u << 1)#define rs (u << 1 | 1)#define mid (l + r >> 1)#define segroot int u = 1, int l = 1, int r = n#define lson ls, l, mid#define rson rs, mid + 1, rstruct { int sum, add, mul, len; } t[N << 2];void up(int u) { t[u].sum = t[ls].sum + t[rs].sum; }void build(segroot){t[u].len = r - l + 1;if(l == r){ t[u].sum = a[l]; return; }build(lson); build(rson); up(u);}void down(int u, int x){ t[u].add += x, t[u].sum += t[u].len * x; }void down(int u) { down(ls, t[u].add), down(rs, t[u].add), t[u].add = 0; };int qry(int ql, int qr, segroot){if(ql <= l && r <= qr) return t[u].sum;down(u);if(qr <= mid) return qry(ql, qr, lson);if(mid < ql) return qry(ql, qr, rson);return qry(ql, qr, lson) + qry(ql, qr, rson);}void mdf(int ql, int qr, int x, segroot) {if( qr < l || r < ql ) return;if( ql <= l && r <= qr ) return down(u, x);down(u), mdf(ql, qr, x, lson), mdf(ql, qr, x, rson), up(u);}
}//分块 namespace Blocks{int n, m, len;int w[N], s[N], add[N];int get_len(int x){return x / len;}void mdf(int l, int r, int d){if(get_len(l) == get_len(r)) {for(int i = l; i <= r; i ++) w[i] += d, s[get_len(i)] += d;} else {int i = l, j = r;while(get_len(i) == get_len(l)) w[i] += d, s[get_len(i)] += d, i ++;while(get_len(j) == get_len(r)) w[j] += d, s[get_len(j)] += d, j --;for(int k = get_len(i); k <= get_len(j); k ++) s[k] += d * len, add[k] += d;}}int qry(int l, int r){int res = 0;if(get_len(l) == get_len(r)){for(int i = l; i <= r; i ++) res += w[i] + add[get_len(i)];} else {int i = l, j = r;while(get_len(i) == get_len(l)) res += w[i] + add[get_len(i)], i ++;while(get_len(j) == get_len(r)) res += w[j] + add[get_len(j)], j --;for(int k = get_len(i); k <= get_len(j); k ++) res += s[k]; }return res;}
} //树剖namespace shupou{using namespace segtree;int n = 1e5, a[N], m, rt, p;int fa[N], son[N], sz[N], top[N], dep[N], ver[N], dfn[N], ind;struct Node{int to, nxt;} ed[N << 1];int hd[N << 1], cnt;void addedge(int u, int v){ed[++ cnt] = {v, hd[u]};hd[u] = cnt;}void dfs1(int u){sz[u] = 1;for(int i = hd[u]; i; i = ed[i].nxt){int v = ed[i].to;if(v == fa[u]) continue;fa[v] = u;dep[v] = dep[u] + 1;dfs1(v);sz[u] += sz[v];if(sz[v] > sz[son[u]]) son[u] = v;}}void dfs2(int u, int t){top[u] = t, ver[++ ind] = a[u], dfn[u] = ind;if(son[u]) dfs2(son[u], t);for(int i = hd[u]; i; i = ed[i].nxt){int v = ed[i].to;if(v == fa[u] || v == son[u]) continue;dfs2(v, v);}}void add(int u, int v, int x){while(top[u] != top[v]){if(dep[top[u]] < dep[top[v]]) swap(u, v);mdf(dfn[top[u]], dfn[u], x);u = fa[top[u]];}if(dep[u] > dep[v]) swap(u, v);mdf(dfn[u], dfn[v], x);} int sum(int u, int v){int res = 0;while(top[u] != top[v]){if(dep[top[u]] < dep[top[v]]) swap(u, v);(res += qry(dfn[top[u]], dfn[u])) %= p;u = fa[top[u]];}if(dep[u] > dep[v]) swap(u, v);return (res + qry(dfn[u], dfn[v])) % p;} 
} int main(){return 0;
}