本地小黑板,学习不迷路

禁鼠标点击
禁复制
禁剪切
禁粘贴

使用快捷键 ctrl+f ,然后搜索“题目名”,可以快速找到你需要的题目

#include<iostream>
#include<cstring>
using namespace std;
const int N=5e5+10;
int n,k,a[N],f[N],l[N],s[N],last[1<<21];
//f[i]表示1~i中最多有多少个不相交区间的异或和为k
//s[i]表示1~i的所有元素的前缀异或值
//l[i]是[l[i],i]区间异或和为k,右端点为i的最小区间 
//last[i]表示前缀异或和为i的最后一个位置,注意数据范围 
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++) cin>>a[i];
	memset(last,-1,sizeof last);
	last[0]=0;
	for(int i=1;i<=n;i++){
		s[i]=s[i-1]^a[i]; //前缀异或和
		if(last[k^s[i]]!=-1){ //异或和为k^s[i]的位置存在 
			l[i]=last[k^s[i]]+1;//计算离i最近的左端点  
		} 
		last[s[i]]=i; //前缀异或和为s[i]的最后一个位置 
	}
	for(int i=1;i<=n;i++){
		f[i]=f[i-1]; //初始值
		if(l[i]) f[i]=max(f[i],f[l[i]-1]+1);//状态转移 
	}
	cout<<f[n]; 
	return 0;
}
/*	Problem: 异或和
	Language: C++	Result: 正确 	Time: 2026-08-29 21:59:38
	User: admin  	Problem: 4544	contest_id: 0*/
#include<iostream>
#include<algorithm> 
using namespace std;
int n,m,a[110],b[110][110];
int main(){
	cin>>n>>m;
	for(int i=1;i<=n*m;i++) cin>>a[i];
	int a1=a[1],k=1; //a1是小明
	sort(a+1,a+n*m+1); 
	reverse(a+1,a+n*m+1); 
	for(int j=1;j<=m;j++){//从第1列到第m列 
		if(j%2==1){ //奇数列 
			for(int i=1;i<=n;i++){ //从上往下填数 
				b[i][j]=a[k++];
			} 
		}else{     //偶数列 
			for(int i=n;i>=1;i--){ //从下往上填数 
				b[i][j]=a[k++];
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(b[i][j]==a1){ //找到小明 
				cout<<j<<" "<<i;
				return 0; 
			}
		}
	} 
	return 0;
}
/*	Problem: 座位
	Language: C++	Result: 正确 	Time: 2026-08-29 20:19:19
	User: admin  	Problem: 4543	contest_id: 0*/
#include<iostream>
#include<algorithm>
using namespace std;
int n,a[1000010];
string s;
int main(){
	cin>>s;
	for(int i=0;i<s.size();i++){
		if(s[i]>='0'&&s[i]<='9'){
			a[++n]=s[i]-'0'; //字符转数字 
		}
	}
	sort(a+1,a+n+1); //从小到大
	for(int i=n;i>=1;i--) cout<<a[i];
	return 0;
}
/*	Problem: 拼数
	Language: C++	Result: 正确 	Time: 2026-08-29 20:08:38
	User: admin  	Problem: 4542	contest_id: 0*/
#include<iostream>
using namespace std;
int n;
string s;
int main(){
	cin>>n;
	while(n--){
		cin>>s;
		int ans=3,len=s.size();
		for(int i=0;i<len-2;i++){
			string ss=s.substr(i,3); //子串是否是MOO MOM OOO OOM
			if(ss=="MOO") ans=min(ans,0); 
			if(ss=="MOM") ans=min(ans,1); 
			if(ss=="OOO") ans=min(ans,1); 
			if(ss=="OOM") ans=min(ans,2); 
		}
		if(ans==3) cout<<"-1"<<endl;
		else cout<<ans+s.size()-3<<endl;
	}
	return 0;
}
/*	Problem: 字符变化
	Language: C++	Result: 正确 	Time: 2026-08-29 17:54:20
	User: admin  	Problem: 2663	contest_id: 0*/
#include<iostream>
using namespace std;
int n,a[110][110],s=0,c=0;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++) cin>>a[i][j];
	
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(a[i][j]<=50){ //是个肿瘤细胞 
				s++; //面积 
				if(a[i-1][j]>50||a[i+1][j]>50||a[i][j-1]>50||a[i][j+1]>50){//a[i][j]的上下左右只要有一个数>50的
					c++; //周长 
				} 
			} 
		}
	}
	cout<<s<<" "<<c; 
	return 0;
}
/*
面积:a[i][j]<=50,则计数+1
周长:a[i][j]<=50,且a[i][j]的上下左右只要有一个数>50的,则计数+1 
*/

/*	Problem: 肿瘤检测
	Language: C++	Result: 正确 	Time: 2026-08-29 15:48:42
	User: admin  	Problem: 1687	contest_id: 0*/
#include<iostream>
using namespace std;
int a[10][10];
int main(){
	for(int i=1;i<=5;i++)
		for(int j=1;j<=5;j++) cin>>a[i][j];

	for(int i=1;i<=5;i++){ //从第1行~第5行依次找到每一行的最大值x
		int mx=0,x,y,flag=0;
		for(int j=1;j<=5;j++){//遍历第i行的每一个数字 
			if(mx<a[i][j]){ //更新第i行的最大值 
				mx=a[i][j];
				x=i; y=j; 
			} 
		}
		//判断mx是否是第y列的最小值
		for(int k=1;k<=5;k++){ //遍历第y列的每一行 
			if(a[k][y]<mx){ //mx不是第y列的最小值 
				flag=1; //标记不是鞍点
				break; 
			} 
		} 
		
		if(flag==0){ //mx是鞍点 
			cout<<x<<" "<<y<<" "<<mx; return 0; 
		} 
	}
	cout<<"not found";
	return 0;
}
/*
从第1行~第5行依次找到每一行的最大值x
然后,再判断x是不是所在列的最小值 
*/

/*	Problem: 计算鞍点
	Language: C++	Result: 正确 	Time: 2026-08-29 15:28:03
	User: admin  	Problem: 1646	contest_id: 0*/
#include<iostream>
using namespace std;
int n,m,ans=0;
char a[110][110];
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++) cin>>a[i][j];
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(a[i][j]=='#'){//碰到草,下和右改成空地
                ans++; //草堆计数+1
                a[i][j+1]='.';
                a[i+1][j]='.';
            }
        }
    }   
    cout<<ans;
    return 0;
}
/*	Problem: 最好的草
	Language: C++	Result: 正确 	Time: 2026-08-29 15:05:10
	User: admin  	Problem: 1681	contest_id: 0*/
#include<iostream>
using namespace std;
int n,a[15][15];
int main(){
	cin>>n;
	a[1][1]=1;
	for(int i=2;i<=n;i++){
		for(int j=1;j<=i;j++){ //第i行有i个数字 
			a[i][j]=a[i-1][j-1]+a[i-1][j]; //左上方的数字+正上方的数字 
		}
	}
	
	for(int i=1;i<=n;i++){ //输出:第1行~第n行 
		for(int j=1;j<=i;j++){ //第i行有i个数字 
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;
}
/*	Problem: 杨辉三角
	Language: C++	Result: 正确 	Time: 2026-08-29 15:04:17
	User: admin  	Problem: 1582	contest_id: 0*/
#include<iostream>
using namespace std;
int n,m;
char a[110][110];
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
		}
	}
	
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j]=='*'){ //该位置是一个地雷,直接输出 
				cout<<a[i][j]; 
			}else{  //否则,该位置是一个空地,数一数八个方向的地雷数量
				int sum=0; //地雷数量初始化 
				if(a[i-1][j]=='*') sum++;
				if(a[i+1][j]=='*') sum++;
				if(a[i][j-1]=='*') sum++;
				if(a[i][j+1]=='*') sum++;
				if(a[i-1][j-1]=='*') sum++;
				if(a[i-1][j+1]=='*') sum++;
				if(a[i+1][j-1]=='*') sum++;
				if(a[i+1][j+1]=='*') sum++;
				cout<<sum; //输出该位置的八个方向地雷数量 
			}
		}
		cout<<endl; //内层循环结束,每一行要换行 
	}
	return 0;
}
/*	Problem: 扫雷游戏
	Language: C++	Result: 正确 	Time: 2026-08-29 14:36:35
	User: admin  	Problem: 1974	contest_id: 0*/
#include<iostream>
using namespace std;
int n,ans=0;
int main(){
	cin>>n;
	if(n%2==1){//如果n是奇数,则求1-n之间所有的偶数之和
		for(int i=2;i<=n;i+=2){ //枚举1~n的所有偶数 
			ans+=i; //所有偶数之和 
		}
	}else{ //否则,n是偶数,则求n所有的约数(也就是因子)之和
		for(int i=1;i<=n;i++){//枚举1~n的每一个数字,判断i是否是n的因子 
			if(n%i==0){ //i是n的因子 
				ans+=i; //n的因子之和 
			} 
		} 
	} 
	
	cout<<ans; 
	return 0;
}
/*	Problem: 判奇偶求和
	Language: C++	Result: 正确 	Time: 2026-08-28 20:30:42
	User: admin  	Problem: 3035	contest_id: 0*/
#include<iostream>
using namespace std;
int n,ans=0;
int main(){
	cin>>n;
	for(int i=10;i<=n;i++){ //循环枚举10~n之间的每一个数字 
		//判断每个数字:i的十位或个位是否为0
		if(i%10==0 || i/10%10==0){ //i的十位或个位为0
			ans++; //含0的数字个数+1,即答案+1 
		} 
	} 
	cout<<ans; 
	return 0;
}
/*
判断10~n中的每一个数字的个位、十位是否为0
1 如果个位或十位为0,则是含0的数字,答案+1
2 否则,答案不变 
*/

/*	Problem: 有0的数
	Language: C++	Result: 正确 	Time: 2026-08-28 20:03:14
	User: admin  	Problem: 3536	contest_id: 0*/
#include<iostream>
using namespace std;
typedef long long ll;
ll qpow(ll a,ll b,ll mod){ //快速幂模板 
	int res=1;
	while(b){
		if(b&1) res=res*a%mod;  //最后一位是1 
		b>>=1; //抹掉最后1位 
		a=(a*a)%mod; //倍增 
	}
	return res; 
}
ll n,m,k,x;
int main(){
	cin>>n>>m>>k>>x;
	cout<<(x+m*qpow(10,k,n))%n;
	return 0;
}
/*
本质是计算(x+m*10^k)%n
*/
/*	Problem: 转圈游戏
	Language: C++	Result: 正确 	Time: 2026-08-28 17:12:38
	User: admin  	Problem: 1717	contest_id: 0*/
#include<iostream>
using namespace std;
int mod=20123; 
int n,m,k,ans=0,sum[10010];//sum[i]表示第i层有楼梯的房间数量 
struct node{
	int up,x;//up表示是否有楼梯 
}a[10010][110];
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=0;j<m;j++){ //注意:房间编号是0~m-1 
			cin>>a[i][j].up>>a[i][j].x; 
			sum[i]+=a[i][j].up;  //统计有楼梯的房间数 
		} 
	}
	cin>>k;
	for(int i=1;i<=n;i++){ //模拟:一层一层向上爬 
		ans=(ans+a[i][k].x)%mod; //每一层入口房间的数字x之和是密钥 
		int x=a[i][k].x%sum[i];
		if(x==0) x=sum[i]; //特判
		//从k开始,逆时针找到第x个有楼梯的房间,从该房间向上走
		int t=k; //当前房间编号
		while(x>0){ //一共需要找到第x个有楼梯的 
			if(a[i][t].up){ //如果房间t有楼梯 
				x--; //找到了1个
				k=t; //有可能从这里上去 
			}
			t++; //继续判断下一个房间编号 
			if(t==m) t=0; //房间是一个圈 
		}  
	} 
	cout<<ans; 
	return 0;
}

/*	Problem: 寻宝
	Language: C++	Result: 正确 	Time: 2026-08-28 16:55:38
	User: admin  	Problem: 1479	contest_id: 0*/
#include<iostream>
using namespace std;
int t,m,a,b,c;
int gcd(int x,int y){//最大公约数 
	if(y==0) return x;
	return gcd(y,x%y);
}
int main(){
	cin>>t>>m; 
	while(t--){
		cin>>a>>b>>c;
		if(a<0) a=-a,b=-b,c=-c; //如果系数a是负数,全部乘以-1
		int delta=b*b-4*a*c;
		if(delta<0){ //无解 
			cout<<"NO"<<endl; 
		}else if(delta==0){ //一个解 
			int d=gcd(2*a,abs(b)); 
			int x=-b/d, y=2*a/d; //x表示分子,y表示分母 
			if(y==1) cout<<x<<endl; //分母为1,直接输出分子 
			else cout<<x<<"/"<<y<<endl;
		}else{ //两个解,则输出较大的解 
			int z=1; //根号前的系数初始值
			for(int i=2;i*i<=delta;i++){
				while(delta%(i*i)==0){ //有一个i*i的因子 
					z*=i; //系数增加
					delta/=i*i; 
				}
			} 
			if(delta==1){ //答案就没有根号了 
				if(z-b==0) cout<<0<<endl;
				else{
					int d=gcd(2*a,abs(z-b));  
					int x=(z-b)/d,y=2*a/d;
					if(y==1) cout<<x<<endl; //分母为1,直接输出分子 
					else cout<<x<<"/"<<y<<endl;
				} 
			}else{ //答案仍然有根号 
				if(b!=0){//先考虑前半截
					int d=gcd(2*a,abs(b)); 
					int x=-b/d, y=2*a/d; //x表示分子,y表示分母 
					if(y==1) cout<<x; //分母为1,直接输出分子 
					else cout<<x<<"/"<<y;
					cout<<"+"; 
				} 
				int d=gcd(2*a,z);  //再考虑后半截 
				int x=z/d, y=2*a/d; //x表示分子系数,y表示分母 
				if(y==1){ //分母为1 
					if(x==1) cout<<"sqrt("<<delta<<")"<<endl; //分子系数也为1 
					else cout<<x<<"*"<<"sqrt("<<delta<<")"<<endl; //分子系数不为1 
				}else{  //分母不为1 
					if(x==1) cout<<"sqrt("<<delta<<")/"<<y<<endl; //分子系数也为1 
					else cout<<x<<"*"<<"sqrt("<<delta<<")/"<<y<<endl; //分子系数不为1 
				} 
			}
		} 
	}
	return 0;
}
/*	Problem: 一元二次方程
	Language: C++	Result: 正确 	Time: 2026-08-28 15:37:02
	User: admin  	Problem: 2965	contest_id: 0*/
#include<iostream>
#include<cmath>
using namespace std;
long long n,k,d,e,ans=0;
bool check(long long x){ //判断x是否是完全平方数 
	long long y=sqrt(x); 
	return y*y==x;
} 
void solve(){//解一元二次方程  -p^2+(n+2-e*d)*p-n=0
	long long a=-1;
	long long b=n+2-e*d;
	long long c=-n;
	long long delta=b*b-4*a*c;
	if(delta>=0&&check(delta)){//还要判断delta是完全平方数 
		long long p=(-b+sqrt(delta))/(2*a);
		long long q=n/p;
		printf("%lld %lld\n",min(p,q),max(p,q));
	}else{
		printf("NO\n");
	}
}
int main(){
	scanf("%lld",&k); 
	while(k--){
        scanf("%lld %lld %lld",&n,&d,&e); 
		solve();
	}
	return 0;
}
/*
n= p*q
e*d = (p-1)(q-1) + 1 
e*d = p*q-p-q+2 
n-p-n/p+2-e*d=0
-p^2+(n+2-e*d)*p-n=0
*/

/*	Problem: 解密
	Language: C++	Result: 正确 	Time: 2026-08-28 14:30:22
	User: admin  	Problem: 2462	contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
long long k,n,e,d,ans=0;
bool check(long long x){
    long long y=sqrt(x);
    return y*y==x;
}
void solve(){
    long long a=-1,b=n+2-e*d,c=-n,delta=b*b-4*a*c;
    if(delta>=0&&check(delta)){
        long long p=(-b+sqrt(delta))/(2*a);
        long long q=n/p;
        cout<<min(p,q)<<' '<<max(p,q)<<endl;
    }else cout<<"NO\n";
} 
int main(){
    cin>>k;
    while(k--){
        cin>>n>>d>>e;
        solve();
    }
    return 0;
}
/*	Problem: 解密
	Language: C++	Result: 正确 	Time: 2026-08-28 14:23:05
	User: admin  	Problem: 2462	contest_id: 0*/
#include<iostream>
#include<algorithm> 
using namespace std;
int n,a[200010],b[200010],ans=0;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<n;i++) cin>>b[i];
	sort(a+1,a+n+1); 
	sort(b+1,b+n);
	reverse(a+1,a+n+1); //倒序,使得从大到小
	reverse(b+1,b+n); 
	//从大到小装箱子
	for(int i=1;i<=n;i++){
		//如果箱子>=玩具,直接装,不用处理
		if(b[i]<a[i]){//而如果箱子<玩具,需要买一个箱子 
			ans=a[i]; //即答案,剩下的玩具则继续装,必须都能装
			for(int j=i+1,k=i;j<=n;j++,k++){//j玩具编号,k箱子编号 
				if(b[k]<a[j]){//箱子再次出现不匹配 
					cout<<-1;
					return 0; 
				} 
			} 
			cout<<ans;//全部装完了 
			return 0; 
		} 
	} 
	return 0;
}
/*	Problem: 玩具装箱
	Language: C++	Result: 正确 	Time: 2026-08-28 13:52:02
	User: admin  	Problem: 4906	contest_id: 0*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+5,M=1e6;
int n,ans;
int s[N];
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++){
		int x;
		cin>>x;
		s[x]++;
	}
	for(int i=1;i<=M;i++)s[i]=s[i-1]+s[i];
	for(int i=1;i<=M;i++){
		int t=(s[i]-s[i-1]);
		if(t==0)continue;
		ans+=(t-1)*t/2;
		for(int j=i;j<=M;j+=i){
			int x=min(M,j+i-1);
			if(j==i)ans+=(s[x]-s[j])*1*t;
			else	ans+=(s[x]-s[j-1])*(j/i)*t;
		}
	}
	cout<<ans;
	return 0;
}

/*	Problem: Max/Min
	Language: C++	Result: 正确 	Time: 2026-08-26 20:23:27
	User: admin  	Problem: 5096	contest_id: 0*/
#include <cstdio>
using namespace std;
#define int long long

const int mod = 998244353;
int ans;
int n, m, x; 

signed main() {
	scanf("%lld%lld", &n, &m);
	for (int i = 1; m; ++i) {
		if (m & 1) {
			int j = (1ll << (i - 1));
			ans += (((n + 1) / (2 * j)) * j);
			ans %= mod;
			x = ((n + 1) % (2 * j) - j);
			if (x > 0)	ans += x;
			ans %= mod;
		}
		m >>= 1;
	}
	printf("%lld", ans);
	return 0;
}

/*	Problem: 1的个数
	Language: C++	Result: 正确 	Time: 2026-08-26 20:16:59
	User: admin  	Problem: 5095	contest_id: 0*/
#include <cstdio>
using namespace std;

int c[110], a[110][110], r[110];
int b[110];
char s[110];
int n, m, k;
int ans;

int count(int x) {
	int cnt = 0;
	while (x) {
		x = x & (x - 1);
		cnt++;
	}
	return cnt;
}

int main() {
	scanf("%d%d%d", &n, &m, &k);
	for (int i = 1; i <= m; ++i) {
		scanf("%d", &c[i]);
		for (int j = 1; j <= c[i]; ++j) {
			scanf("%d", &a[i][j]);
			b[i] += (1 << (a[i][j] - 1));
		}
		scanf("%s", s + 1);
		if (s[1] == 'o') {
			r[i] = 1;
		} else {
			r[i] = 0;
		}
	}
	
	for (int i = 0; i < (1 << n); ++i) {
		int flag = 0;
		for (int j = 1; j <= m; ++j) {
			flag = flag || ((count(b[j] & i) >= k) != r[j]);
		}
		if (!flag) {
			ans++;
		}
	}
	
	printf("%d", ans);
	return 0;
}

/*	Problem: 钥匙
	Language: C++	Result: 正确 	Time: 2026-08-26 20:11:08
	User: admin  	Problem: 5094	contest_id: 0*/
#include<iostream>
using namespace std;
int n,m,a[110],ans=0;
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++) cin>>a[i];
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			int x;cin>>x; //第j种营养素得到x 
			a[j]-=x; //第j种营养素还需要a[j]
		}
	}
	for(int i=1;i<=m;i++){
		if(a[i]>0) ans=1; //检查哪一种营养素还需要 
	}
	if(ans==1) cout<<"No";
	else cout<<"Yes"; 
	return 0;
}
/*	Problem: 营养
	Language: C++	Result: 正确 	Time: 2026-08-26 20:03:25
	User: admin  	Problem: 5093	contest_id: 0*/
#include <bits/stdc++.h>
#define int long long
using namespace std;
typedef long long LL;
const int N = 1e6 + 10;
int n, cnt, minn = 1e16;
bool flag[N];
struct T3 { int x, y, id; } a[N];
bool operator < (T3 a, T3 b) {
	return a.x > b.x || (a.x == b.x && a.y < b.y);
}
unordered_map <int, int> mp;
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> a[i].x >> a[i].y, a[i].id = i;
	sort (a + 1, a + n + 1);
	cnt = n;
	for (int i = 1; i <= n; i++) {
		if (a[i - 1].x > a[i].x && a[i].y > minn) {
			flag[a[i].id] = 1, cnt--;
			continue;
		}
		if (a[i - 1].x == a[i].x && a[i].y > mp[a[i].x]) {
			flag[a[i].id] = 1, cnt--;
			continue;
		}
		if (a[i].x != a[i - 1].x) mp[a[i].x] = minn;
		minn = min (minn, a[i].y);
	}
	cout << cnt << '\n';
	for (int i = 1; i <= n; i++)
		if (!flag[i]) cout << i << ' ';
	return 0;
}

/*	Problem: 扔卡牌
	Language: C++	Result: 正确 	Time: 2026-08-26 19:51:48
	User: admin  	Problem: 5082	contest_id: 0*/
#include<iostream>
using namespace std;
int n,l,r;
int main(){
	cin>>n>>l>>r;
	for(int i=1;i<l;i++) cout<<i<<" ";
	for(int i=r;i>=l;i--) cout<<i<<" ";
	for(int i=r+1;i<=n;i++) cout<<i<<" ";
	return 0;
}
/*	Problem: 逆序排列
	Language: C++	Result: 正确 	Time: 2026-08-26 12:23:16
	User: admin  	Problem: 5092	contest_id: 0*/
#include <bits/stdc++.h> //扫描线
using namespace std;
#define int long long
#define endl '\n'
const int N = 2e3 + 5;
int n, c, ans;
struct Node {
	int t, p;
};
bool operator<(Node x, Node y) {
	if(x.p != y.p) return x.p < y.p;
	else return x.t < y.t;
}
vector<Node> d;
signed main() {
	cin>>n;
	for(int i = 1; i <= n; i++) {
		int l, r; cin>>l>>r;
		d.push_back({0, l}); d.push_back({1, r});
	}
	sort(d.begin(), d.end());
	for(auto i : d) {
		if(!i.t) c++;
		else ans += (--c);
	}
	cout<<ans<<endl;
}

/*	Problem: 区间相交
	Language: C++	Result: 正确 	Time: 2026-08-26 12:14:02
	User: admin  	Problem: 5089	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
int n;
struct node {
	int l,r;
} a[500050],b[500050],c[500050];
bool st1(const node &x,const node &y){
	return x.l < y.l;
}
bool st2(const node &x,const node &y){
	return x.r < y.r;
}
long long sum = 0;
int main(){
	scanf("%d",&n);
	for (int i = 1; i <= n; i++) scanf("%d%d",&a[i].l,&a[i].r);
	memcpy(b,a,sizeof(b));
	memcpy(c,a,sizeof(c));
	sort(b + 1,b + n + 1,st1);
	sort(c + 1,c + n + 1,st2);
	//复制,排序
	for (int i = 1; i <= n; i++) {
		int l,r,mid;
		l = 0,r = n + 1;
		while (l + 1 < r) {
			mid = (l + r) / 2;
			if (b[mid].l > a[i].r) r = mid;
			else l = mid;
		}
		sum += n - r + 1;
		//l_j > r_i
		l = 0,r = n + 1;
		while (l + 1 < r) {
			mid = (l + r) / 2;
			if (c[mid].r < a[i].l) l = mid;
			else r = mid;
		}
		sum += l;
		//r_j < l_i
	}
	sum /= 2;
	printf("%lld",1LL * n * (n - 1) / 2 - sum);
	return 0;
}

/*	Problem: 区间相交
	Language: C++	Result: 正确 	Time: 2026-08-26 12:00:43
	User: admin  	Problem: 5089	contest_id: 0*/
#include<bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
using namespace std;
const int N=3e5+15;
int n,t;
int a[N];
int h[N],l[N],x1,x2;
/*
h[N]:行
l[N]:列
x1:左上到右下的对角线
x2:右上到左下的对角线
*/
signed main(){
	ios::sync_with_stdio(0);
	cin>>n>>t;
	rep(i,1,n)h[i]=l[i]=n;
	x1=x2=n;
	rep(i,1,t){
		cin>>a[i];
		int ll=a[i]%n;
		ll==0?ll=n:ll=ll;
		int hh=(a[i]-ll)/n+1;
      //开始计数
		--h[hh];
		--l[ll];
		if(ll==hh)--x1;//在左上到右下的对角线上
		if(ll+hh==n+1)--x2;//在右上到左下的对角线上
      
		if(!x1||!x2||!h[hh]||!l[ll]){//任意一方归零
			cout<<i<<endl;
			return 0;
		}
	}
	cout<<-1<<endl;
	return 0;
}

/*	Problem: 回合
	Language: C++	Result: 正确 	Time: 2026-08-26 11:57:05
	User: admin  	Problem: 5088	contest_id: 0*/
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,a[110],b[110];
char c[210];
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<=m;i++) cin>>b[i];
	sort(a+1,a+n+1); sort(b+1,b+m+1);
	int i=1,j=1,k=0;
	while(i<=n&&j<=m){ //按照从小到大,合并数组a和数组b 
		if(a[i]<b[j]) c[++k]='a',i++; //合并a 
		else c[++k]='b',j++; //合并b 
	} 
	while(i<=n) c[++k]='a',i++;
	while(j<=m) c[++k]='b',j++;
	
	for(int i=2;i<=k;i++)
		if(c[i]==c[i-1]&&c[i]=='a'){//a中元素连续出现 
			cout<<"Yes"; return 0;
		}
	cout<<"No";
	return 0;
}
/*	Problem: 合并数列
	Language: C++	Result: 正确 	Time: 2026-08-26 11:51:23
	User: admin  	Problem: 5087	contest_id: 0*/
#include<iostream>
using namespace std;
int a,b;
int main(){
	cin>>a>>b;
	if(a==b) cout<<-1;
	else if(a==1&&b==2 || a==2&&b==1) cout<<3;
	else if(a==1&&b==3 || a==3&&b==1) cout<<2;
	else if(a==3&&b==2 || a==2&&b==3) cout<<1;
	return 0;
}


/*	Problem: 谁吃了
	Language: C++	Result: 正确 	Time: 2026-08-26 10:53:04
	User: admin  	Problem: 5086	contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
const int maxn=18;
int popcnt(int x){//统计二进制中 1 的个数
	int ret=0;
	for(;x;x&=x-1)ret++;
	return ret;
}
int n;
vector<pair<int,int>>dat;
bitset<(1<<maxn)|9>f;//DP 数组
signed main(){
    cin>>n;
    for(int i=1,a,b;i<=n;i++)cin>>a>>b,dat.push_back({a,b});
	for(int s=0;s<(1<<n);s++)if(popcnt(s)>=2){
		for(int i=0;i<n;i++)for(int j=i+1;j<n;j++)
			if(((s>>i)&1)&&((s>>j)&1)&&(dat[i].first==dat[j].first||dat[i].second==dat[j].second))//判断是否可以转移
				f[s]=f[s]|~f[s^(1<<i)^(1<<j)];//转移
	}cout<<(f[(1<<n)-1]?"Takahashi":"Aoki");
}

/*	Problem: 卡牌游戏
	Language: C++	Result: 正确 	Time: 2026-08-26 10:45:47
	User: admin  	Problem: 5084	contest_id: 0*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
	int a,b,c,d,ans=0;
	cin>>a>>b>>c>>d;
		int x1=a,x2=c,y1=b,y2=d;
		while(x1<x2 && x1%4!=0){
			if((x1-1)%4==0){
				int u=y1,v=y2;
				if(abs(u)%2==1) u++,ans+=2;
				if(abs(v)%2==1) v--,ans+=1;
				if(u<v)ans+=3*((v-u)/2);
			}
			if((x1-2)%4==0){
				int u=y1,v=y2;
				if(abs(u)%2==1) u++,ans+=1;
				if(abs(v)%2==1) v--;
				if(u<v)ans+=((v-u)/2);				
			}
			if((x1-3)%4==0){
				int u=y1,v=y2;
				if(abs(u)%2==1) u++;
				if(abs(v)%2==1) v--,ans+=1;
				if(u<v)ans+=((v-u)/2);		
			}
			x1++;
		}
		while(x2>x1 && x2%4!=0){
			if((x2+2)%4==0){
				int u=y1,v=y2;
				if(abs(u)%2==1) u++,ans+=2;
				if(abs(v)%2==1) v--,ans+=1;
				if(u<v)ans+=3*(((v-u)/2));
			}
			if((x2+1)%4==0){
				int u=y1,v=y2;
				if(abs(u)%2==1) u++,ans+=1;
				if(abs(v)%2==1) v--;
				if(u<v)ans+=((v-u)/2);			
			}
			if((x2+3)%4==0){
				int u=y1,v=y2;
				if(abs(u)%2==1) u++,ans+=1;
				if(abs(v)%2==1) v--,ans+=2;
				if(u<v)ans+=3*((v-u)/2);
			}		
			x2--;
		}
		ans+=(x2-x1)*(y2-y1);
	cout<<ans;
	return 0;
}


/*	Problem: 壁纸
	Language: C++	Result: 正确 	Time: 2026-08-26 10:41:34
	User: admin  	Problem: 5083	contest_id: 0*/
#include<iostream>
#include<algorithm>
using namespace std;
int n,ans=0;
string s[1010]; 
int main(){
	cin>>n;
	for(int i=0,x;i<n;i++){
		cin>>s[i]>>x;
		ans+=x; //求和 
	}
	sort(s+0,s+n);//排序 
	cout<<s[ans%n];//输出获胜者 
	return 0;
}
/*	Problem: 获胜
	Language: C++	Result: 正确 	Time: 2026-08-25 21:10:41
	User: admin  	Problem: 5081	contest_id: 0*/
#include<iostream>
using namespace std;
long long n,m=1,k=2,ans=1;
int main(){
	cin>>n;
	while(m<=n){
		m+=k;
		k*=2; //倍增 
		ans++;
	}
	cout<<ans;
	return 0;
}
/*	Problem: 植物高度
	Language: C++	Result: 正确 	Time: 2026-08-25 20:55:42
	User: admin  	Problem: 5080	contest_id: 0*/
#include <iostream>

using namespace std;
using LL = long long;

const LL kMaxN = 3e5 + 5;

LL tr[kMaxN], nxt[kMaxN][26], n, cnt = 1, ans;  // cnt 初始化为 1,因为需要一个额外的根
string s;

void add(const string &s) {                     // 加入字符串 s
  LL p = 1;
  for (char c : s) {                            // 遍历每一个字符
    if (!nxt[p][c - 'a']) {                     // 如果不存在
      p = nxt[p][c - 'a'] = ++cnt;              // 新申请一个儿子
    } else {                                    // 已经存在
      p = nxt[p][c - 'a'];                      // 直接跳过去
    }
    ans += tr[p];                               // 累加答案
    tr[p]++;                                    // 路径上的数加一
  }
}

int main() {
  cin >> n;
  for (LL i = 1; i <= n; i++) {
    cin >> s;
    add(s);
  }
  cout << ans << '\n';
  return 0;
}

/*	Problem: 再求和
	Language: C++	Result: 正确 	Time: 2026-08-25 20:39:51
	User: admin  	Problem: 5078	contest_id: 0*/
#include<cstdio>
#define int long long
using namespace std;
const int N=2e5+10,MOD=998244353; int a[N],sum[N];
int calc(int x) {
  int cnt=0;
  while(x) cnt=(cnt+1)%MOD,x/=10;
  return cnt;
}
int pow10(int x) {
  int ans=1;
  while(x--) ans=ans*10%MOD;
  return ans;
}
signed main() {
  int n,ans=0; scanf("%lld",&n);
  for(int i=1;i<=n;i++) scanf("%lld",&a[i]),sum[i]=(sum[i-1]+a[i])%MOD;
  for(int i=2;i<=n;i++) ans=(ans+(sum[i-1]*pow10(calc(a[i]))%MOD+(i-1)*a[i]%MOD)%MOD)%MOD;
  printf("%lld",ans);
  return 0;
}

/*	Problem: 又求和
	Language: C++	Result: 正确 	Time: 2026-08-25 20:35:35
	User: admin  	Problem: 5077	contest_id: 0*/
#include<bits/stdc++.h>
#define int long long

using namespace std;

const int N = 3e5 + 5;
int n, a[N], daan, gj; // gj表示该减多少个10^8

int merge(int l, int r, int cnt){
  if (cnt > a[r]) return r + 1;
  while (l < r){
    int mid = l + r >> 1;
    if (a[mid] >= cnt) r = mid;
    else l = mid + 1;
  }
  return l;
}
// 手写的二分函数
signed main(){
  scanf("%lld", &n);
  for (int i = 1; i <= n; i++) scanf("%lld", &a[i]);
  sort(a + 1, a + n + 1);
  for (int i = 1; i <= n; i++){
    daan += a[i];
    int now = n - merge(i + 1, n, 100000000 - a[i]) + 1; // now表示当前这个数有多少个跟他加起来超过10^8,如果不想手写二分函数也可以用lower_bound。
    gj += now;
  }
  daan = daan * (n-1) - gj * 100000000;
  printf("%lld\n", daan);
  return 0;
}

/*	Problem: 求和
	Language: C++	Result: 正确 	Time: 2026-08-25 20:29:07
	User: admin  	Problem: 5076	contest_id: 0*/
#include<iostream>
using namespace std;
int n,k,a[1010],ans=1,last=0;//last表示最后一队的人数 
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<=n;i++){
		if(last+a[i]<=k){
			last+=a[i];
		}else{
			ans++; //新开一个组队 
			last=a[i]; //重新开始一队 
		}
	}
	cout<<ans; 
	return 0;
}
/*	Problem: 组队
	Language: C++	Result: 正确 	Time: 2026-08-25 20:24:19
	User: admin  	Problem: 5075	contest_id: 0*/
#include<iostream>
using namespace std;
int n,a[1010],ans=-1;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		if(a[1]<a[i]){//找到比第一楼高的 
			ans=i;
			break;
		}
	} 
	cout<<ans;
	return 0;
}
/*	Problem: 大楼
	Language: C++	Result: 正确 	Time: 2026-08-25 20:10:25
	User: admin  	Problem: 5074	contest_id: 0*/
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,m;
int fa[200010];
int tot=0;
ll ans=0;
struct aaa
{
	int k;
	ll c;
	vector<int> s;
}a[200010];
inline bool cmp(aaa x,aaa y)
{
	return x.c<y.c;
}
inline int find(int k)
{
	if(fa[k]==k) return k;
	return fa[k]=find(fa[k]);
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		cin>>a[i].k>>a[i].c;
		for(int j=1;j<=a[i].k;j++)
		{
			int x;
			cin>>x;
			a[i].s.push_back(x);
		}
	}
	sort(a+1,a+m+1,cmp);
	for(int i=1;i<=n;i++) fa[i]=i;
	for(int i=1;i<=m;i++)
	{
		int fx=find(a[i].s[0]);
		for(int j=1;j<=a[i].k-1;j++)
		{
			int fy=find(a[i].s[j]);
			if(fx!=fy)
				fa[fy]=fx,ans+=a[i].c,tot++;
			if(tot==n-1) break;
		}
		if(tot==n-1) break;
	}
	if(tot!=n-1) printf("-1");
	else printf("%lld",ans);
	return 0;
}

/*	Problem: 最小树
	Language: C++	Result: 正确 	Time: 2026-08-25 18:25:17
	User: admin  	Problem: 5071	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e6 + 10;
LL n, k, a[N], ans = 1e10, pos[N];
set <LL> s;
int main ()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	
	cin >> n >> k;
	for (int i = 1; i <= n; i++) cin >> a[i], pos[a[i]] = i;
	for (int i = 1; i <= k; i++) s.insert (pos[i]);
	ans = *(--s.end()) - *s.begin();
	for (int i = k + 1; i <= n; i++) {
		s.erase (pos[i - k]);
		s.insert (pos[i]);
		ans = min (ans, *(--s.end()) - *s.begin());
	}
	cout << ans;
	return 0;
}

/*	Problem: 好序列
	Language: C++	Result: 正确 	Time: 2026-08-25 18:18:36
	User: admin  	Problem: 5070	contest_id: 0*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,ans,mx,a,b;
signed main() {
	cin>>n;
	for(int i=1; i<=n; i++) {
		cin>>a>>b;
		ans+=a;//加身体的和的高度
		mx=max(mx,b-a);//求出最大头的高度
	}
	cout<<ans+mx;//最后加和
	return 0;
}

/*	Problem: 巨人
	Language: C++	Result: 正确 	Time: 2026-08-25 18:12:43
	User: admin  	Problem: 5069	contest_id: 0*/
#include<iostream>
using namespace std;
string s,t;
int main(){
	cin>>s>>t;
	for(int i=0,j=0;i<s.size();j++){
		if(s[i]==t[j]){ //正确的字符和输入的位置匹配 
			cout<<j+1<<" ";
			i++;
		}
	}
	return 0;
}
/*	Problem: 字符匹配
	Language: C++	Result: 正确 	Time: 2026-08-25 18:07:28
	User: admin  	Problem: 5068	contest_id: 0*/
#include<iostream>
using namespace std;
int n,x,y,z;
int main(){
	cin>>n>>x>>y>>z;
	if(z>x&&z<y || z>y&&z<x) cout<<"Yes";
	else cout<<"No";
	return 0;
}
/*	Problem: 列车
	Language: C++	Result: 正确 	Time: 2026-08-25 17:57:00
	User: admin  	Problem: 5067	contest_id: 0*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
vector<pair<int, int> > ou, ji;
bool cmp1(pair<int, int> x, pair<int, int> y) {
    return x.first < y.first;
}
bool cmp2(pair<int, int> x, pair<int, int> y) {
    return x.second < y.second;
}
int solve(vector<pair<int, int> > point) {
    for (auto &it : point) {
        int x = it.first, y = it.second;
        it.first = (x - y) / 2;
        it.second = it.first + y;
    }
    sort(point.begin(), point.end(), cmp1);
    int ans = 0, now = 0;
    for (int i = 0; i < (int) point.size(); i++) {
        ans += point[i].first * i - now;
        now += point[i].first;
    }
    sort(point.begin(), point.end(), cmp2);
    int ans2 = 0, now2 = 0;
    for (int i = 0; i < (int) point.size(); i++) {
        ans2 += point[i].second * i - now2;
        now2 += point[i].second;
    }
    return ans + ans2;
}
signed main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        int x, y;
        cin >> x >> y;
        if ((x + y) % 2 == 0) ou.push_back({x, y});
        else ji.push_back({x, y + 1});
    }
    cout << solve(ou) + solve(ji) << endl;
    return 0;
}

/*	Problem: 跳跃距离
	Language: C++	Result: 正确 	Time: 2026-08-25 16:14:58
	User: admin  	Problem: 5066	contest_id: 0*/
#include <bits/stdc++.h>

using namespace std;

const int N = 2010;

int n, m, res;
char g[N][N];
const int dx[] = {0, 1, 0, -1}, dy[] = {-1, 0, 1, 0};
bool st[N][N];

bool chk(int x, int y) {
    for (int i = 0; i < 4; ++ i ) {
        int a = x + dx[i], b = y + dy[i];
        if (a >= 1 && a <= n && b >= 1 && b <= m) {
            if (g[a][b] == '#') return true;
        }
    }
    return false;
}

int bfs(int x, int y) {
    if (chk(x, y)) return 1;
    if (st[x][y]) return -114514;

    queue<pair<int, int> > q;
    q.emplace(x, y);
    int ans = 0;
    st[x][y] = true;

    map<pair<int, int>, bool> S;

    while (q.size()) {
        int x = q.front().first, y = q.front().second;
        q.pop();
        ++ ans;
        if (!chk(x, y)) {
            for (int i = 0; i < 4; ++ i ) {
                int a = x + dx[i], b = y + dy[i];
                if (a >= 1 && a <= n && b >= 1 && b <= m && g[a][b] == '.') {
                    if (chk(a, b)) {
                        if (!S[{a, b}]) {
                            q.emplace(a, b);
                            S[{a, b}] = true;
                        }
                    }
                    else if (!st[a][b]) {
                        q.emplace(a, b);
                        st[a][b] = true;	
                    }
                }
            }
        }
    }

    return ans;
}

int main() {
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; ++ i ) scanf("%s", g[i] + 1);
    for (int i = 1; i <= n; ++ i )
        for (int j = 1; j <= m; ++ j )
            if (g[i][j] != '#')
                res = max(res, bfs(i, j));
    printf("%d\n", res);
    return 0;
}

/*	Problem: 自由度
	Language: C++	Result: 正确 	Time: 2026-08-25 16:09:30
	User: admin  	Problem: 5065	contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
const int N=1010,M=1010,P=1e9+7,MOD=998244353;
const double PI=3.1415926,EPS=0.00001;
int n,m,dx[]={0,1,0,-1},dy[]={1,0,-1,0};
int ans,f[N*N],cur;
char a[N][N];
int vis[N][N];
void dfs(int x,int y){
    if(a[x][y]=='C'){vis[x][y]=cur;f[cur]++;return;}
    if(a[x][y]=='#'){return;}
    f[cur]++;
    vis[x][y]=cur;
    for(int i=0;i<4;i++){
        int nx=x+dx[i],ny=y+dy[i];
        if(nx<1||ny<1||nx>n||ny>m)continue;
        if(vis[nx][ny]==cur)continue;
        if(vis[nx][ny]&&a[nx][ny]!='C')continue;
        dfs(nx,ny);
    }
    return;
}
signed main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];}}
    for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(a[i][j]=='#'){
        for(int k=0;k<4;k++){
            int nx=i+dx[k],ny=j+dy[k];
            if(a[nx][ny]=='.')a[nx][ny]='C';
        }
    }
    for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(a[i][j]!='#'){
        if(a[i][j]=='.'&&vis[i][j])continue;
        ++cur;
        dfs(i,j);
        ans=max(ans,f[cur]);
    }
    cout<<ans;
    return 0;
}

/*	Problem: 自由度
	Language: C++	Result: 正确 	Time: 2026-08-25 16:09:18
	User: admin  	Problem: 5065	contest_id: 0*/
# include <bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN = 2e5 + 5;
int n; ll a[MAXN];
vector <ll> b;
int main() {
	cin >> n;
	for(int i = 1; i <= n; ++i) cin >> a[i];
	for(int i = 1; i <= n; ++i) {
		b.push_back(a[i]);
		while(b.size() > 1 && b[b.size() - 1] == b[b.size() - 2]) {
			b.pop_back();
			++b[b.size() - 1];
		}
	} cout << b.size();
	return 0;
}

/*	Problem: 球的合并
	Language: C++	Result: 正确 	Time: 2026-08-25 16:04:34
	User: admin  	Problem: 5064	contest_id: 0*/
#include<iostream>
using namespace std;
int n;
char a[110][110],b[110][110];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>b[i][j];
			if(a[i][j]!=b[i][j]){
				cout<<i<<" "<<j;
				return 0;
			}
		}
	}
	return 0;
}
/*	Problem: 不同位置
	Language: C++	Result: 正确 	Time: 2026-08-25 15:58:55
	User: admin  	Problem: 5063	contest_id: 0*/
#include<iostream>
using namespace std;
int a,b;
int main(){
	for(int i=1;i<=9;i++){
		int x;cin>>x;
		a+=x;
	}
	for(int i=1;i<=8;i++){
		int x;cin>>x;
		b+=x;
	}
	cout<<a-b+1;
	return 0;
}
/*	Problem: 棒球赛
	Language: C++	Result: 正确 	Time: 2026-08-25 15:50:36
	User: admin  	Problem: 5062	contest_id: 0*/
#include<bits/stdc++.h>
#define ll long long
#define rep(i,l,r) for(int i=(l);i<=(r);i++)
using namespace std;
int fa[500005];//父节点 
ll e[500005];//边数 
ll sz[500005];//点数 
int Find(int x){//寻找父亲节点 
	if(fa[x]==x) return x;
	else return fa[x]=Find(fa[x]);
}
void Union(int x,int y){
	int s=Find(x),t=Find(y);
	if(s==t) e[s]++;//合并的时候加边 
	else{
		fa[s]=t;
		e[t]=e[s]+e[t]+1;//注意要加1 
		sz[t]=sz[s]+sz[t];//大小 
	}
}
ll Wanquan(ll x){//完全图的点数 
	return x*(x-1)/2;
}
int n,q;ll ans;
int main(){
	scanf("%d %d",&n,&q);
	rep(i,1,n){
		fa[i]=i;
		sz[i]=1;//初始化的时候点数为1,边数为0 
	}
	while(q--){
		int x,y;
		scanf("%d %d",&x,&y);
		Union(x,y);
	}
	rep(i,1,n){
		if(fa[i]==i)
			ans+=(Wanquan(sz[i])-e[i]);//如题 
	}
	printf("%lld",ans);
	return 0;
}


/*	Problem: 新朋友
	Language: C++	Result: 正确 	Time: 2026-08-25 15:39:22
	User: admin  	Problem: 5059	contest_id: 0*/
#include<iostream>
using namespace std;
int n,q,ans=0,a[1010];
int main(){
	cin>>n>>q;
	for(int i=1;i<=q;i++){
		int x;cin>>x;
		a[x]^=1;
	}
	for(int i=1;i<=n;i++){
		if(a[i]) ans++; //统计没有牙齿的位置数量 
	}
	cout<<n-ans; //有牙齿的数量=总数-没有牙齿的数量
	return 0;
}
/*	Problem: 治疗牙齿
	Language: C++	Result: 正确 	Time: 2026-08-25 11:51:30
	User: admin  	Problem: 5057	contest_id: 0*/
#include<iostream>
using namespace std;
string s;
int x=0;
int main(){
	cin>>s;
	x=s[3]-'0';
	x=x*10+s[4]-'0';
	x=x*10+s[5]-'0';
	if(x>=1&&x<=349) cout<<"Yes";
	else cout<<"No";
	return 0;
}
/*	Problem: 比赛是否结束
	Language: C++	Result: 正确 	Time: 2026-08-25 11:42:58
	User: admin  	Problem: 5056	contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
long long a[3][3];int n[3][3];
bool dfs(long long x,long long y,int d,int k){
	if(d++==9)return x>y;
	bool t=1;
	for(int i=0;i<3&&t;i++)for(int j=0;j<3&&t;j++)if(!n[i][j]){
		n[i][j]=k;
		if(n[i][0]==k&&n[i][1]==k&&n[i][2]==k){
			n[i][j]=0;return 1;
		}
		if(n[0][j]==k&&n[1][j]==k&&n[2][j]==k){
			n[i][j]=0;return 1;
		}
		if(i==j&&n[0][0]==k&&n[1][1]==k&&n[2][2]==k){
			n[i][j]=0;return 1;
		}
		if(i+j==2&&n[0][2]==k&&n[1][1]==k&&n[2][0]==k){
			n[i][j]=0;return 1;
		}
		t=t&&dfs(y,x+a[i][j],d,-k);
		n[i][j]=0;
	}
	return !t;
}
int main(){
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)scanf("%lld",&a[i][j]);
	puts(dfs(0,0,0,1)?"Takahashi":"Aoki");
	return 0;
}

/*	Problem: 博弈
	Language: C++	Result: 正确 	Time: 2026-08-25 11:21:23
	User: admin  	Problem: 5053	contest_id: 0*/
#include <bits/stdc++.h>
#define int long long
using namespace std;
int l, r;
signed main() {
    cin >> l >> r;
    int now = l, num = 0;
    queue<pair<int,int>>ans; 
    while (now < r) {
        int i = 0;
        do { // 枚举 i 值
            int pow = (1LL << i);
            // 判断合法性
            if (now % pow != 0) break;
            if (pow * ((now / pow) + 1) > r) break;
        } while (++i);
        i--, num++;
        int pow = (1LL << i);
        int j = now / pow;
        ans.emplace(pow * j, pow * (j + 1));
        now = pow * (j + 1);
    }
    cout << num << endl;
    while (!ans.empty()) {
        cout << ans.front().first << " " << ans.front().second << endl;
        ans.pop();
    }
    return 0;
}

/*	Problem: 最小分割
	Language: C++	Result: 正确 	Time: 2026-08-25 11:12:44
	User: admin  	Problem: 5052	contest_id: 0*/
#include<iostream>
#include<cstdio>
using namespace std;
string s,t;
int n,p=0;
bool flag;
int main(){
	cin>>s>>t;
	n=s.size();
	for(int i=0;i<n;i++) s[i]+='A'-'a';
	if(t[2]=='X'){
		for(int i=0;i<n;i++){
			if(p<=1&&s[i]==t[p]) p++;
		}
		if(p>1) flag=true;
	}
	p=0;
	for(int i=0;i<n;i++){
		if(p<=2&&s[i]==t[p]) p++;
	}
	if(p>2) flag=true;
	flag?printf("Yes"):printf("No");
	return 0;
} 

/*	Problem: 机场代码
	Language: C++	Result: 正确 	Time: 2026-08-25 11:03:17
	User: admin  	Problem: 5051	contest_id: 0*/
#include<iostream>
using namespace std;
string s; 
int v[300],a[110],ans=0;
int main(){
	cin>>s;
	for(int i=0;i<s.size();i++)
		v[s[i]]++;
	
	for(int i=97;i<=122;i++)
		a[v[i]]++;
	
	for(int i=1;i<=100;i++)
		if(a[i]!=0&&a[i]!=2){//出现i次的字符种类不符合要求 
			cout<<"No";
			return 0;
		}
	
	cout<<"Yes"; //出现i次的字符种类恰好0种或2种 
	return 0;
}
/*	Problem: 好字符串
	Language: C++	Result: 正确 	Time: 2026-08-25 11:00:11
	User: admin  	Problem: 5050	contest_id: 0*/
#include<iostream>
using namespace std;
int n,a[110];//a[i]表示1~i的字符串的最长长度,即长度的前缀最大值
string s[110]; 
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>s[i]; 
		a[i]=max((int)s[i].size(),a[i-1]); //长度的前缀最大值 
	}
	for(int i=1;i<=n;i++){ //为长度不够的字符串补充* 
		for(int j=s[i].size();j<a[i];j++){
			s[i]+='*'; //在末尾补充* 
		} 
	} 
	
	for(int i=0;i<a[n];i++){ //从第0列开始输出 
		for(int j=n;j>=1;j--){ //从输入的最后1个字符串开始输出
			if(s[j].size()<=i) break; //字符串的长度不够,则不需要输出了
			cout<<s[j][i];
		} 
		cout<<endl;
	} 
	return 0;
}

/*	Problem: 文本竖排
	Language: C++	Result: 正确 	Time: 2026-08-24 21:26:56
	User: admin  	Problem: 5032	contest_id: 0*/
#include<iostream>
#include<cmath>
using namespace std;
int a[300],ans=0;
string s;
int main(){
	cin>>s;
	for(int i=0;i<s.size();i++){
		a[s[i]]=i; //数组下标计数:字符s[i]的位置是i 
	}
	for(char i='B';i<='Z';i++){
		ans+=abs(a[i]-a[i-1]); //A~B,B~C,...,Y~Z
	}
	cout<<ans; 
	return 0;
}
/*	Problem: 字母按键
	Language: C++	Result: 正确 	Time: 2026-08-24 21:13:03
	User: admin  	Problem: 4929	contest_id: 0*/
#include<iostream>
#include<algorithm>
using namespace std;
int n,q,a[200010],ans=0;
long long b[200010];
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int i=1;i<=n;i++){
		scanf("%lld",&b[i]);
		b[i]=b[i-1]+b[i]; //前缀和:编号1~i的村庄人数 
	}
	scanf("%d",&q);
	while(q--){
		int x,y;
		scanf("%d %d",&x,&y);
		int r=upper_bound(a+1,a+n+1,y)-a-1; //右边界的前一个位置
		int l=lower_bound(a+1,a+n+1,x)-a;   //左边界
		if(r<l) printf("0\n"); 
		else printf("%lld\n",b[r]-b[l-1]); //区间和 
 	} 
	return 0;
}
/*	Problem: 村民统计
	Language: C++	Result: 正确 	Time: 2026-08-24 16:18:09
	User: admin  	Problem: 4945	contest_id: 0*/
#include<iostream>
#include<cmath>
using namespace std;
int n,f,z;
int main(){
	cin>>n;
	for(int i=1;i<n;i++){
		int x;cin>>x;
		if(x<0) f+=x; //负数 
		else z+=x; //正数 
	}
	if(z>-f) cout<<-abs(z+f); 
	else cout<<abs(z+f); 
	return 0;
}
/*	Problem: 得分
	Language: C++	Result: 正确 	Time: 2026-08-24 10:34:36
	User: admin  	Problem: 5049	contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+7;
const long long inf=1e20+7;
int N;
long long f[maxn],dep[maxn],sz[maxn],ALL,coin[maxn];
int head[maxn<<1],nxt[maxn<<1],to[maxn<<1],cnt_edge;
void AddEdge(int u,int v)
{nxt[++cnt_edge]=head[u];to[cnt_edge]=v;head[u]=cnt_edge;}
void dfs(int u,int fa,long long dep){
	f[1]+=coin[u]*dep;sz[u]=coin[u];
	for(int i=head[u];i;i=nxt[i]){
		int v=to[i];if(v==fa)continue;
		dfs(v,u,dep+1);sz[u]+=sz[v];
	}
}
void solve(int u,int fa,long long ans){
	f[u]=ans;
	for(int i=head[u];i;i=nxt[i]){
		int v=to[i];if(v==fa)continue;
		long long dans=ans;
		dans-=sz[v];dans+=ALL-sz[v];//递推计算,你没看错,就这么简单。
		solve(v,u,dans);
	}
}
int main(){
	scanf("%d",&N);
	for(int i=1;i<N;i++)
	{int a,b;scanf("%d %d",&a,&b);AddEdge(a,b);AddEdge(b,a);}
	for(int i=1;i<=N;i++)scanf("%lld",&coin[i]),ALL+=coin[i];
	dfs(1,0,0);solve(1,0,f[1]);
	f[0]=inf;for(int i=1;i<=N;i++)f[0]=min(f[0],f[i]);
	printf("%lld",f[0]);
	return 0;
}

/*	Problem: 最小和
	Language: C++	Result: 正确 	Time: 2026-08-24 10:24:21
	User: admin  	Problem: 5048	contest_id: 0*/
#include <bits/stdc++.h>

using namespace std;

int n,m,t,fx,fy,sx,sy,dx[4]={0,0,1,-1},dy[4]={1,-1,0,0},a[205][205],b[205][205],dis[205][205];
struct node{
	int x,y,val;
	const bool operator<(const node &x)const{return val<x.val;}
};

void bfs(){
	priority_queue<node>q;//使用优先队列将剩余能量较大的排在前面进行优化
	memset(dis,-0x3f,sizeof dis);//初始化
	dis[sx][sy]=max(b[sx][sy],0);//初始化
	q.push({sx,sy,dis[sx][sy]});//起点入队
	while(q.size()){
		auto[x,y,val]=q.top();//出队
		q.pop();
		if(x==fx&&y==fy){
			cout << "Yes" << endl;//如果走到终点就结束
			return;
		}
		if(!val)continue;//如果没能量了就舍去
		if(val<dis[x][y])continue;//如果走到的格子记录的能量比现在的大就舍去
		for(int i=0;i<4;++i){
			int xx=x+dx[i],yy=y+dy[i];
			if(xx<1||xx>n||yy<1||yy>m||!a[xx][yy])continue;//判出图以及障碍
			int v=b[xx][yy]?max(b[xx][yy],val-1):val-1;//是否喝药
			if(v>dis[xx][yy]){
				//剩余能量比当前格子记录的大,更新记录的能量并入队
				q.push({xx,yy,v});
				dis[xx][yy]=v;
			}
		}
	}
	cout << "No" << endl;
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	cin >> n >> m;
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j){
			char c;
			cin >> c;
			//标记地图
			a[i][j]=1;
			if(c=='S')sx=i,sy=j;
			if(c=='T')fx=i,fy=j;
			if(c=='#')a[i][j]=0;
		}
	}
	cin >> t;
	//标记药水
	for(int x,y,z;t--;){
		cin >> x >> y >> z;
		b[x][y]=z;
	}
	bfs();
	return 0;
}

/*	Problem: 走格子
	Language: C++	Result: 正确 	Time: 2026-08-24 10:18:36
	User: admin  	Problem: 5047	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
#define int long long
struct node {
	int a, c;
}b[200010];
map<int, int> m;
signed main() {
ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> b[i].a >> b[i].c;
		if (m[b[i].c] == 0)
			m[b[i].c] = b[i].a;
		else 
		m[b[i].c] = min(m[b[i].c], b[i].a);
	}
	int ans = -1e9;
	for (int i = 1; i <= n ;i ++){
		ans = max(m[b[i].c], ans);
	}
	cout << ans;
  	return 0;
} 
/*	Problem: 彩豆
	Language: C++	Result: 正确 	Time: 2026-08-24 10:11:00
	User: admin  	Problem: 5046	contest_id: 0*/
#include<iostream>
using namespace std;
int n;
pair<int,int> p[110];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>p[i].first>>p[i].second;
	for(int i=1;i<=n;i++){
		int mx=0,ans;
		for(int j=1;j<=n;j++){
			if((p[i].first-p[j].first)*(p[i].first-p[j].first)+(p[i].second-p[j].second)*(p[i].second-p[j].second)>mx){
				mx=(p[i].first-p[j].first)*(p[i].first-p[j].first)+(p[i].second-p[j].second)*(p[i].second-p[j].second);
				ans=j; //更新答案编号 
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}
/*	Problem: 最远的点
	Language: C++	Result: 正确 	Time: 2026-08-24 10:07:23
	User: admin  	Problem: 5045	contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		if(i%3==0) cout<<'x'; //3的倍数位置
		else cout<<'o';
	} 
	return 0;
}
/*	Problem: 罚球
	Language: C++	Result: 正确 	Time: 2026-08-24 09:54:24
	User: admin  	Problem: 5044	contest_id: 0*/
#include <iostream>
using namespace std;

const int N = 3e5;
int n, edge[N], mark[N], vis[N], ans[N];

/* 从每个点开始 dfs:
   edge 存边;mark 标记,每次 dfs 用不同颜色;
   vis 记录每次 dfs 到达点的时间,用于快速计算环的大小;
   ans 记录贡献。*/

int dfs(int s, int c, int d) {
  if (mark[s]) { // s 被标记过
    if (mark[s] == c) {
       // 如果是本轮 dfs 标记的,则找到一个环
      ans[s] = d - vis[s];
      return s;
    } // 若不是本轮标记的,则先前一定处理过了
    return -1;
  }
  mark[s] = c, vis[s] = d; // 标记并记录时间
  int e = dfs(edge[s], c, d + 1);
  if (e == -1) ans[s] = ans[edge[s]] + 1; // 上一个点不在环里
  else if (e == s) return -1; // 到达环的终点
  else ans[s] = ans[edge[s]]; // 两个点都在环里
  return e;
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0), cout.tie(0);
  cin >> n;
  for (int i = 1; i <= n; ++i) cin >> edge[i];
  long long sum = 0;
  for (int i = 1; i <= n; ++i) {
    dfs(i, i, 1);
    sum += ans[i];
  }
  cout << sum << "\n";
  return 0;
}

/*	Problem: 可到达顶点数
	Language: C++	Result: 正确 	Time: 2026-08-23 21:05:19
	User: admin  	Problem: 5101	contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=998244353;
ll qkpow(__int128 pos){
	ll ans=1,num=10; 
	while(pos){
		if(pos%2==1) ans=1ll*ans*num%mod;
		num=1ll*num*num%mod; pos=pos/2;
	}
	return ans;
}
int main(){
	ll n;scanf("%lld",&n);
	ll m=n; int cnt=0; 
	while(m) cnt++,m/=10;
	ll p=n%mod,q=n,ans=0; 
	__int128 pos=cnt;
	while(q){
		if(q%2==1){
			ans=1ll*ans*qkpow(pos)%mod;
			ans=(ans+p)%mod;
		}
		p=(1ll*p*qkpow(pos)%mod+p)%mod;
		q=q/2; pos=pos*2;
	}
	printf("%lld\n",ans); 
	return 0;
}

/*	Problem: 连接N次
	Language: C++	Result: 正确 	Time: 2026-08-23 21:00:53
	User: admin  	Problem: 5100	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;

int x;
char s[2005][2005];

void fill(int x, int y, int k) {
	if (k == 0) return s[x][y] = 1, void();
	int t = k / 3;
	fill(x, y, t);
	fill(x + t, y, t);
	fill(x + t * 2, y, t);
	fill(x, y + t, t);
	fill(x, y + t * 2, t);
	fill(x + t, y + t * 2, t);
	fill(x + t * 2, y + t, t);
	fill(x + t * 2, y + t * 2, t);
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr), cout.tie(nullptr);
	cin >> x;
	if (x == 0) return cout << "#", 0;
	int t = pow(3, x);
	fill(1, 1, t);
	for (int i = 1; i <= t; i++) {
		for (int j = 1; j <= t; j++) cout << (s[i][j] == 0 ? '.' : '#');
		cout << '\n';
	}
	return 0;
}

/*	Problem: N级地毯
	Language: C++	Result: 正确 	Time: 2026-08-23 20:55:54
	User: admin  	Problem: 5099	contest_id: 0*/
#include<iostream>
using namespace std;
int d,x;
string s; 
int main(){
	cin>>s;
	for(int i=0;i<s.size();i++){
		if(s[i]>='a') x++;
		else d++;
	}
	if(d>x){//全部转大写 
		for(int i=0;i<s.size();i++){
			if(s[i]>='a') s[i]-=32;	
		}
	}else{//全部转小写 
		for(int i=0;i<s.size();i++){
			if(s[i]<='Z') s[i]+=32;	
		}
	}
	cout<<s;
	return 0;
}
/*	Problem: 大小写转换
	Language: C++	Result: 正确 	Time: 2026-08-23 20:49:27
	User: admin  	Problem: 5098	contest_id: 0*/
#include<iostream>
using namespace std;
int n,m,x,ans=0;
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>x;
		if(x<=m){
			ans++; //统计数量 
		}
		m-=x;
	}
	cout<<ans; 
	return 0;
}
/*	Problem: 消毒
	Language: C++	Result: 正确 	Time: 2026-08-23 20:44:09
	User: admin  	Problem: 5097	contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
int main(){
  long long t;
  scanf("%lld",&t);
  while(t--){
    long long n,m;
    scanf("%lld%lld",&n,&m);
    __int128 N=n,M=m;
    __int128 sum=0,x=1;
    __int128 zeroinint128=0;
    for(int i=1;i<=20;++i){
      sum=(sum+n/(m/__gcd(M,10*x-1))*max(zeroinint128,min(n-x+1,9*x)))%998244353;
      x*=10;
    }
    printf("%lld\n",(long long)sum%998244353);
  }
	return 0;
}

/*	Problem: x+y
	Language: C++	Result: 正确 	Time: 2026-08-23 17:47:32
	User: admin  	Problem: 5131	contest_id: 0*/
#include<iostream>
#include<vector>
#include<queue>
#define LL long long
#define F(i,k,n) for(int i=k;i<=n;++i)
#define RF(i,k,n) for(int i=k;i>=n;--i)
using namespace std;
vector<vector<bool>>v;
vector<vector<bool>>us;
vector<vector<int>>ans;
int a[8]={1,1,1,0,0,-1,-1,-1};
int b[8]={1,0,-1,1,-1,1,0,-1};
struct node{
	int x;
	int y;
	int step;
};
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int n,m;
	cin>>n>>m;
	v.resize(n+1);
	ans.resize(n+1);
	us.resize(n+1);
	queue<node>q;
	F(i,1,n){
		v[i].resize(m+1);
		ans[i].resize(m+1);
		us[i].resize(m+1);
		string s;
		cin>>s;
		F(j,1,m){
			ans[i][j]=-1;
			v[i][j]=(s[j-1]=='#');
		}
	}
	F(i,1,n){
		F(j,1,m){
			if(v[i][j]==0)
				continue;
			bool bl=0;
			F(k,0,7){
				int nx=i+a[k];
				int ny=j+b[k];
				if(nx<=0||ny<=0||nx>n||ny>m){
					continue;
				}
				if(v[nx][ny]==0){
					bl=1;
					break;
				}
			}
			if(bl==0)
				us[i][j]=1;
		}
	}
	F(i,1,n){
		F(j,1,m){
			if(us[i][j])
				v[i][j]=0;
			if(v[i][j]){
				ans[i][j]=0;
				q.push({i,j,0});
			}
		}
	}
	while(!q.empty()){
		int x=q.front().x;
		int y=q.front().y;
		int step=q.front().step;
		q.pop();
		F(i,0,7){
			int nx=x+a[i];
			int ny=y+b[i];
			if(nx<=0||ny<=0||nx>n||ny>m||ans[nx][ny]!=-1){
				continue;
			}
			node pt;
			pt.x=nx;
			pt.y=ny;
			pt.step=step+1;
			ans[nx][ny]=step+1;
			q.push(pt);
		}
	}
	F(i,1,n){
		F(j,1,m){
			if(ans[i][j]&1){
				cout<<'.';
			}else{
				cout<<'#';
			}
		}
		cout<<'\n';
	}
	return 0;
}


/*	Problem: 反复重涂
	Language: C++	Result: 正确 	Time: 2026-08-23 17:43:53
	User: admin  	Problem: 5130	contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
const int N=200002;
int n,m,a[N],b[N],l=1,r=1,ans;
signed main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=m;i++)cin>>b[i];
	sort(a+1,a+n+1),sort(b+1,b+m+1);
	while(l<=n&&r<=m)
	{
		if(a[l]*2>=b[r])l++,r++,ans++;
		else l++;
	}
	cout<<ans;
	return 0;
}

/*	Problem: 寿司
	Language: C++	Result: 正确 	Time: 2026-08-23 17:36:24
	User: admin  	Problem: 5129	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int t;
    cin >> t;
    
    while (t--) {
        long long x1, y1, r1, x2, y2, r2;
        cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
        
        // 计算中心距离的平方
        long long dx = x1 - x2;
        long long dy = y1 - y2;
        long long d_sq = dx * dx + dy * dy;
        
        // 计算半径和、差的平方
        long long r_sum = r1 + r2;
        long long r_diff = abs(r1 - r2);
        
        // 判断是否有公共点:|R1-R2|^2 <= d^2 <= (R1+R2)^2
        if (r_diff * r_diff <= d_sq && d_sq <= r_sum * r_sum) {
            cout << "Yes\n";
        } else {
            cout << "No\n";
        }
    }
    
    return 0;
}
/*	Problem: 两圆相交
	Language: C++	Result: 正确 	Time: 2026-08-23 17:33:16
	User: admin  	Problem: 5128	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int n, m;
    cin >> n >> m;
    
    int cnt = 0;
    while (m > 0) {
        m = n % m;
        cnt++;
    }
    
    cout << cnt << "\n";
    return 0;
}
/*	Problem: 循环模运算
	Language: C++	Result: 正确 	Time: 2026-08-23 17:29:13
	User: admin  	Problem: 5127	contest_id: 0*/
#include<bits/stdc++.h>
#define LL long long
#define UInt unsigned int
#define ULL unsigned long long
#define LD long double
#define pii pair<int,int>
#define pLL pair<LL,LL>
#define pDD pair<LD,LD>
#define fr first
#define se second
#define pb push_back
#define isr insert
#define _i128 __int128
using namespace std;
const int N = 1e6+5;
const LL MOD = 998244353;
LL n,Fa[N],c[N],d[N],maxd;
LL jc[N],inv[N];
LL sc[N],sd[N],dp[N];
vector<int> g[N];
LL read(){
    LL su=0,pp=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')pp=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){su=su*10+ch-'0';ch=getchar();}
    return su*pp;
}
LL QP(LL x,LL y=MOD-2){
    LL as=1;
    while(y){
        if(y&1)as=as*x%MOD;
        x=x*x%MOD,y>>=1;
    }return as;
}
LL sum_mul(LL x,LL y){
    _i128 as=1;
    for(LL i=x;i<=y;i++)
        as=as*(_i128)(i)%MOD;
    return (LL)(as);
}
void DFS_sum(int u){
    sc[u]=c[u],sd[u]=d[u];
    for(int v:g[u])
        DFS_sum(v),sc[u]+=sc[v],sd[u]+=sd[v];
    return;
}
void DFS_dp(int u){
    LL init=sum_mul(sc[u]-sd[u]+1,sc[u]-sd[u]+d[u]);
    init=init*inv[d[u]]%MOD;
    dp[u]=init;
    for(int v:g[u])DFS_dp(v),dp[u]=dp[u]*dp[v]%MOD;
    return;
}
int main(){
    n=read();
    for(int i=2;i<=n;i++)
        Fa[i]=read(),g[Fa[i]].pb(i);
    for(int i=1;i<=n;i++)c[i]=read();
    for(int i=1;i<=n;i++)
        d[i]=read(),maxd=max(maxd,d[i]);
    jc[0]=1,inv[0]=1;
    for(LL i=1;i<=maxd;i++)
        jc[i]=jc[i-1]*i%MOD;
    inv[maxd]=QP(jc[maxd]);
    for(LL i=maxd-1;i>=1;i--)
        inv[i]=inv[i+1]*(i+1)%MOD;
    DFS_sum(1),DFS_dp(1);
    cout<<dp[1]<<"\n";
    return 0;
}

/*	Problem: 糖果
	Language: C++	Result: 正确 	Time: 2026-08-23 17:24:30
	User: admin  	Problem: 5126	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    int n, q;
    cin >> n >> q;
    
    vector<int> blocks(n + 1, 0);  // 每个格子的放置次数(累计放置了多少次)
    map<int, int> cnt;  // 记录每种【放置次数】对应的格子数量(注意:不是真实方块数)
    cnt[0] = n;  // 初始所有格子的放置次数都是0
    int base = 0;  // 整体移除的次数(所有格子同时移除了多少次)
    
    while (q--) {
        int type;
        cin >> type;
        
        if (type == 1) {
            int x;
            cin >> x;
            
            // 更新计数
            cnt[blocks[x]]--;
            if (cnt[blocks[x]] == 0) cnt.erase(blocks[x]);
            
            blocks[x]++;
            cnt[blocks[x]]++;
            
            // 检查是否所有格子都有方块(即没有格子的放置次数等于base)
            if (cnt.find(base) == cnt.end()) {//if(cnt.count(base) == 0) {
                // 所有格子都有方块,触发整体移除
                base++;
            }
        } else {
            int y;
            cin >> y;
            
            // 统计 blocks[i] - base >= y 的格子数
            int ans = 0;
            for (auto& p : cnt) {
                if (p.first - base >= y) ans += p.second;
            }
            cout << ans << "\n";
        }
    }
    
    return 0;
}
/*	Problem: 方块掉落
	Language: C++	Result: 正确 	Time: 2026-08-23 17:12:35
	User: admin  	Problem: 5124	contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,q,k,cnt[300005],sum[300005];
signed main() {
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    cin>>n>>q;
    sum[0]=n;
    for (int i=1;i<=q;i++) {
        int op;
        cin>>op;
        if (op==1) {
            int x;
            cin>>x;
            cnt[x]++;
            sum[cnt[x]]++;
            if (sum[k+1]==n) k++;
        } else {
            int y;
            cin>>y;
            int tar=y+k;
            if (tar>q) cout<<"0\n";
            else cout<<sum[tar]<<'\n';
        }
    }
    return 0;
}

/*	Problem: 方块掉落
	Language: C++	Result: 正确 	Time: 2026-08-23 17:10:31
	User: admin  	Problem: 5124	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    // 手机键盘字母到数字的映射
    // abc -> 2, def -> 3, ghi -> 4, jkl -> 5, mno -> 6, pqrs -> 7, tuv -> 8, wxyz -> 9
    string mapping = "22233344455566677778889999";
    // mapping[0] = '2' 对应 'a', mapping[25] = '9' 对应 'z'
    
    string result = "";
    for (int i = 0; i < n; i++) {
        string s;
        cin >> s;
        char first = s[0];
        // 根据首字母映射到数字
        result += mapping[first - 'a'];
    }
    
    cout << result << endl;
    
    return 0;
}
/*	Problem: 459
	Language: C++	Result: 正确 	Time: 2026-08-23 17:05:27
	User: admin  	Problem: 5123	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;

int main() {
    int x;
    cin >> x;
    
    string s = "HelloWorld";
    // 输出除第x个字符外的所有字符(下标从0开始,第x个字符下标为x-1)
    for (int i = 0; i < s.size(); i++) {
        if (i != x - 1) {
            cout << s[i];
        }
    }
    cout << endl;
    
    return 0;
}
/*	Problem: Hell, World!
	Language: C++	Result: 正确 	Time: 2026-08-23 16:59:50
	User: admin  	Problem: 5122	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod=998244353;
int jc[3000005];
int inv[3000005];
int X1,X2,X3;
inline int ksm(int a,int x){
	int res=1;
	while (x){
		if (x&1){
			res=res*a%mod;
		}
		a=a*a%mod;
		x>>=1;
	}
	return res;
}
inline int C(int n,int m){
    if (m<0 || m>n) return 0;
    return jc[n]*inv[m]%mod*inv[n-m]%mod;
}

signed main(){
	cin>>X1>>X2>>X3;
	int maxn=X1+X2+X3+5;
    jc[0]=1;
    for (int i=1;i<=maxn;i++){
    	jc[i]=jc[i-1]*i%mod;
	}
    inv[maxn]=ksm(jc[maxn],mod-2);
    for (int i=maxn;i>=1;i--){
    	inv[i-1]=inv[i]*i%mod;
	}
	int ans=0;
	int lim=min(X1,min(X3,X2+1));
	for (int k=0;k<=lim;k++){
		int w=C(X2+1,k)*C(X1+X2-k,X1-k)%mod*C(X3+X2-k,X3-k)%mod;
		if (k&1){
			ans=(ans-w+mod)%mod;
		}
		else{
			ans=(ans+w)%mod;
		}
	}
	cout<<ans;
	return 0;
}

/*	Problem: 计数123
	Language: C++	Result: 正确 	Time: 2026-08-23 16:48:17
	User: admin  	Problem: 5121	contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
int X,Q,A,B,i;
priority_queue<int>maxn;
priority_queue<int,vector<int>,greater<int>>minn;
int main(){
	scanf("%d %d",&X,&Q);
	maxn.push(X);
	for(;i<Q;i++){
		scanf("%d %d",&A,&B);
		if(A<=maxn.top())
			maxn.push(A);
		else
			minn.push(A);
		if(maxn.size()-2==minn.size()){
			minn.push(maxn.top());
			maxn.pop();
		}
		if(B<=maxn.top())
			maxn.push(B);
		else
			minn.push(B);
		if(maxn.size()+1==minn.size()){
			maxn.push(minn.top());
			minn.pop();
		}
		printf("%d\n",maxn.top());
	}
	return 0;
}

/*	Problem: 黑板中位数
	Language: C++	Result: 正确 	Time: 2026-08-23 16:44:56
	User: admin  	Problem: 5120	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
int main () {
	string s;
	long long cnt = 0; // 见祖宗警告
	cin >> s;
	for (int i = 0; i < s.size(); i ++) {
		if (s[i] == 'C') {
			int len = s.size ();
			cnt += min (i - 0 + 1, len - i); // 加上以该位为中心的符合标准的子串个数
			//cout << i << ' ' << min (i - 0 + 1, len - i) << endl;
		}
	} 
	cout << cnt;
	return 0;
}

/*	Problem: 中心
	Language: C++	Result: 正确 	Time: 2026-08-23 16:39:09
	User: admin  	Problem: 5119	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;

int main() {
    int H, W;
    cin >> H >> W;
    
    // 方向数组:上下左右
    int dx[4] = {-1, 1, 0, 0};
    int dy[4] = {0, 0, -1, 1};
    
    for (int i = 1; i <= H; i++) {
        for (int j = 1; j <= W; j++) {
            int cnt = 0;
            // 检查四个方向
            for (int k = 0; k < 4; k++) {
                int ni = i + dx[k];
                int nj = j + dy[k];
                // 判断是否在网格范围内
                if (ni >= 1 && ni <= H && nj >= 1 && nj <= W) {
                    cnt++;
                }
            }
            cout << cnt << (j == W ? "" : " ");
        }
        cout << "\n";
    }
    
    return 0;
}
/*	Problem: 相邻格子
	Language: C++	Result: 正确 	Time: 2026-08-23 16:36:06
	User: admin  	Problem: 5118	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;

int main() {
    string S;
    int N;
    cin >> S >> N;
    // 从位置N开始,取长度为S.length()-2*N的子串
    cout << S.substr(N, S.length() - 2 * N) << endl;
    return 0;
}
/*	Problem: 截取字符串
	Language: C++	Result: 正确 	Time: 2026-08-23 16:32:17
	User: admin  	Problem: 5117	contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define lowbit(x) ((x)&(-(x)))
const int N=3e5+10,mod=998244353;
vector<int>ll[N],rr[N];
map<pair<int,int>,bool>px;
vector<pair<int,int>>vec;
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int l,r;
		cin>>l>>r;
		vec.push_back({l,r});
		ll[l].push_back(r);
		rr[r].push_back(l);
	}
	sort(vec.begin(),vec.end(),greater<pair<int,int>>());
	int mn=1e18;
	for(auto v:vec)
	{
		if(v.se>=mn) px[v]=1;
		mn=min(mn,v.se);
	}
	for(int i=1;i<=n;i++)
	{
		sort(ll[i].begin(),ll[i].end());
		sort(rr[i].begin(),rr[i].end());
	}
	int q;
	cin>>q;
	while(q--)
	{
		int l,r;
		cin>>l>>r;
		if(!rr[r].size()||!ll[l].size())
		{
			cout<<"No\n";
			continue;
		}
		auto itl=lower_bound(rr[r].begin(),rr[r].end(),l);
		if(itl==rr[r].end())
		{
			cout<<"No\n";
			continue;
		}
		int tl=*itl;
		if(tl==l&&px[{l,r}])
		{
			cout<<"Yes\n";
			continue;
		}
		int fl=lower_bound(ll[l].begin(),ll[l].end(),tl-1)-ll[l].begin(),fr=lower_bound(ll[l].begin(),ll[l].end(),r+1)-ll[l].begin()-1;
		if(fl>fr||(fl==fr&&tl==l&&ll[l][fl]==r)) cout<<"No\n";
		else cout<<"Yes\n";
	}
	return 0; 
}

/*	Problem: 交叉桌布
	Language: C++	Result: 正确 	Time: 2026-08-23 16:28:51
	User: admin  	Problem: 5116	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;

int N;
long long K;
vector<long long> A;

bool check(long long x) {
    long long ops = 0;
    for (int i = 1; i <= N; i++) {
        if (A[i] < x) {
            long long diff = x - A[i];
            long long t = (diff + i - 1) / i;
            ops += t;
            if (ops > K) return false;
        }
    }
    return ops <= K;
}

int main() {
    cin >> N >> K;
    
    A.resize(N + 1);
    long long min_val = 2e18, max_val = 0;
    for (int i = 1; i <= N; i++) {
        cin >> A[i];
        min_val = min(min_val, A[i]);
        max_val = max(max_val, A[i]);
    }
    
    // 二分答案
    long long left = min_val, right = max_val + K;
    long long ans = min_val;
    
    while (left <= right) {
        long long mid = left + (right - left) / 2;
        if (check(mid)) {
            ans = mid;
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    
    cout << ans << endl;
    
    return 0;
}
/*	Problem: 提升最小值
	Language: C++	Result: 正确 	Time: 2026-08-23 16:22:21
	User: admin  	Problem: 5115	contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
long long n,k,l[200001],c,now;//不开long long见祖宗
map<long long,map<long long,long long> >a;//因为开数组会导致MLE,所以我使用map完成
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>l[i];
		for(int j=1;j<=l[i];j++)
			cin>>a[i][j];
	}
	for(int i=1;i<=n;i++){
		cin>>c;
		now+=c*l[i];//拼接增加长度
		if(k>now)//如果长度过短则直接跳到下一层循环
			continue;
		cout<<((k-(now-c*l[i]))%l[i]==0?a[i][l[i]]:a[i][(k-(now-c*l[i]))%l[i]])<<endl;//长度足够,输出答案
		break;
	}
	return 0;
}

/*	Problem: 长序列
	Language: C++	Result: 正确 	Time: 2026-08-23 10:23:24
	User: admin  	Problem: 5114	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;

int main() {
    int N;
    cin >> N;
    
    // 使用 vector 存储 N 个序列,下标从 1 开始
    vector<vector<int>> A(N + 1);
    
    for (int i = 1; i <= N; ++i) {
        int L;
        cin >> L;
        A[i].resize(L + 1);  // 下标从 1 开始
        for (int j = 1; j <= L; ++j) {
            cin >> A[i][j];
        }
    }
    
    int X, Y;
    cin >> X >> Y;
    
    // 输出第 X 个序列的第 Y 个元素
    cout << A[X][Y] << endl;
    
    return 0;
}
/*	Problem: 多维数组
	Language: C++	Result: 正确 	Time: 2026-08-23 10:13:52
	User: admin  	Problem: 5113	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;

int main() {
    int N;
    cin >> N;
    
    vector<int> A(N);
    for (int i = 0; i < N; ++i) {
        cin >> A[i];
    }
    
    int X;
    cin >> X;
    
    // 输出第X个元素(题目索引从1开始,数组从0开始)
    cout << A[X - 1] << endl;
    
    return 0;
}
/*	Problem: 数组
	Language: C++	Result: 正确 	Time: 2026-08-23 10:07:15
	User: admin  	Problem: 5112	contest_id: 0*/
#include"bits/stdc++.h"
const int N = 1e5 + 5;
int n,m,w;
std::set<std::pair<int,int> > se;
bool vis[11][N];
bool memo[11][N];
bool dp[11][N];
std::vector<int> g[N];
std::string s[N];
bool f(int day,int u){
    if (memo[day][u]) return dp[day][u];
    if (vis[day][u]) return dp[day][u] = 1;
    vis[day][u] = 1;
    se.insert({day,u});
    int tomm = (day + 1) > w ? day + 1 - w : day + 1;
    if (s[u][tomm - 1] == 'o') 
        if (f(tomm,u)) return memo[day][u] = 1,dp[day][u] = 1;
    for (int v : g[u])
        if (s[v][tomm - 1] == 'o')
            if (f(tomm,v)) return memo[day][u] = 1,dp[day][u] = 1;
    return memo[day][u] = 1,dp[day][u] = 0;
}
int main(){
    std::cin.tie(0)->sync_with_stdio(0);
    int T;
    for (std::cin >> T;T--;){
        std::cin >> n >> m;
        for (int i = 1;i <= n;i++) g[i].clear();
        for (int i = 1;i <= m;i++){
            int u,v;std::cin >> u >> v;
            g[u].push_back(v);
            g[v].push_back(u);
        }
        std::cin >> w;
        for (int i = 1;i <= w;i++) std::fill(memo[i] + 1,memo[i] + 1 + n,0);
        for (int i = 1;i <= n;i++) std::cin >> s[i];
        bool find = 0;
        for (int i = 1;i <= n;i++){
            se.clear();
            if (s[i][0] == 'o' && f(1,i)){
                for (auto p : se) vis[p.first][p.second] = 0;
                std::cout << "Yes\n";
                find = 1;
                break;
            }
            for (auto p : se) vis[p.first][p.second] = 0;
        }
        if (!find) std::cout << "No\n";
    }
    return 0;
}

/*	Problem: 休息日旅行
	Language: C++	Result: 正确 	Time: 2026-08-23 10:03:17
	User: admin  	Problem: 5111	contest_id: 0*/
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int mod = 998244353;
int dp[3];

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    string s;
    cin >> s;

    for (const char& c : s) {
        int x = c - 'a';
        (dp[x] += (dp[(x + 1) % 3] + dp[(x + 2) % 3] + 1) % mod) %= mod;
    }
    cout << (dp[0] + dp[1] + dp[2]) % mod;

    return 0;
}

/*	Problem: 子序列个数
	Language: C++	Result: 正确 	Time: 2026-08-23 09:57:21
	User: admin  	Problem: 5110	contest_id: 0*/
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int mod = 998244353;

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    string s;
    cin >> s;
    int n = (int)s.size();

    int cnt = 1, ans = 1;
    for (int i = 1; i < n; i++) {
        if (s[i] != s[i - 1]) (cnt += 1) %= mod;
        else cnt = 1;
        (ans += cnt) %= mod;
    }
    cout << ans;

    return 0;
}

/*	Problem: 不相邻
	Language: C++	Result: 正确 	Time: 2026-08-23 09:52:51
	User: admin  	Problem: 5109	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    int a[3][6];
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 6; j++) {
            cin >> a[i][j];
        }
    }
    
    // 统计每个骰子上 4, 5, 6 各出现几次
    int cnt[3][3] = {};  // cnt[i][v] 表示第 i 个骰子上数字 (v+4) 出现的次数
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 6; j++) {
            if (a[i][j] >= 4 && a[i][j] <= 6) {
                cnt[i][a[i][j] - 4]++;
            }
        }
    }
    
    // 枚举 4, 5, 6 分配给 3 个骰子的排列
    // perm[0] 表示骰子0出的数字(0=4, 1=5, 2=6)
    int perm[] = {0, 1, 2};
    double ans = 0;
    
    do {
        double prob = 1.0;
        for (int i = 0; i < 3; i++) {
            prob *= cnt[i][perm[i]] / 6.0;
        }
        ans += prob;
    } while (next_permutation(perm, perm + 3));
    
    cout << fixed << setprecision(10) << ans << '\n';
    
    return 0;
}
/*	Problem: 骰子
	Language: C++	Result: 正确 	Time: 2026-08-23 09:47:57
	User: admin  	Problem: 5108	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    int x;
    cin >> x;
    
    if (x >= 3 && x <= 18) {
        cout << "Yes\n";
    } else {
        cout << "No\n";
    }
    
    return 0;
}
/*	Problem: ABC
	Language: C++	Result: 正确 	Time: 2026-08-23 09:39:24
	User: admin  	Problem: 5107	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
void solve();
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int T = 1;
    // cin >> T;
    while (T--) solve();
    return 0;
}
void solve() {
    int n, q;
    cin >> n >> q;
    vector<int> dn(n+1, 0), up(n+1, 0), ans(n+1, 0);
    while (q--) {
        int x, y;
        cin >> x >> y;
        int k = dn[x];
        if (k != 0) up[k] = 0;
        dn[x] = y;
        up[y] = x;
    }
    for (int i = 1; i <= n; i++) {
        if (dn[i] != 0) continue;
        int cnt2 = 0;
        int cnt1 = i;
        while (cnt1 != 0) {
            cnt2++;
            cnt1 = up[cnt1];
        }
        ans[i] = cnt2;
    }
    for (int i = 1; i <= n; i++) cout << ans[i] << " ";
}

/*	Problem: 叠卡片
	Language: C++	Result: 正确 	Time: 2026-08-22 21:04:00
	User: admin  	Problem: 5105	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define fastio ios::sync_with_stdio(0);cin.tie(0),cout.tie(0)
#define endl "\n"
const int N=3e5+5;
int n,q,nxt[N],pre[N];
bool isroot[N];
int siz(int u){
	if(u==-1) return 0;
	return siz(nxt[u])+1;
}
int main(){
	fastio;
	cin>>n>>q;
	for(int i=1;i<=n;i++){
		nxt[i]=-1;
		isroot[i]=true;
	}
	while(q--){
		int c,p;
		cin>>c>>p;
		nxt[p]=c;
		nxt[pre[c]]=-1;
		pre[c]=p;
		isroot[c]=false;
	}
	for(int i=1;i<=n;i++){
		if(isroot[i]){
			cout<<siz(i)<<" ";
		}
		else cout<<0<<" ";
	}
	return 0;
}

/*	Problem: 叠卡片
	Language: C++	Result: 正确 	Time: 2026-08-22 21:03:22
	User: admin  	Problem: 5105	contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;

int main() {
    int n, k;
    cin >> n >> k;
    map<int, int> mp;
    for (int i = 1; i <= n; i++) {
        int x;
        cin >> x;
        mp[x]++;
    }
    vector<long long> v;
    for (auto &p : mp) {
        v.push_back(1ll * p.first * p.second);
    }
    sort(v.begin(), v.end());
    long long ans = 0;
    for (int i = 0; i < max(0, (int)v.size() - k); i++) {
        ans += v[i];
    }
    cout << ans << endl;
    return 0;
}

/*	Problem: 最小可能和
	Language: C++	Result: 正确 	Time: 2026-08-22 20:58:01
	User: admin  	Problem: 5104	contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    int h, w;
    cin >> h >> w;
    
    vector<string> grid(h);
    for (int i = 0; i < h; i++) {
        cin >> grid[i];
    }
    
    int ans = 0;
    
    for (int h1 = 0; h1 < h; h1++) {
        for (int h2 = h1; h2 < h; h2++) {
            for (int w1 = 0; w1 < w; w1++) {
                for (int w2 = w1; w2 < w; w2++) {
                    bool ok = true;
                    for (int i = h1; i <= h2 && ok; i++) {
                        for (int j = w1; j <= w2 && ok; j++) {
                            int si = h1 + h2 - i;
                            int sj = w1 + w2 - j;
                            if (grid[i][j] != grid[si][sj]) {
                                ok = false;
                            }
                        }
                    }
                    if (ok) {
                        ans++;
                    }
                }
            }
        }
    }
    
    cout << ans << '\n';
    
    return 0;
}
/*	Problem: 对称上色
	Language: C++	Result: 正确 	Time: 2026-08-22 19:05:12
	User: admin  	Problem: 5103	contest_id: 0*/
#include<iostream>
using namespace std;
int a,b,c;
int main(){
	cin>>a>>b>>c;
	if(a!=b&&b==c) cout<<"Yes";
	else cout<<"No";
	return 0;
}
/*	Problem: ABB
	Language: C++	Result: 正确 	Time: 2026-08-22 18:53:16
	User: admin  	Problem: 5102	contest_id: 0*/
#include<iostream>
using namespace std;
int a,b,c;
int main(){
	cin>>a>>b>>c;
	if(a!=b&&b==c) cout<<"Yes";
	else cout<<"No";
	return 0;
}
/*	Problem: ABB
	Language: C++	Result: 正确 	Time: 2026-08-22 18:50:15
	User: admin  	Problem: 5102	contest_id: 0*/

重要提示:代码要自己写!

操作被阻止:禁止复制/粘贴/点击!