#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int ll; typedef pair P; int main() { int dp[2][101][51][34][26]; string s; cin>>s; int n=s.size(); for(int j=0; j<=n; j++){ for(int k=0; j+2*k<=n; k++){ for(int l=0; j+2*k+3*l<=n; l++){ for(int m=0; j+2*k+3*l+4*m<=n; m++){ dp[0][j][k][l][m]=dp[1][j][k][l][m]=-1; } } } } dp[0][0][0][0][0]=0; for(int i=0; i0){ dp[(i&1)^1][j-1][k+1][l][m]=max(dp[i&1][j][k][l][m], dp[(i&1)^1][j-1][k+1][l][m]); } if((s[i]=='R' || s[i]=='?') && k>0){ dp[(i&1)^1][j][k-1][l+1][m]=max(dp[i&1][j][k][l][m], dp[(i&1)^1][j][k-1][l+1][m]); } if((s[i]=='O' || s[i]=='?') && l>0){ dp[(i&1)^1][j][k][l-1][m+1]=max(dp[i&1][j][k][l][m], dp[(i&1)^1][j][k][l-1][m+1]); } if((s[i]=='I' || s[i]=='?') && m>0){ dp[(i&1)^1][j][k][l][m-1]=max(dp[i&1][j][k][l][m]+1, dp[(i&1)^1][j][k][l][m-1]); } } } } } } int ans=0; for(int j=0; j<=n; j++){ for(int k=0; j+2*k<=n; k++){ for(int l=0; j+2*k+3*l<=n; l++){ for(int m=0; j+2*k+3*l+4*m<=n; m++){ ans=max(ans, dp[n&1][j][k][l][m]); } } } } cout<