AT_joi2020ho_b JJOOII 2 (JJOOII 2)

Description

[problemUrl]: https://atcoder.jp/contests/joi2020ho/tasks/joi2020ho_b ビ太郎は友人のビバ子から誕生日プレゼントに `J`,`O`,`I` の $ 3 $ 種類の文字からなる長さ $ N $ の文字列 $ S $ をもらった. $ K $ を $ 1 $ 以上の整数とする.$ K $ 個の文字 `J`,$ K $ 個の文字 `O`,$ K $ 個の文字 `I` をこの順に並べた文字列を**レベル $ K $ の JOI 文字列**と呼ぶことにする.例えば,`JJOOII` はレベル $ 2 $ の JOI 文字列である. ビ太郎はレベル $ K $ の JOI 文字列が好きなので,以下の $ 3 $ 種類の操作を任意の回数,任意の順番で行うことで,文字列 $ S $ をレベル $ K $ の JOI 文字列に変換することにした. - **操作 $ 1 $** 文字列 $ S $ の先頭の文字を消す. - **操作 $ 2 $** 文字列 $ S $ の末尾の文字を消す. - **操作 $ 3 $** 文字列 $ S $ の先頭でも末尾でもない文字を消す. 操作 $ 3 $ を行うのは面倒なので,操作 $ 3 $ を行う回数をできるだけ少なくして,文字列 $ S $ をレベル $ K $ の JOI 文字列に変換したい. 長さ $ N $ の文字列 $ S $ と $ 1 $ 以上の整数 $ K $ が与えられたとき,文字列 $ S $ をレベル $ K $ の JOI 文字列に変換するのに必要な操作 $ 3 $ の回数の最小値を出力するプログラムを作成せよ.ただし,どのように操作を行っても文字列 $ S $ をレベル $ K $ の JOI 文字列に変換できない場合は,代わりに $ −1 $ を出力せよ. - - - - - -

Input Format

入力は以下の形式で標準入力から与えられる.$ N,\ K $ は整数である.$ S $ は文字列である. > $ N $ $ K $ $ S $

Output Format

文字列 $ S $ をレベル $ K $ の JOI 文字列に変換するのに必要な操作 $ 3 $ の回数の最小値を $ 1 $ 行で出力せよ.ただし,どのように操作を行っても文字列 $ S $ をレベル $ K $ の JOI 文字列に変換できない場合は,代わりに $ -1 $ を出力せよ. - - - - - -

Explanation/Hint

### 制約 - $ 3\ \leqq\ N\ \leqq\ 200\,000 $. - $ 1\ \leqq\ K\ \leqq\ \frac{N}{3} $. - $ S $ は `J`,`O`,`I` の $ 3 $ 種類の文字からなる長さ $ N $ の文字列である. ### 小課題 1. ($ 1 $ 点) $ N\ \leqq\ 21 $. 2. ($ 12 $ 点) $ N\ \leqq\ 3\,000 $. 3. ($ 87 $ 点) 追加の制約はない. - - - - - - ### Sample Explanation 1 次のように操作を行うことで,文字列 $ S $ をレベル $ K $ のJOI文字列に変換できる. 1. まず操作 $ 1 $ を行う.文字列 $ S $ は `JIJOIOIIJ` になる. 2. 次に操作 $ 2 $ を行う.文字列 $ S $ は `JIJOIOII` になる. 3. 次に操作 $ 3 $ を行い,先頭から $ 2 $ 文字目を消す.文字列 $ S $ は `JJOIOII` になる. 4. 最後に操作 $ 3 $ を行い,先頭から $ 4 $ 文字目を消す.文字列 $ S $ は `JJOOII` になる. $ 2 $ 回未満の操作 $ 3 $ で変換することは不可能なので,$ 2 $ を出力する. - - - - - - ### Sample Explanation 2 操作を行わなくてもよい. - - - - - - ### Sample Explanation 3 この入力例では,どのように操作を行っても文字列 $ S $ をレベル $ 1 $ の JOI 文字列に変換できない.