请dalao们帮我看下为什么会mle
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e3 + 10;
const int mod = 998244353;
int a[N][N],n,m,f1,f2,T,id,ans1,ans2;
int sp[N][N],sq[N][N];
struct node{
int x1,y1,x2,num;
};
vector<node> v;
signed main(){
cin>>T>>id;
while(T--){
memset(sp,0,sizeof sp);
memset(a,0,sizeof a);
v.clear();
ans1=ans2=0;
cin>>n>>m>>f1>>f2;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;j++){
char c;
cin>>c;
a[i][j]=c-'0';a[i][j]^=1;
}
for(int i=n;i>=1;i--)
for(int j=m;j>=1;j--){
if(!a[i][j]) sp[i][j]=0;
else sp[i][j]=sp[i][j+1]+1;
}
// for(int i=1;i<=n;i++,cout<<endl)
// for(int j=1;j<=m;j++)
// cout<<sp[i][j]<<" ";
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
if(sp[i][j]<=1) continue;
for(int k=i+2;k<=n;k++)
{
if(!sp[k][j]||!sp[i+1][j]) break;
ans1=(ans1+(sp[i][j]-1)*(sp[k][j]-1))%mod;
v.push_back({i,j,k,(sp[i][j]-1)*(sp[k][j]-1)});
//cout<<(sp[i][j]-1)*(sp[k][j]-1)<<" "<<i<<" "<<j<<endl;
}
}
for(node p:v){
int tx=p.x2+1,sum=0;
while(sp[tx][p.y1]){
++sum;++tx;
}
ans2=(ans2+p.num*sum)%mod;
}
cout<<ans1*f1<<" "<<ans2*f2<<endl;
}
return 0;
}