using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; class TEST{ static void Main(){ Sol mySol =new Sol(); mySol.Solve(); } } class Sol{ public void Solve(){ int N=S.Length; int[][][][] dp=new int[21][][][]; for(int i=0;i<21;i++){ dp[i]=new int[21][][]; for(int j=0;j<21;j++){ dp[i][j]=new int[21][]; for(int k=0;k<21;k++){ dp[i][j][k]=new int[21]; for(int l=0;l<21;l++){ dp[i][j][k][l]=-1; } } } } dp[0][0][0][0]=0; for(int c=0;c=0)dnxt[i-1][j+1][k][l]=Math.Max(dnxt[i-1][j+1][k][l],dp[i][j][k][l]);break; case 'R':if(k+1<21&&j-1>=0)dnxt[i][j-1][k+1][l]=Math.Max(dnxt[i][j-1][k+1][l],dp[i][j][k][l]);break; case 'O':if(l+1<21&&k-1>=0)dnxt[i][j][k-1][l+1]=Math.Max(dnxt[i][j][k-1][l+1],dp[i][j][k][l]);break; case 'I':if(l-1>=0)dnxt[i][j][k][l-1]=Math.Max(dnxt[i][j][k][l-1],dp[i][j][k][l]+1);break; case '?': if(i+1<21)dnxt[i+1][j][k][l]=Math.Max(dnxt[i+1][j][k][l],dp[i][j][k][l]); if(j+1<21&&i-1>=0)dnxt[i-1][j+1][k][l]=Math.Max(dnxt[i-1][j+1][k][l],dp[i][j][k][l]); if(k+1<21&&j-1>=0)dnxt[i][j-1][k+1][l]=Math.Max(dnxt[i][j-1][k+1][l],dp[i][j][k][l]); if(l+1<21&&k-1>=0)dnxt[i][j][k-1][l+1]=Math.Max(dnxt[i][j][k-1][l+1],dp[i][j][k][l]); if(l-1>=0)dnxt[i][j][k][l-1]=Math.Max(dnxt[i][j][k][l-1],dp[i][j][k][l]+1); break; default:dnxt[i][j][k][l]=dp[i][j][k][l]; break; } } } } } for(int i=0;i<21;i++){ for(int j=0;j<21;j++){ for(int k=0;k<21;k++){ for(int l=0;l<21;l++){ dp[i][j][k][l]=dnxt[i][j][k][l]; } } } } } int max=0; foreach(var a in dp)foreach(var b in a)foreach(var c in b)foreach(var x in c)max=Math.Max(max,x); Console.WriteLine(max); } String S; public Sol(){ S=rs(); } struct ATMTN{ public int K,U,R,O,I; public ATMTN(int k,int u,int r,int o,int i){ K=k;U=u;R=r;O=o;I=i; } public ATMTN(ATMTN a){ K=a.K;U=a.U;R=a.R;O=a.O;I=a.I; } } static String rs(){return Console.ReadLine();} static int ri(){return int.Parse(Console.ReadLine());} static long rl(){return long.Parse(Console.ReadLine());} static double rd(){return double.Parse(Console.ReadLine());} static String[] rsa(){return Console.ReadLine().Split(' ');} static int[] ria(){return Array.ConvertAll(Console.ReadLine().Split(' '),e=>int.Parse(e));} static long[] rla(){return Array.ConvertAll(Console.ReadLine().Split(' '),e=>long.Parse(e));} static double[] rda(){return Array.ConvertAll(Console.ReadLine().Split(' '),e=>double.Parse(e));} }