fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int mod=1e9+7,N=1e5+10;
  4. string s;
  5. long long f[N][4];
  6. int main(){
  7. cin>>s;
  8. int n=s.size();
  9. s=' '+s;
  10. f[0][0]=1;
  11. f[0][2]=0;
  12. f[0][1]=0;
  13. f[0][3]=0;
  14. for(int i=1;i<=n;i++){
  15. f[i][0]=f[i-1][0];
  16. f[i][1]=f[i-1][1];
  17. f[i][2]=f[i-1][2];
  18. f[i][3]=f[i-1][3];
  19. if(s[i]=='A'){
  20. f[i][1]=(f[i-1][0]+f[i-1][1])%mod;
  21. }else if(s[i]=='B'){
  22. f[i][2]=(f[i-1][1]+f[i-1][2])%mod;
  23. }else if(s[i]=='C'){
  24. f[i][3]=(f[i-1][2]+f[i-1][3])%mod;
  25. }else if(s[i]=='?'){
  26. f[i][0]=(f[i-1][0]*3)%mod;
  27. f[i][1]=(f[i-1][0]+3*f[i-1][1])%mod;
  28. f[i][2]=(f[i-1][1]+3*f[i-1][2])%mod;
  29. f[i][3]=(f[i-1][2]+3*f[i-1][3])%mod;
  30. }
  31. }
  32. cout<<f[n][3];
  33. }
Success #stdin #stdout 0s 5304KB
stdin
A??C
stdout
8