#include using namespace std; typedef long long ll; #define REP(i,n) for(int i=0,_n=(int)(n);i<_n;++i) #define ALL(v) (v).begin(),(v).end() #define CLR(t,v) memset(t,(v),sizeof(t)) templateostream& operator<<(ostream& os,const pair&a){return os<<"("<void pv(T a,T b){for(T i=a;i!=b;++i)cout<<(*i)<<" ";cout<void chmin(T&a,const T&b){if(a>b)a=b;} templatevoid chmax(T&a,const T&b){if(a> s; int N = s.size(); REP(a, M) REP(b, M) REP(c, M) REP(d, M) dp[0][a][b][c][d] = -1001001001; dp[0][0][0][0][0] = 0; int f = 0; REP(i, N) { if (string("KUROI?").find(s[i]) == string::npos) continue; int nf = 1 - f; REP(a, M) REP(b, M) REP(c, M) REP(d, M) dp[nf][a][b][c][d] = -1001001001; REP(a, M) REP(b, M) REP(c, M) REP(d, M) { const int cur = dp[f][a][b][c][d]; chmax(dp[nf][a][b][c][d], cur); if (s[i] == 'K' || s[i] == '?') chmax(dp[nf][min(20, a+1)][b][c][d], cur); if ((s[i] == 'U' || s[i] == '?') && a > 0) chmax(dp[nf][a-1][min(20, b+1)][c][d], cur); if ((s[i] == 'R' || s[i] == '?') && b > 0) chmax(dp[nf][a][b-1][min(20, c+1)][d], cur); if ((s[i] == 'O' || s[i] == '?') && c > 0) chmax(dp[nf][a][b][c-1][min(20, d+1)], cur); if ((s[i] == 'I' || s[i] == '?') && d > 0) chmax(dp[nf][a][b][c][d-1], cur + 1); } f = 1 - f; } int ans = 0; REP(a, M) REP(b, M) REP(c, M) REP(d, M) chmax(ans, dp[f][a][b][c][d]); cout << ans << endl; return 0; } int main() { #ifdef LOCAL for (;!cin.eof();cin>>ws) #endif main2(); return 0; }