#include<bits/stdc++.h>

#define rep(i,n) for(int i=0;i<(int)n;i++)
#define all(c) (c).begin(),(c).end()
#define mp make_pair
#define pb push_back
#define each(i,c) for(__typeof((c).begin()) i=(c).begin();i!=(c).end();i++)
#define dbg(x) cerr<<__LINE__<<": "<<#x<<" = "<<(x)<<endl

using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int> pi;
const int inf = (int)1e9;
const double INF = 1e12, EPS = 1e-9;

char in[1000100];

int main(){
	fgets(in, sizeof(in), stdin);
	vector<pi> v;
	int cnt = 0, ans = 0;
	
	for(int i = 0; ; i++){
		if(i && in[i] != in[i - 1]){
			v.pb(mp(in[i - 1], cnt));
			cnt = 1;
		}
		else cnt++;
		if(!in[i]) break;
	}
	
	rep(i, v.size() - 2) if(v[i].first == 'J'
		&& v[i + 1].first == 'O'
		&& v[i + 2].first == 'I'){
		
		if(v[i + 1].second <= v[i].second && v[i + 1].second <= v[i + 2].second)
		ans = max(ans, v[i + 1].second);
	}
	
	cout << ans << endl;
	
	return 0;
}
#include "bits/stdc++.h"

using namespace std;

//int N,M,K,L,R,H,W;
long long int N,M,K,L,R,H,W;

constexpr long long int MOD=1000000007;
//constexpr  int MOD=1000000007;
//constexpr int MOD=998244353;
//constexpr long long int MOD=998244353;

constexpr long double EPS=1e-8;

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	
	int ans=0;
	string s;
	cin>>s;
	s='P'+s+'P';
	for(int i=1;i<=s.size();i++){
		if(s[i]=='O'){
			int add=0;
			while(s[i+add]=='O')add++;
			bool flag=true;
			for(int k=i-1;k>=i-add;k--){
				//cout<<"J "<<k<<endl;
				flag&=s[k]=='J';
				if(!flag)break;
			}
			for(int k=i+add;k<i+2*add;k++){
				//cout<<"I "<<k<<endl;
				flag&=s[k]=='I';
				if(!flag)break;
			}
			if(flag)ans=max(ans,add);
			i+=add-1;
		}
	}
	cout<<ans<<endl;
	return 0;
}
