#include<cstdio>
#include<vector>
#define mod 998244353
#define int long long
using namespace std;
typedef vector<vector<int> > matrix;
matrix matrix1[2],matrix2[2],matrix3;
int answer[5000005],planleft[2][5000005],planright[2][5000005],plan[2][5000005];
inline matrix multi(matrix matrix1,matrix matrix2){
matrix result;
result.resize(2);
result[0].resize(2);
result[1].resize(2);
result[0][0]=(matrix1[0][0]*matrix2[0][0]+matrix1[0][1]*matrix2[1][0])%mod;
result[1][0]=(matrix1[1][0]*matrix2[0][0]+matrix1[1][1]*matrix2[1][0])%mod;
result[0][1]=(matrix1[0][0]*matrix2[0][1]+matrix1[0][1]*matrix2[1][1])%mod;
result[0][0]=(matrix1[1][0]*matrix2[0][1]+matrix1[1][1]*matrix2[1][1])%mod;
return result;
};
inline int power(int first,int second){
int result=1;
while(second){
if(second&1){
(result*=first)%=mod;
};
(first*=first)%=mod;
second>>=1;
};
return result;
};
inline int inv(int number){
return power(number,mod-2);
};
signed main(signed argc,char **argv){
matrix1[0].resize(2);
matrix1[1].resize(2);
matrix2[0].resize(2);
matrix2[1].resize(2);
for(int iter=0;iter<2;++iter){
matrix1[0][iter].resize(2);
matrix1[1][iter].resize(2);
matrix2[0][iter].resize(2);
matrix2[1][iter].resize(2);
};
matrix1[0][0][0]=matrix1[0][0][1]=matrix1[0][1][0]=1;
matrix2[0][0][1]=matrix2[0][1][0]=1;
matrix1[1][0][0]=matrix1[1][1][0]=matrix1[1][1][1]=1;
matrix2[1][0][0]=matrix2[1][1][1]=1;
matrix2[0][1][1]=matrix2[1][1][0]=mod-1;
int size,left,right;
scanf("%lld %lld %lld",&size,&left,&right);
int invleft=inv(power(2,left));
int invright=inv(power(2,right+1));
int result2=inv(((size*2-left-right+2)*(right-left+1)/2)%mod);
int invof2=inv(2);
for(int iter=1;iter<=size;++iter){
scanf("%1lld",&answer[iter]);
};
matrix3.resize(2);
matrix3[0].resize(2);
matrix3[1].resize(2);
matrix3[0][0]=matrix3[1][1]=1;
matrix3[0][1]=matrix3[1][0]=0;
for(int iter=1;iter<left;++iter){
matrix3=multi(matrix3,matrix1[answer[iter]]);
};
for(int iter=left;iter<=size;++iter){
matrix3=multi(multi(matrix2[answer[iter-left+1]],matrix3),matrix1[answer[iter]]);
planleft[0][iter]=(matrix3[0][0]+matrix3[1][0])%mod;
planleft[1][iter]=(matrix3[0][1]+matrix3[1][1])%mod;
};
matrix3[0][0]=matrix3[1][1]=1;
matrix3[0][1]=matrix3[1][0]=0;
for(int iter=1;iter<=right;++iter){
matrix3=multi(matrix3,matrix1[answer[iter]]);
};
for(int iter=right+1;iter<=size;++iter){
matrix3=multi(multi(matrix2[answer[iter-right]],matrix3),matrix1[answer[iter]]);
planright[0][iter]=(matrix3[0][0]+matrix3[1][0])%mod;
planright[1][iter]=(matrix3[0][1]+matrix3[1][1])%mod;
};
for(int iter=1;iter<=size;++iter){
(plan[0][iter]=(invof2*(plan[0][iter-1]+plan[1][iter-1])+invleft*planleft[0][iter]-invright*planright[0][iter])%mod+mod)%=mod;
(plan[1][iter]=(invof2*(plan[answer[iter]][iter-1])+invleft*planleft[1][iter]-invright*planright[1][iter])%mod+mod)%=mod;
};
int result1=0;
for(int iter=1;iter<=size;++iter){
(result1+=(plan[0][iter]+plan[1][iter])%mod)%=mod;
};
printf("%lld",(result1*result2%mod+mod)%mod);
return 0;
};
输出样例都不对。