#include<cstdio>
#include <string >
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <cstring>
#include <set >
#include <queue>
#include <algorithm>
#include <vector>
#include <map>
#include <cctype>
#include <stack>
#include <sstream>
#include <list>
#include <assert.h>
#include <bitset>
#include <numeric>
#define debug() puts("++++")
#define gcd(a,b) __gcd(a,b)
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define fi first
#define se second
#define pb push_back
#define sqr(x) ((x)*(x))
#define ms(a,b) memset(a,b,sizeof(a))
#define sz size()
#define be begin()
#define pu push_up
#define pd push_down
#define cl clear()
#define lowbit(x) -x&x
#define all 1,n,1
#define rep(i,x,n) for(int i=(x); i<(n); i++)
#define in freopen("in.in","r",stdin)
#define out freopen("out.out","w",stdout)
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair <int ,int > P;
const int INF = 0x3f3f3f3f ;
const LL LNF = 1e18;
const int maxn = 1e3 + 20 ;
const int maxm = 1e6 + 10 ;
const double PI = acos(-1.0 );
const double eps = 1e-8 ;
const int dx[] = {-1 ,1 ,0 ,0 ,1 ,1 ,-1 ,-1 };
const int dy[] = {0 ,0 ,1 ,-1 ,1 ,-1 ,1 ,-1 };
int dir[4 ][2 ] = {{0 ,1 },{0 ,-1 },{-1 ,0 },{1 ,0 }};
const int mon[] = {0 , 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 };
const int monn[] = {0 , 31 , 29 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 };
int n,m; //ios::sync_with_stdio(false); /*
【题意】
【类型】
【分析】
【时间复杂度&&优化】
【trick】
【数据】 */
ll read() {
ll x = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch>'9') {
if (ch == '-') {
f = -1;
}
ch = getchar();
}
while (ch >= '0'&&ch <= '9') {
x = x * 10 + ch - '0';
ch = getchar();
}
return x * f;
}
ll quickpow(ll a, ll b) {
ll ans = 0;
while (b > 0) {
if (b % 2)ans = ans * a;
b = b / 2;
a = a * a;
}
return ans;
}
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a%b);
}
bool cmp(int a, int b) {
return a > b;
}
#include<cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <functional>
#include <iostream>
#include <cmath>
#include <cctype>
#include <ctime>
#include <iomanip>
#include <vector>
#include <string >
#include <queue>
#include <stack>
#include <map>
#include <sstream>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define ForkD(i,k,n) for(int i=n;i>=k;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=Pre[x];p;p=Next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=Next[p])
#define Lson (o<<1)
#define Rson ((o<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,127,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define INF (2139062143)
#define F (1000000007)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define vi vector<int>
#define pi pair<int,int>
#define SI(a) ((a).size())
#define Pr(kcase,ans) printf("Case #%d: %I64d\n",kcase,ans);
#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;
#define PRi2D(a,n,m) For(i,n) { \
For(j,m -1 ) cout<<a[i][j]<<' ' ;\
cout <<a[i][m]<<endl; \
}
#pragma comment(linker, "/STACK:102400000,102400000")
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){ return (a*b)%F;}
ll add(ll a,ll b){ return (a+b)%F;}
ll sub(ll a,ll b){ return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
int read()
{
int x=0 ,f=1 ; char ch=getchar();
while (!isdigit(ch)) {if (ch==' - ' ) f=-1 ; ch=getchar();}
while (isdigit(ch)) { x=x*10 +ch-' 0 ' ; ch=getchar();}
return x*f;
}