A - JJOOII (JJOOII) Editorial /

Time Limit: 1 sec / Memory Limit: 128 MB

配点: 100

JOI (日本情報オリンピック) の本選に向けてプログラミングの練習をしていたあなたは,今年度の JOI の予選の問題には数値を扱う問題ばかりが出題され,文字列を扱う問題がなかったことに気がついた.そこであなたは,こっそり文字列の問題に強くなってライバルたちに差をつけることにした.

JOIの過去問を眺めていると,JOI3 種類の文字からなる文字列に慣れておく必要がありそうなことがわかった.そこで,そのような文字列について考えよう.あなたは「与えられた文字列が JOI という部分文字列をもつかどうかを答えよ」という問題を思いついたものの,これはすぐに解けてしまった.もっとレベルの高い問題を解きたいあなたは,以下のような問題を作った.

文字列 t が文字列 s部分文字列であるとは,t の先頭および末尾に何文字か (0 文字でもよい) を付け足すと s になることである.たとえば,JJOOIIOJJOOIIOJOI の部分文字列である.一方,JOIJOOI の部分文字列ではない.

また,0 以上の整数 k に対し,レベル k の JOI 列とは,k 個の文字 Jk 個の文字 Ok 個の文字 I をこの順に並べた文字列のことであるとする.たとえば,JJOOII はレベル 2 の JOI 列である.

与えられた文字列の部分文字列である JOI 列のうち,レベルが最大のものを求めたい.

課題

JOI3 種類の文字からなる長さ N の文字列 S が与えられたとき,レベル k の JOI 列が S の部分文字列であるような最大の k の値を求めるプログラムを作成せよ.

制限

1 \leqq N \leqq 1000000 \,(= 10^6) S の長さ

入力

標準入力から以下のデータを読み込め.

  • 1 行目には JOI3 種類の文字からなる文字列 S が書かれている.

出力

標準出力に,レベル k の JOI 列が S の部分文字列であるような最大の k の値を表す整数を 1 行で出力せよ.

採点基準

採点用データのうち,配点の 20 %分については,N \leqq 100 を満たす.


入力例 1

OJJOOIIOJOI

出力例 1

2

OJJOOIIOJOI はレベル 2 の JOI 列である JJOOII を部分文字列として含んでおり, レベル 3 以上の JOI 列は部分文字列として含まない.


入力例 2

IJJIIJJJ

出力例 2

0

レベル 0 の JOI 列は長さ 0 の文字列である.


入力例 3

JOIJOIJOIJOIJOI

出力例 3

1

入力例 4

OOJJJJJJJOOOOIIIII

出力例 4

4

Source Name

JOI 2011/2012 本選 問題1