#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<map>
#include<set>
// attention
// 暴力破解 for 循环 即通过数学推论 减少for循环层数
using namespace std;
const int inf=0x3fffffff;
const int maxn=100100;
// Prime
int prime[maxn],pNum=0;
bool p[maxn];
void getPrime(){
p[0]=p[1]=true;
p[2]=false;
for(int i=2;i<maxn;i++){
if(p[i]==false){
prime[pNum++]=i;
for(int j=i+i;j<maxn;j+=i)
p[j]=true;
}
}
}
// qmi
long long a,long long b;
long long mod;
// 8421 1011
a^13= (a^8)%mod * (a^2)%mod * a%mod
long long qmi(long long a,long long b){
long long res=1;
while(b){
if(b&1){
res=res*a%mod;
}
b>>=1;
a=a*a%mod;
}
return res;
}
// gcd lcm
// 8 12 4
int gcd(int a,int b){
if(b==0) return a;
return gcd(b,a%b);
}
// 4 12 20
int lcm(int a,int b){
return a*(b/gcd(a,b));
}
//dfs要判断好最后一步 到底是 n 还是 n+1
//dfs+并查集 判环
//dfs 判 0 1 喘
//dfs 枚举所有的情况
//dfs 减枝 + 记忆性递归
// permutation
// permutation + judge
vector<int> ans;
void dfs(int idx){//0
if(idx==n){
return ;
}
for(int i=0;i<n;i++){
if(vis[a[i]]==false){
vis[a[i]]=true;
ans.push_back(a[i]);
dfs(idx+1);
ans.pop_back();
vis[a[i]]=false;
}
}
}
// 高精度运算
// binary_search
// 先排序 后 查找
// set map
// if( set.lower_bound(x) != st.end() )
// sort(a,a+n) int pos = lower_bound(a,a+n,k)-a;
// lower_bound(a,a+n,x)-upper_bound(a,a+n,x)返回数组中x的个数
//set.lower_bound(x);
// init() findFather() father() Union()
// 并查集 一定是生成一棵树 或 多颗
// 结合 图 来使用
int findFather(int x){
if(father[x]==x) return x;
int F = findFather(father[x]);
father[x]=F;
return F;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
return 0;
}