substack1,2都过,substack0过不了。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
string s;
int fac[30000005],inv[30000005],ans;
const int mod=2933256077;
int cnt0,cnt1;
int qpow(int x,int y,int mod){
int res=1;
while(y){
if(y&1) res=res*x%mod;
x=x*x%mod;
y>>=1;
}
return res;
}
void init(){
for(int i=fac[0]=1;i<=30000000;i++) fac[i]=fac[i-1]*i%mod;
inv[30000000]=qpow(fac[30000000],mod-2,mod);
for(int i=29999999;i>=0;i--) inv[i]=inv[i+1]*(i+1)%mod;
}
int C(int x,int y){
if(y>x) return 0;
if(y<0) return 0;
return fac[x]*inv[x-y]%mod*inv[y]%mod;
}
signed main(){
cin>>n>>m>>s;
int len=s.size();
init();
for(int i=0;i<len;i++){
int k=i+1;
if(s[i]=='0') cnt0++;
else if(s[i]=='1') cnt1++;
if(s[k]=='0') ans+=k*C(m-cnt0+cnt1-1,cnt1-1)%mod*C(n-cnt1+cnt0,cnt0)%mod,ans%=mod;
else if(s[k]=='1') ans+=k*C(m-cnt0+cnt1,cnt1)%mod*C(n-cnt1+cnt0-1,cnt0-1)%mod,ans%=mod;
}
cout<<ans;
return 0;
}