#include<bits/stdc++.h>
using namespace std;
int T=0,id=0,n=0,m=0,c=0,f=0,a[1001][1001][2]= {0},b[1001][1001][2]= {0};
long long ans1=0,ans2=0;
bool p[1001][1001]= {0};
int main() {
scanf("%d %d",&T,&id);
while(T--) {
scanf("%d %d %d %d",&n,&m,&c,&f);
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
char c;
cin>>c;
p[i][j]=c-'0';
a[i][j][0]=1-p[i][j];
a[i][j][1]=1-p[i][j];
}
}
for(int i=n-1; i>=0; i--) {
for(int j=m-1; j>=0; j--) {
if(p[i][j]==0) {
if(j<m-1) a[i][j][0]+=a[i][j+1][0];
if(i<n-1) a[i][j][1]+=a[i+1][j][1];
}
}
}
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
b[i][j][0]=a[i][j][0]-1;
b[i][j][1]=(a[i][j][0]-1)*(a[i][j][1]-1);
if(i>0) {
if(p[i][j]==0) {
if(p[i-1][j]==0) {
b[i][j][0]+=b[i-1][j][0];
b[i][j][1]+=b[i-1][j][1];
}
} else b[i][j][0]=0,b[i][j][1]=0;
}
}
}
ans1=0;
ans2=0;
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
if(p[i][j]==1) continue;
int next=min(i+a[i][j][1],n)-1;
if(i+1<next) {
if(c==1) ans1+=(a[i][j][0]-1)*(b[next][j][0]-b[i+1][j][0]),ans1%=998244353;
if(f==1) ans2+=(a[i][j][0]-1)*(b[next][j][1]-b[i+1][j][1]),ans2%=998244353;
}
}
}
cout<<ans1*c<<' '<<ans2*f<<endl;
}
return 0;
}
https://www.luogu.com.cn/record/134222267
就错一个点