alexjercan/bugnet huggingface dataset:
JOI 紋章(JOI Emblem)

情報オリンピック日本委員会では，台湾大会に向かう選手を応援するために新しいJOI 旗を作成することにした．

JOI 旗は，正方形が縦に $M$ 行，横に $N$ 列並んだ形をしており，各正方形には J，O，I のいずれかの文字が1 つずつ書かれている．

情報オリンピック日本委員会はJOI 旗とは別にJOI 紋章というものを決めている．JOI 紋章は，正方形が縦に2 行，横に2 列並んだ形をしており，各正方形にはJ，O，I のいずれかの文字が1 つずつ書かれている．

JOI 旗に含まれるJOI 紋章の個数とは，JOI 旗に含まれる縦2 行，横2 列の領域のうち，その領域のJ，O，I の配置がJOI 紋章と(回転や裏返しをせずに) 一致しているものの個数のことである．条件を満たす縦2 行，横2 列の領域同士が重なっていてもそれらを別々に数えるものとする．

情報オリンピック日本委員会は古いJOI 旗と1 枚の白紙を持っている．白紙はJOI 旗を構成する正方形1 個分の大きさで，J，O，I のうち好きな1 文字を書き込むことができる．情報オリンピック日本委員会は以下のいずれか1 つの操作をして，新しいJOI 旗を作成することにした．

古いJOI 旗に対して何も操作せず，そのまま新しいJOI 旗とする．白紙は使用しない．

白紙に1 文字書き込み，古いJOI 旗のいずれかの正方形に重ねて貼り付けることで古いJOI 旗のうち1 箇所を変更する．変更後のJOI 旗を新しいJOI 旗とする．

情報オリンピック日本委員会は新しいJOI 旗に含まれるJOI 紋章の個数をできるだけ多くしたいと思っている．あなたは新しいJOI 旗に含まれるJOI 紋章の個数の最大値を求めることになった．

課題

古いJOI 旗とJOI 紋章の情報が与えられたとき，新しいJOI 旗に含まれるJOI 紋章の個数の最大値を求めるプログラムを作成せよ．

入力

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

1 行目には2 個の整数 $M, N$ が空白を区切りとして書かれている．これはJOI 旗が正方形が縦に$M$行，横に$N$ 列並んだ形であることを表している．

続く$M$ 行の各行には，それぞれ$N$ 文字からなる文字列が書かれている．各文字はJ，O，I のいずれかであり，$M$ 行のうち上から$i$ 行目$(1 \leq i \leq M)$ に書かれている文字列の左から$j$ 文字目$(1 \leq j \leq N)$は古いJOI 旗の上から$i$ 行目，左から$j$ 列目の正方形に書かれている文字を表す．

続く2 行の各行には，それぞれ2 文字からなる文字列が書かれている．各文字はJ，O，I のいずれかであり，2 行のうち上から$i$ 行目$(1 \leq i \leq 2)$ に書かれている文字列の左から$j$ 文字目$(1 \leq j \leq 2)$ はJOI 紋章の上から$i$ 行目，左から$j$ 列目の正方形に書かれている文字を表す．

出力

標準出力に，新しいJOI 旗に含まれるJOI 紋章の個数の最大値を表す整数を1 行で出力せよ．

制約

すべての入力データは以下の条件を満たす．

$2 \leq M \leq 1000$

$2 \leq N \leq 1000$

入出力例

入力例 1

3 5
JOIJO
IJOOO
IIJIJ
JO
IJ

出力例 1

3

古いJOI 旗とJOI 紋章は問題文中の例の通りである．上から2 行目，左から4 列目の正方形を白紙を用いてJ に変更すると，次のような形になる．

このように変更した後のJOI 旗には次に示す3 箇所にJOI 紋章と同じ配置の領域がある．

JOI 紋章と同じ配置の領域が4 箇所以上となる新しいJOI 旗は存在しないので，新しいJOI 旗に含まれるJOI 紋章の個数の最大値は3 である．

入力例 2

2 6
JOJOJO
OJOJOJ
OJ
JO

出力例 2

2

白紙を使用しなくても最大値が得られる場合があることに注意せよ．

入力例 3

2 2
JI
IJ
JJ
JJ

出力例 3

0

この入出力例の場合，考えられるどの新しいJOI 旗においても，JOI 紋章が1 つも含まれない．

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
IOI 饅頭(IOI Manju)

Incredible Okashi Inc. は「途方もなくおいしいお菓子(incredible okashi)」を製作している会社である．ここでは略してIOI 社と呼ぶ．IOI 社は特製のIOI 饅頭を作ったので，それを販売することになった．IOI 社は$M$ 種類の饅頭を1 個ずつ作った．作られた$M$ 個の饅頭はすべて同じ大きさであるが，ひとつひとつ異なる味なので価格は様々であり，$i$ 番目$(1 \leq i \leq M)$ の饅頭の価格は$P_i$ 円である．

ところで，あなたはJust Odd Inventions 社を知っているだろうか？ この会社の業務は「ただ奇妙な発明(just odd inventions)」をすることである．ここでは略してJOI 社と呼ぶ．IOI 社は，饅頭を詰めるための高級な箱をJOI 社に発注することになった．JOI 社の製作する饅頭用の箱は$N$ 種類あり， $j$ 番目$(1 \leq j \leq N)$の箱は最大で$C_j$ 個の饅頭を詰められる大きさであり，販売価格は$E_j$ 円である．これらの$N$ 種類の箱のうちの何種類か(0 種類以上$N$ 種類以下) を1 個ずつ発注し，饅頭をそれらの箱に詰め分けてセットで販売することになった．各饅頭セットの価格は，それに含まれる饅頭の価格の合計である．

すべての饅頭セットが売れるとした場合，IOI 社が得ることができる利益の最大値はいくらだろうか．ここで利益とは，販売した饅頭セットの価格の合計から，発注した箱の価格の合計を引いた値である．なお，箱に詰めなかった饅頭については，IOI 社のスタッフがおいしくいただくため，利益には影響しないものとする．

課題

各饅頭の価格と，各箱の大きさと価格が与えられたとき，IOI 社が得ることができる利益の最大値を求めるプログラムを作成せよ．

入力

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

1 行目には，整数 $M, N$ が空白を区切りとして書かれており，饅頭が $M$ 個，箱が $N$ 種類あることを表す．

続く $M$ 行のうちの $i$ 行目 $(1 \leq i \leq M)$ には，整数 $P_i$ が書かれており，$i$ 番目の饅頭の価格が $P_i$ 円であることを表す．

続く$N$ 行のうちの $j$ 行目 $(1 \leq j \leq N)$ には，整数 $C_j$, $E_j$ が空白を区切りとして書かれており， $j$ 番目の箱は最大で $C_j$ 個の饅頭を詰められる大きさであり，価格が $E_j$ 円であることを表す．

出力

標準出力に，IOI 社が得られる利益の最大値を円単位で表す整数を1 行で出力せよ．

制限

すべての入力データは以下の条件を満たす．

$1 \leq M \leq 10000$

$1 \leq N \leq 500$

$1 \leq P_i \leq 10000 (1 \leq i \leq M)$

$1 \leq C_j \leq 10000 (1 \leq j \leq N)$

$1 \leq E_j \leq 10000 (1 \leq j \leq N)$

入出力例

入力例 1

4 3
180
160
170
190
2 100
3 120
4 250

出力例 1

480

この例では，1 番目の箱(100 円) と2 番目の箱(120 円) を発注し，たとえば1 番目の箱に1 番目の饅頭と2 番目の饅頭を詰めて $180 + 160 = 340$ 円のセットとして販売，2 番目の箱に3 番目の饅頭と4 番目の饅頭を詰めて $170 + 190 = 360$ 円のセットとして販売すると，IOI 社の利益は $700 - 220 = 480$ 円となる．

入力例 2

2 2
1000
2000
1 6666
1 7777

出力例 2

0

この例では，利益を最大化するためには箱を全く買わないのがよい．

入力例 3

10 4
200
250
300
300
350
400
500
300
250
200
3 1400
2 500
2 600
1 900

出力例 3

450

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
バームクーヘン(Baumkuchen)

JOI 君は妹のJOI 子ちゃんとJOI 美ちゃんと一緒におやつを食べようとしている．今日のおやつは3 人の大好物のバームクーヘンだ．

バームクーヘンは下図のような円筒形のお菓子である．3 人に分けるために，JOI 君は半径方向に刃を3回入れて，これを3 つのピースに切り分けなければならない．ただしこのバームクーヘンは本物の木材のように固いので，刃を入れるのは簡単ではない．そのためこのバームクーヘンにはあらかじめ $N$ 個の切れ込みが入っており，JOI 君は切れ込みのある位置でのみ切ることができる．切れ込みに1 から $N$ まで時計回りに番号をふったとき，$1 \leq i \leq N - 1$ に対し， $i$ 番目の切れ込みと$i + 1$ 番目の切れ込みの間の部分の大きさは $A_i$ である．また $N$ 番目の切れ込みと1 番目の切れ込みの間の部分の大きさは $A_N$ である．

図1: バームクーヘンの例 $N = 6, A_1 = 1, A_2 = 5, A_3 = 4, A_4 = 5, A_5 = 2, A_6 = 4$

課題

切れ込みの個数 $N$ と，各部分の大きさを表す整数 $A_1,...,A_N$ が与えられる．バームクーヘンを3 つに切り分けたときの，最も小さいピースの大きさの最大値を出力するプログラムを作成せよ．

入力

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

1 行目には，整数 $N$ が書かれている．これはバームクーヘンに $N$ 個の切れ込みがあることを表す．

続く$N$ 行のうちの $i$ 行目$(1 \leq i \leq N)$ には，整数 $A_i$ が書かれている．これは $i$ 番目の切れ込みと $i + 1$ 番目の切れ込みの間の部分 ($i = N$ のときは $N$ 番目の切れ込みと1 番目の切れ込みの間の部分) の大きさが $A_i$ であることを表す．

出力

標準出力に，バームクーヘンを3 つに切り分けたときの，最も小さいピースの大きさの最大値を表す整数を1 行で出力せよ．

制限

すべての入力データは以下の条件を満たす．

$3 \leq N \leq 100000$

$1 \leq A_i \leq 1000000000 (1 \leq i \leq N)$

入出力例

入力例 1

6
1
5
4
5
2
4

出力例 1

6

図2: 1 番目の切れ込みと3 番目の切れ込みと5 番目の切れ込みで切るのが最善である．

入力例 2

30
1
34
44
13
30
1
9
3
7
7
20
12
2
44
6
9
44
31
17
20
33
18
48
23
19
31
24
50
43
15

出力例 2

213

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
フクロモモンガ(Sugar Glider)

フクロモモンガのJOI 君が住んでいる森にはユーカリの木が $N$ 本生えており，それらの木には1 から $N$ の番号がついている．木 $i$ の高さは $H_i$ メートルである．

JOI 君が相互に直接飛び移ることのできる木の組が $M$ 組あり，各組の木の間を飛び移るためにかかる時間が定まっている．JOI 君が木の間を飛び移っている間は，地面からの高さが1 秒あたり1 メートル下がる．すなわち，JOI 君の現在の地面からの高さが $h$ メートル，木の間を飛び移るためにかかる時間が $t$ 秒であるとき，飛び移った後の地面からの高さは $h - t$ メートルとなる．ただし，$h - t$ が0 よりも小さくなる場合や行き先の木の高さよりも大きくなる場合は飛び移ることができない．

さらに，JOI 君は木の側面を上下に移動することによって，地面からの高さを0 メートルから今いる木の高さの範囲で増減させることができる．JOI 君が地面からの高さを1 メートル増加または減少させるためには1 秒の時間がかかる．

JOI 君は，木1 の高さ$X$ メートルの位置から木$N$ の頂上(高さ$H_N$ メートルの位置) に行こうとしており，そのためにかかる時間の最小値を知りたい．

課題

各木の高さと，JOI 君が直接飛び移ることができる木の組の情報と，最初JOI 君がいる場所の高さが与えられる．木 $N$ の頂上に行くためにかかる時間の最小値を求めるプログラムを作成せよ.

入力

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

1 行目には，整数 $N, M, X$ が空白を区切りとして書かれている．これは，木の本数が $N$ 本，移動できる木の組が $M$ 組あり，最初JOI 君が木1 の高さ $X$ メートルの位置にいることを表す．

続く $N$ 行のうちの $i$ 行目$(1 \leq i \leq N)$ には，整数 $H_i$ が書かれている．これは，木 $i$ の高さが $H_i$ メートルであることを表す．

続く$M$ 行のうちの $j$ 行目$(1 \leq j \leq M)$ には，整数 $A_j, B_j, T_j$ $(1 \leq A_j \leq N, 1 \leq B_j \leq N, A_j \ne B_j)$ が空白を区切りとして書かれている．これは，木 $A_j$ と木 $B_j$ の間を相互に $T_j$ 秒で飛び移ることができることを表している．また，$1 \leq j < k \leq M$ ならば，$(A_j, B_j) \ne (A_k, B_k)$ および$(A_j, B_j) \ne (B_k, A_k)$ を満たす．

出力

標準出力に，木1 の高さ $X$ メートルの位置から木 $N$ の頂上に行くためにかかる時間の最小値を秒単位で表す整数を1 行で出力せよ．ただし，そのような方法がない場合は代わりに -1 を出力せよ．

制限

すべての入力データは以下の条件を満たす．

$2 \leq N \leq 100000$

$1 \leq M \leq 300000$

$1 \leq H_i \leq 1000000000 (1 \leq i \leq N)$

$1 \leq T_j \leq 1000000000 (1 \leq j \leq M)$

$0 \leq X \leq H_1$

入出力例

入力例 1

5 5 0
50
100
25
30
10
1 2 10
2 5 50
2 4 20
4 3 1
5 4 20

出力例 1

110

例えば，以下のように移動すればよい．

1. 木1 を50 メートル登る．

2. 木1 から木2 に飛び移る．

3. 木2 から木4 に飛び移る．

4. 木4 から木5 に飛び移る．

5. 木5 を10 メートル登る．

入力例 2

2 1 0
1
1
1 2 100

出力例 2

-1

JOI 君は木1 から木2 に飛び移ることができない．

入力例 3

4 3 30
50
10
20
50
1 2 10
2 3 10
3 4 10

出力例 3

100

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
切り取り線(Cutting)

JOI 君はペーパークラフトが趣味である．今日もJOI 君はペーパークラフトの作品を作ろうとしている．まず，JOI 君は設計図にしたがって1 枚の長方形の紙に $N$ 本の切り取り線を印刷した．各切り取り線は，紙の縦または横の辺に平行な線分である．

紙を切り出してできるすべての部分は作品の中で何らかの部品として用いられる．当然のことながら，
部品数の多い作品は製作が大変である．JOI 君は，すべての切り取り線にしたがって紙を切り出したとき，
紙がいくつの部分に分かれるかを知りたい．

課題

紙の大きさと，$N$ 本の切り取り線の情報が与えられる．これらの切り取り線にしたがって紙を切り分けたとき，紙がいくつの部分に分かれるかを求めるプログラムを作成せよ．

入力

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

1 行目には，整数 $W, H, N$ が空白を区切りとして書かれている．$W$ は紙の横の辺の長さを，$H$ は紙の縦の辺の長さを，$N$ は切り取り線の本数をそれぞれ表す．紙の左下，右下，左上，右上を，それぞれ座標 $(0, 0), (W, 0), (0, H), (W, H)$ で表す．

続く $N$ 行のうちの $i$ 行目 $(1 \leq i \leq N)$ には，整数 $A_i, B_i, C_i, D_i (0 \leq A_i \leq C_i \leq W, 0 \leq B_i \leq D_i \leq H)$ が空白を区切りとして書かれている．これは $i$ 番目の切り取り線が$(A_i, B_i)$ と$(C_i, D_i)$ を結ぶ線分であることを表す．この線分は紙のいずれかの辺に平行な線分である．すなわち，$A_i = C_i$ と $B_i = D_i$ のうちのちょうど1 つが成り立つ．また，ある切り取り線と，それに平行な他の切り取り線が共有点を持つことはなく，ある切り取り線と，それに平行な紙の辺が共有点を持つこともない．

出力

標準出力に，紙がいくつの部分に分かれるかを表す整数を1 行で出力せよ．

制限

すべての入力データは以下の条件を満たす．

$ 1 \leq W \leq 1000000 000$

$ 1 \leq H \leq 1000000 000$

$ 1 \leq N \leq 100000$

入出力例

入力例 1

10 10 5
6 0 6 7
0 6 7 6
2 3 9 3
2 3 2 10
1 9 8 9

出力例 1

4

この入力の場合，切り取り線は下図のようになる．

よって，切り取り線によって紙は4 つの部分に分かれる．

入力例 2

13 7 28
1 1 4 1
1 1 1 3
2 2 3 2
2 2 2 3
1 3 2 3
3 2 3 6
4 1 4 6
3 6 4 6
5 1 8 1
5 1 5 6
6 2 7 2
6 2 6 5
7 2 7 5
6 5 7 5
8 1 8 6
5 6 8 6
9 1 12 1
9 1 9 2
9 2 10 2
12 1 12 2
11 2 12 2
10 2 10 5
9 5 10 5
9 5 9 6
11 2 11 5
11 5 12 5
12 5 12 6
9 6 12 6

出力例 2

5

この入力の場合，切り取り線は次ページの図のようになる．

よって，切り取り線によって紙は5 つの部分に分かれる．

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
電飾(Illumination)

JOI 高校の文化祭では毎年廊下に電飾が飾られる．電飾は N 個の電球で構成されており，電球は廊下の西側から東側に一列に並んでいる．各電球は明かりがついているか，ついていないかのいずれかの状態である．

JOI 高校の倉庫には電球を操作する機械が眠っている．この機械は電飾内で連続した電球を指定すると，指定された電球のうち，明かりがついている電球全てを明かりがついていない状態にし，明かりがついていない電球全てを明かりがついている状態にする．ただし，機械は老朽化のため，1 回しか使用できない．

JOI 高校の生徒達は明かりがついている電球とついていない電球が交互に並んだ列（このような電球の列を交互列と呼ぶ）が好きである．そこで，この機械を必要ならば1 回だけ使って，できるだけ長い交互列を含む電飾を作ることにした．

例

例えば，電飾の配置が西から東に向かって

となっていたとする（○は明かりがついている電球を，●は明かりがついていない電球を表す）．このとき，4 番目から7 番目までの4 個の電球に対して機械を操作すると，

となり，2 番目から8 番目までの電球が長さ7 の交互列をなす．

また，8 番目の電球のみに対して機械を操作すると，

となり，4 番目から10 番目までの電球が長さ7 の交互列をなす．

機械を最大1 回使用することで，長さが8 以上の交互列を作ることはできない．

課題

電飾の情報が与えられたとき，機械を最大1 回使用することで得られる電球の配列に含まれる交互列の長さとして考えられるものの最大値を求めるプログラムを作成せよ．

制限

2 ≤ N ≤ 100 000 電飾を構成する電球の個数

入力

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

1 行目には整数 N が書かれている．

2 行目には N 個の 0 または 1 が空白を区切りとして書かれている．各整数は機械を操作する前における電球の情報を表している．左からi ( 1 ≤ i ≤ N ) 番目の整数は西側から i 番目の電球の情報を表しており，整数が 1 ならば電球の明かりがついていて，0 ならば明かりがついていないことを表す．

出力

標準出力に，作成可能な電球の列に含まれる交互列の長さの最大値を表す整数を1 行で出力せよ．

入出力例

入力例 1

10
1 1 0 0 1 0 1 1 1 0

出力例 1

7

これは問題文中で説明された例である．

入力例 2

10
1 0 0 0 0 1 0 1 0 1

出力例 2

8

西側から 4 番目の電球のみを操作すると，最大値 8 を満たす交互列が得られる．

入力例 3

5
1 1 0 1 1

出力例 3

5

西側から数えて 2 番目から 4 番目までの電球を操作すると，全ての電球からなる交互列を作ることがで
きる．

入力例 4

3
0 1 0

出力例 4

3

機械を使用しなくても良い場合があることに注意せよ．

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
IOI 列車で行こう(Take the 'IOI' train)

IOI 国ではこのたび新たに鉄道を敷設した．IOI 国の鉄道を走る列車はいくつかの車両が連結されたものであり，車両には I, O の 2 種類がある．車両はそれぞれ異なる種類の車両としか連結できない．また，列車に運転席を設ける関係上，列車の両端の車両は種類 I でなければならない．列車は車両の種類を表す文字を順につなげた文字列で表され，列車の長さはその文字列の長さであるとする．たとえば， IOIOI の順に車両を連結すると長さ 5 の列車を編成でき，また車両 I は単独で長さ 1 の列車である．車両を OIOI や IOOI といった順に並べても列車を編成することはできない．

いくつかの車両が 2 つの車庫に格納されている．それぞれの車庫の中には車両が一列に並んでいる．列車を編成するときは車庫から車両を出してきて車庫前で連結していく．車庫から出せる車両は最も車庫の入り口に近い車両のみであるが，どちらの車庫から車両を出すかの順番については自由である．

列車を編成する前に，車両を好きなだけ車庫から出して別の待機用レールに移すことができる．一度待機用レールに移した車両は今後列車を編成するために使うことはできない．また，一度列車の編成を始めるとその編成が終わるまでの間は車両を車庫から待機用レールに移すことはできない．

列車を編成するとき，車庫内の全ての車両を使い切る必要はない．すなわち，列車の編成を終えた後，車庫内に使われなかった車両が残っていても構わない．

IOI 国では鉄道に乗る人がとてもたくさんいると考えられているので，できるだけ長い列車を編成したい．

図: 列車を編成している途中であり，このとき車庫にある車両を待機用レールに移すことはできない．この図は入出力例1 に対応している．

課題

車庫に格納された車両の情報が与えられたとき，編成できる列車の長さの最大値を求めるプログラムを作成せよ．それぞれの車庫に格納された車両の列は 2 種類の文字I, O のみからなる文字列で表され， 2 つの車庫の情報はそれぞれ長さ M の文字列 S および長さ N の文字列 T として与えられる．各文字が 1 つの車両を表し，その文字は車両の種類と同じである．文字列の1 文字目は最も車庫の入り口に近い車両を表し，末尾の文字が車庫の最も奥にある車両を表す．

制限

1 ≤ M ≤ 2000 文字列 S の長さ

1 ≤ N ≤ 2000 文字列 T の長さ

入力

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

1 行目には M, N が空白区切りで書かれている．

2 行目には文字列 S が書かれている．

3 行目には文字列 T が書かれている．

出力

標準出力に，編成できる列車の長さの最大値を表す整数を 1 行で出力せよ． 列車が 1 つも編成できない場合は， 0 を出力せよ．

入出力例

入力例 1

5 5
OIOOI
OOIOI

出力例 1

7

S によって表される車庫を車庫 S とし，T によって表される車庫を車庫 T としよう．このとき，たとえば車庫 S から最初の1 車両，車庫 T から最初の 2 車両を出して待機させた後，車庫 S，車庫 S，車庫 T，車庫 S，車庫 S，車庫 T，車庫 T の順番に車両を出せば，長さ7 の列車 IOIOIOI を編成できる．

他にも，車庫 S から最初の 1 車両，車庫 T から最初の 2 車両を出して待機させた後，車庫 T，車庫 T，車庫 S，車庫 S，車庫 T，車庫 S，車庫 S の順番に車両を出すことでも長さ 7 の列車を編成できる．これより長い列車を編成することはできないので 7 を出力する．

入力例 2

5 9
IIIII
IIIIIIIII

出力例 2

1

1 つの車両のみからなる列車 I も列車としての条件を満たすことに注意せよ．

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
現代的な屋敷(Modern Mansion)

あなたは，ある大きな屋敷に迷い込んでしまった．この屋敷は正方形の部屋が東西南北に格子状に，東西方向に M 列，南北方向に N 行の合計 M × N 個並んだ構造をしている．西から x 列目(1 ≤ x ≤ M)，南から y 行目(1 ≤ y ≤ N) にある部屋を(x, y) で表す．

東西南北に隣り合う 2 部屋の間は，壁の中央にある扉により結ばれている．それぞれの扉は，閉じていて通行不可能な状態か，開いていて通行可能な状態のいずれかにある．扉が開いているとき，それらの部屋の中央間を移動するのに 1 分間かかる．また，いくつかの部屋の中央にはスイッチがあり，スイッチを 1 分間押し続けると，屋敷内のすべての扉の開閉の状態が切り替わる．

今，東西に隣り合う 2 部屋を結ぶすべての扉は閉じていて，南北に隣り合う 2 部屋を結ぶすべての扉は開いている．あなたは今部屋 (1, 1) の中央にいて，部屋 (M, N) の中央まで最短時間で移動したい．

課題

屋敷の大きさ M, N および，スイッチのある K 個の部屋の位置 (X1, Y1), (X2, Y2),..., (XK, YK) が与えられる．東西に隣り合う 2 部屋を結ぶすべての扉は閉じていて，南北に隣り合う 2 部屋を結ぶすべての扉は開いている状態から始めて，部屋 (1, 1) の中央から部屋 (M, N) の中央まで移動するのに最短で何分かかるかを求めるプログラムを作成せよ．ただし，部屋 (M, N) に辿り着くことができないときはそれを指摘せよ．

制限

2 ≤ M ≤ 100 000 屋敷の東西方向の部屋の個数

2 ≤ N ≤ 100 000 屋敷の南北方向の部屋の個数

1 ≤ K ≤ 200 000 スイッチのある部屋の個数

1 ≤ Xi ≤ M スイッチのある部屋の東西方向の位置

1 ≤ Yi ≤ N スイッチのある部屋の南北方向の位置

入力

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

1 行目には，整数 M, N, K が空白を区切りとして書かれている．M は屋敷の東西方向の部屋の個数，N は屋敷の南北方向の部屋の個数，K はスイッチのある部屋の個数を表す．

続く K 行のうちの i 行目(1 ≤ i ≤ K) には，整数 Xi, Yi が空白を区切りとして書かれている．これは，部屋(Xi, Yi) の中央にスイッチがあることを表す．K 個の組(X1, Y1), (X2, Y2),..., (XK, YK) は互いに異なる．

出力

標準出力に，移動に最短で何分かかるかを表す整数を 1 行で出力せよ．ただし，部屋(M, N) に辿り着くことができないときは代わりに整数 -1 を出力せよ．

採点基準

採点用データのうち，配点の20%分については，M ≤ 1 000, N ≤ 1 000 を満たす．

採点用データのうち，配点の30%分については，K ≤ 2 000 を満たす．

採点用データのうち，配点の50%分については，これら 2 つの条件の少なくとも一方を満たす．また，これら 2 つの条件の両方を満たすような採点用データはない．

入出力例

入力例 1

3 2 1
1 2

出力例 1

4

この例では，以下の行動によって 4 分間で部屋(1, 1) の中央から部屋(3, 2) の中央へ移動することができ，これが最短である．

部屋(1, 2) の中央へ移動する．

部屋(1, 2) の中央のスイッチを押す．

部屋(2, 2) の中央へ移動する．

部屋(3, 2) の中央へ移動する．

このときの屋敷の様子が以下の図に表されている．図では右方向が東，上方向が北であり，×印はあなたの位置，○印はスイッチを表す．

入力例 2

3 2 1
2 1

出力例 2

-1

この例では，あなたは部屋(3, 2) に辿り着くことができない．

入力例 3

8 9 15
3 1
3 2
3 7
3 8
1 1
4 5
4 3
5 6
5 8
6 3
6 2
7 5
8 9
8 6
8 5

出力例 3

25

この例では，最初の屋敷の様子は以下の図のようになっている．部屋(1, 1) や部屋(M, N) の中央にスイッチがある可能性もあることに注意せよ．

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
JOIOI の塔(Tower of JOIOI)

JOIOI の塔とは，1 人で遊ぶ円盤を使ったゲームである．

このゲームは，J，O，I のいずれかの文字が書かれたいくつかの円盤を用いて行う．円盤は直径が互いに異なり，ゲーム開始時にはこれらの円盤は直径の大きいものから順に下から上に向かって積まれている．あなたは，これらの円盤を用いて，出来るだけ多くのミニ JOIOI の塔を作りたい．ミニ JOIOI の塔とは 3 枚の円盤からなり，円盤の直径が小さいものから順に読んで JOI もしくは IOI と読めるものである．ただし，同じ円盤を2 度以上使うことはできない．

図: JOIOII からはミニ JOIOI の塔が 2 つ作れる

課題

用意された円盤に書かれた文字がそれぞれ円盤の直径が小さいものから順に長さ N の文字列 S として与えられる．これらの円盤を使って作ることのできるミニ JOIOI の塔の個数の最大値を求めるプログラムを作成せよ．

制限

1 ≤ N ≤ 1 000 000 文字列 S の長さ

入力

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

1 行目には整数 N が書かれている．N は文字列 S の長さを表す．

2 行目には文字列 S が書かれている．

出力

標準出力に，作ることのできるミニ JOIOI の塔の数の最大値を表す整数を 1 行で出力せよ．

入出力例

入力例 1

6
JOIIOI

出力例 1

2

JOIIOI は JOI および IOI をそれぞれ 1 つずつ部分列として含んでおり，作ることのできるミニ JOIOI の塔は 2 つである．

入力例 2

5
JOIOI

出力例 2

1

部分列として JOI および IOI を含んでいるが，文字を 2 度以上使うことはできないため同時に取り出すことはできない．

入力例 3

6
JOIOII

出力例 3

2

この入出力例は問題文中の例に対応している．

入力例 4

15
JJOIIOOJOJIOIIO

出力例 4

4

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
バブルソート(Bubble Sort)

バブルソートとは，列をソートするアルゴリズムの 1 つである．長さ N の数列 A を昇順にソートしたいとしよう．バブルソートは，隣り合う 2 つの数で大小関係が崩れているものがあれば，それらの位置を交換する．これを，数列を前から順に走査しながら行う．すなわち，Ai > Ai+1 となっている場所があれば，その 2 数を交換するということを，i = 1, 2, ... , N − 1 に対してこの順で行うのが 1 回の走査である．この走査を N − 1 回繰り返すことで，数列を昇順にソートできることが知られている．

数列 A のバブルソートによる交換回数とは，数列 A に上記のアルゴリズムを適用した時に，整数の交換が行われる回数である．（バブルソートとして知られるアルゴリズム及び実装には，ループの順番や範囲，及び終了条件など，細かな差異がある場合がある．ただし，同じ数列に適用した際の整数の交換回数はそれらの差異により変化しないことが知られている．）

例えば，以下のプログラムは長さ n の整数の配列 a をバブルソートによりソートする関数を C 言語で記述したものである．

void bubble_sort(int *a, int n) {
int i, j;
for (i = 0; i < n - 1; ++i) {
for (j = 0; j < n - 1; ++j) {
if (a[j] > a[j + 1]) {
/* 以下3 行が1 回の整数の交換に相当*/
int x = a[j];
a[j] = a[j + 1];
a[j + 1] = x;
}
}
}
}

課題

長さ N の数列 A が与えられる．数列 A の任意の場所の 2 つの整数を 1 回だけ交換した数列 A' を作るとする．数列 A' のバブルソートによる交換回数の最小値を求めるプログラムを作成せよ．（最初に交換する2つの整数は必ずしも隣り合っている必要はないことに注意せよ．）

制限

1 ≤ N ≤ 100 000 数列 A の長さ

1 ≤ Ai ≤ 1 000 000 000 数列 A に含まれる数字の大きさ

入力

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

1 行目には，整数 N が書かれている．N は数列 A の長さを表す．

続く N 行のうちの i 行目(1 ≤ i ≤ N) には，整数 Ai が書かれている．これは数列 A の i 番目の整数を表す．

出力

標準出力に，数列 A' のバブルソートによる交換回数の最小値を表す整数を 1 行で出力せよ．

採点基準

採点用データのうち，配点の10%分については，N ≤ 1 000 を満たし，任意の i, j (1 ≤ i < j ≤ N) について Ai ≠ Aj を満たす．

採点用データのうち，配点の30%分については，N ≤ 5 000 を満たし，任意の i, j (1 ≤ i < j ≤ N) について Ai ≠ Aj を満たす．

採点用データのうち，配点の80%分については，任意の i, j (1 ≤ i < j ≤ N) について Ai ≠ Aj を満たす．

入出力例

入力例 1

5
10
3
6
8
1

出力例 1

0

数列 A の最初の 10 と最後の 1 を交換することにすると，数列 A' はソート済みの列となり，バブルソートの交換回数は 0 となる．

入力例 2

5
3
1
7
9
5

出力例 2

2

数列 A の 3 番目の 7 と最後の 5 を交換することで，数列 A' は 3,1,5,9,7 となる．A' のバブルソートによる交換回数は 2 である．

入力例 3

3
1
2
3

出力例 3

1

最初から数列 A がソートされている場合でも，数列 A' を作る際に交換を行わなければならない．

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
水道料金 (Water Rate)

問題

JOI 君が住んでいる地域には水道会社が X 社と Y 社の 2 つある．2 つの会社の 1 ヶ月の水道料金は，1 ヶ月の水道の使用量に応じて次のように決まる．

X 社： 1 リットル あたり A 円かかる．

Y 社： 基本料金は B 円である．使用量が C リットル以下ならば，料金は基本料金 B 円のみがかかる．使用量が C リットルを超えると基本料金 B 円に加えて追加料金がかかる．追加料金は使用量が C リットルを 1 リットル超えるごとに D 円である．

JOI 君の家では 1 ヶ月の水道の使用量が P リットルである．

水道料金ができるだけ安くなるように水道会社を選ぶとき，JOI 君の家の 1 ヶ月の水道料金を求めよ．

入力

入力は 5 行からなり，1 行に 1 つずつ整数が書かれている．

1 行目には X 社の 1 リットルあたりの料金 A が書かれている．

2 行目には Y 社の基本料金 B が書かれている．

3 行目には Y 社の料金が基本料金のみになる使用量の上限 C が書かれている．

4 行目には Y 社の 1 リットルあたりの追加料金 D が書かれている．

5 行目には JOI 君の家の 1 ヶ月の水道の使用量 P が書かれている．

書かれている整数 A, B, C, D, P はすべて 1 以上 10000 以下である．

出力

JOI 君の家の 1 ヶ月の水道料金を表す整数を 1 行で出力せよ．

入出力例

入力例 1

9
100
20
3
10

出力例 1

90

入力例 2

8
300
100
10
250

出力例 2

1800

入出力例 1 では，JOI 君の家の 1 ヶ月の水道の使用量は 10 リットルである．

X 社の水道料金は 9 × 10 = 90 円である．

JOI 君の家の 1 ヶ月の水道の使用量は 20 リットル以下なので，Y 社の水道料金は基本料金の 100 円である．

JOI 君の家は水道料金がより安い X 社を選ぶ．そのときの JOI 君の家の 1 ヶ月の水道料金は 90 円である．

入出力例 2 では，JOI 君の家の 1 ヶ月の水道の使用量は 250 リットルである．

X 社の水道料金は 8 × 250 = 2000 円である．

JOI 君の家の 1 ヶ月の水道の使用量は 100 リットル以上で，超過量は 250 - 100 = 150 リットルである．よって，Y 社の水道料金は基本料金の 300 円に加えて 10 × 150 = 1500 円の追加料金がかかり，合計の水道料金は 300 + 1500 = 1800 円である．

JOI 君の家は水道料金がより安い Y 社を選ぶ．そのときの JOI 君の家の 1 ヶ月の水道料金は 1800 円である．

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
クリスマスパーティー (Christmas Party)

問題

JOI 君は友達 1 から友達 N までの N 人の友達を招いてクリスマスパーティーを行った．クリスマスパーティーも盛り上がってきたところで，友達と一緒に次のようなゲームを行うことになった．

最初に JOI 君は N 人の友達の中から 1 人を選ぶ．以降はその友達をターゲットと呼ぶことにする．

JOI 君は，ターゲットとして選んだ友達に，その人がターゲットであることをこっそり伝える．ターゲット以外の友達は，誰がターゲットかを知ることはできない．

ターゲット以外の友達はそれぞれ，ターゲットが誰かを予想して，その人の名前を紙に記入する．ターゲットは自分自身の名前を紙に記入する．

すべての人の記入が終わった後，JOI 君はターゲットの名前を発表する．

予想が当たった人は 1 点を得る．なお，ターゲットは自分自身の名前を紙に記入しているので，必ず 1 点を得る．予想が外れた人には得点は与えられない．

それに加えて，予想が外れた人の人数を X 人としたとき，ターゲットは追加で X 点を得る．

JOI 君たちはこのゲームを M 回行った．それぞれの友達に対して，M 回のゲームにおける合計得点を求めよ．

入力

入力は 3 + M 行からなる．

1 行目には，友達の人数 N (3 ≤ N ≤ 100) が書かれている．

2 行目には，JOI 君たちが行ったゲームの回数 M (3 ≤ M ≤ 100) が書かれている．

3 行目には，M 個の整数 A1, A2, ..., AM が空白を区切りとして書かれている．これは，i 回目 (1 ≦ i ≦ M) のゲームのターゲットが友達 Ai (1 ≤ Ai ≤ N) であることを表す．

続く M 行のうちの i 行目 (1 ≦ i ≦ M) には，N 個の整数 Bi,1, Bi,2, ..., Bi,N が空白を区切りとして書かれている．これは，i 回目のゲームにおいて友達 j (1 ≤ j ≤ N) が友達 Bi,j (1 ≤ Bi,j ≤ N) の名前を紙に記入したことを表す．ターゲットは自分自身の名前を紙に記入するので，j = Ai のとき，常に Bi,j = j である．

出力

それぞれの友達に対して，M 回のゲームにおける合計得点を出力せよ．出力は N 行からなる．j 行目 (1 ≤ j ≤ N) に友達 j の合計得点を出力せよ．

入出力例

入力例 1

3
4
1 2 3 2
1 1 2
3 2 2
1 1 3
2 2 2

出力例 1

3
4
5

入力例 2

5
3
3 3 1
2 4 3 3 3
4 3 3 3 1
1 3 4 1 1

出力例 1

3
1
6
3
2

入出力例 1 では 3 人の友達が 4 回のゲームを行う．

1 回目のゲームのターゲットは友達 1 であり，友達 1 は 2 点，友達 2 は 1 点，友達 3 は 0 点を得る．

2 回目のゲームのターゲットは友達 2 であり，友達 1 は 0 点，友達 2 は 2 点，友達 3 は 1 点を得る．

3 回目のゲームのターゲットは友達 3 であり，友達 1 は 0 点，友達 2 は 0 点，友達 3 は 3 点を得る．

4 回目のゲームのターゲットは友達 2 であり，友達 1 は 1 点，友達 2 は 1 点，友達 3 は 1 点を得る．

4 回のゲーム終了後の合計得点は，友達 1 は 3 点，友達 2 は 4 点，友達 3 は 5 点である．

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
気象予報士 (Weather Forecaster)

問題

JOI 市は南北方向に H キロメートル，東西方向に W キロメートルの長方形の形をしており，H × W 個の 1 キロメートル四方の小区画に区切られている．北から i 番目，西から j 番目の小区画を (i, j) と表す．

各小区画は上空に雲があるか雲がないかのどちらかである．すべての雲は，1 分経つごとに 1 キロメートル東に移動する．今日は実に天気が良いため，JOI 市の外から JOI 市内に雲が移動してくることはない．

今，各小区画の上空に雲があるかないかがわかっている．気象予報士であるあなたは，各小区画について，今から何分後に初めてその小区画の上空に雲が来るかを予測することになった．

各小区画について，今から何分後に初めてその小区画の上空に雲が来るか求めよ．

入力

入力は 1 + H 行からなる．

1 行目には，整数 H, W (1 ≤ H ≤ 100, 1 ≤ W ≤ 100) が空白を区切りとして書かれている．これは，JOI 市が H × W 個の 1 キロメートル四方の小区画に区切られていることを表す．

続く H 行のうちの i 行目 (1 ≤ i ≤ H) には W 文字からなる文字列が書かれている．W 文字のうちの j 文字目 (1 ≤ j ≤ W) は，小区画 (i, j) の上空に，今，雲があるかどうかを表す．雲がある場合は文字 'c' (英小文字) が，雲がない場合は文字 '.' (ピリオド) が書かれている．

出力

出力は H 行からなり，それぞれの行は空白を区切りとした W 個の整数からなる．出力の i 行目の j 番目の整数 (1 ≤ i ≤ H, 1 ≤ j ≤ W) は，今から何分後に初めて小区画 (i, j) の上空に雲が来るかを表さなければならない．ただし，今すでに小区画 (i, j) の上空に雲がある場合は 0 を，何分経っても小区画 (i, j) の上空に雲が来ない場合は -1 を出力せよ．

出力の各行の行頭と行末には余計な空白を入れないこと．

入出力例

入力例 1

3 4
c..c
..c.
....

出力例 1

0 1 2 0
-1 -1 0 1
-1 -1 -1 -1

入力例 2

6 8
.c......
........
.ccc..c.
....c...
..c.cc..
....c...

出力例 2

-1 0 1 2 3 4 5 6
-1 -1 -1 -1 -1 -1 -1 -1
-1 0 0 0 1 2 0 1
-1 -1 -1 -1 0 1 2 3
-1 -1 0 1 0 0 1 2
-1 -1 -1 -1 0 1 2 3

入出力例 1 では，JOI 市は 3 × 4 個の小区画に区切られている．今の JOI 市の雲の状況は以下の通りである．図の上が北を表す．

この後，1 分ごとに雲は以下のように移動する．

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
シルクロード (Silk Road)

問題

現在カザフスタンがある地域には，古くは「シルクロード」と呼ばれる交易路があった．

シルクロード上には N + 1 個の都市があり，西から順に都市 0, 都市 1, ... , 都市 N と番号がつけられている．都市 i - 1 と都市 i の間の距離 (1 ≤ i ≤ N) は Di である．

貿易商である JOI 君は，都市 0 から出発して，都市を順番に経由し，都市 N まで絹を運ぶことになった．都市 0 から都市 N まで M 日以内に移動しなければならない．JOI 君は，それぞれの日の行動として，以下の 2 つのうちいずれか 1 つを選ぶ．

移動： 現在の都市から 1 つ東の都市へ 1 日かけて移動する．現在都市 i - 1 (1 ≤ i ≤ N) にいる場合は，都市 i に移動する．

待機： 移動を行わず，現在いる都市で 1 日待機する．

移動は大変であり，移動するたびに疲労度が溜まっていく．シルクロードでは日毎に天候の変動があり，天候が悪い日ほど移動には苦労を要する．

JOI 君が絹を運ぶのに使える M 日間のうち j 日目 (1 ≤ j ≤ M) の天候の悪さは Cj であることが分かっている．都市 i - 1 から都市 i (1 ≤ i ≤ N) に j 日目 (1 ≤ j ≤ M) に移動する場合，疲労度が Di × Cj だけ溜まってしまう．移動を行わず待機している日は疲労度は溜まらない．

JOI 君は，それぞれの日の行動をうまく選ぶことで，できるだけ疲労度を溜めずに移動したい．JOI 君が M 日以内に都市 N に移動するときの，移動を開始してから終了するまでに溜まる疲労度の合計の最小値を求めよ．

入力

入力は 1 + N + M 行からなる．

1 行目には，2 つの整数 N, M (1 ≤ N ≤ M ≤ 1000) が空白を区切りとして書かれている．これは，シルクロードが N + 1 個の都市からなり，JOI 君が絹を都市 0 から都市 N まで M 日以内に運ばなければならないことを表す．

続く N 行のうちの i 行目 (1 ≤ i ≤ N) には，整数 Di (1 ≤ Di ≤ 1000) が書かれている．これは，都市 i - 1 と都市 i の間の距離が Di であることを表す．

続く M 行のうちの j 行目 (1 ≤ j ≤ M) には，整数 Cj (1 ≤ Cj ≤ 1000) が書かれている．これは，j 日目の天候の悪さが Cj であることを表す．

出力

JOI 君が M 日以内に都市 N に移動するときの，移動を開始してから終了するまでに溜まる疲労度の合計の最小値を 1 行で出力せよ．

入出力例

入力例 1

3 5
10
25
15
50
30
15
40
30

出力例 1

1125

入力例 2

2 6
99
20
490
612
515
131
931
1000

出力例 2

31589

入出力例 1 において，溜まる疲労度の合計を最小にするように JOI 君が移動するには次のようにする．

1 日目は待機する．

2 日目に都市 0 から都市 1 へ移動する．このとき溜まる疲労度は 10 × 30 = 300 である．

3 日目に都市 1 から都市 2 へ移動する．このとき溜まる疲労度は 25 × 15 = 375 である．

4 日目は待機する．

5 日目に都市 2 から都市 3 へ移動する．このとき溜まる疲労度は 15 × 30 = 450 である．

JOI 君がこのように移動した場合に溜まる疲労度の合計は 300 + 375 + 450 = 1125 である．これが最小値である．

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
砂の城 (Sandcastle)

問題

JOI 君は家族とともに海水浴に来た．さんざん泳いで泳ぎ疲れた JOI 君は，次は砂浜で砂の城を作って遊んだ．しばらくして砂遊びにも飽きると，JOI 君は城を放置してまた海に泳ぎに向かった．

JOI 君が作った城は，砂浜のうちのある長方形の領域に含まれている．この長方形の領域は，東西南北にマス目状に区切られている．各マスは，JOI 君が作った城の一部であるマス (以下，「城マス」と呼ぶ) かそうでないマス (以下，「更地マス」と呼ぶ) のいずれかである．それぞれの城マスには「強度」と呼ばれる 1 以上 9 以下の整数が定まっている．長方形の領域の外縁部，すなわち外側と接しているマスには城マスは存在しない．

やがて潮が満ちてきて，長方形の領域にも波が押し寄せてくるようになった．波が 1 つ押し寄せてくるたびに，城マスのうち次の条件を満たすものはすべて一斉に崩壊して，更地マスに変化する．

条件： 周囲の 8 マス (東西南北および北東，北西，南東，南西方向に隣接するマス) にある更地マスの数が，そのマスの強度の値以上である．

波が引くと，まもなく次の波が押し寄せて来る．

十分多くの波が押し寄せると，城がすべて崩れてしまうか，丈夫な部分だけが残るかして，波が押し寄せてきても 1 つも城マスが崩壊しないような状態に落ち着く．1 つ以上の城マスを崩壊させるような波が押し寄せてくる回数を求めよ．

入力

入力は 1 + H 行からなる．

1 行目には，2 つの整数 H, W (2 ≤ H ≤ 1000, 2 ≤ W ≤ 1000) が空白を区切りとして書かれている．これは，長方形の領域が縦 H 行，横 W 列の H × W 個のマスに区切られていることを表す．長方形の縦方向は南北方向であり，横方向は東西方向である．

続く H 行にはそれぞれ W 文字からなる文字列が書かれており，最初の波が押し寄せてくる前の長方形の領域の状態を表す．H 行のうちの i 行目の左から j 番目の文字 (1 ≤ i ≤ H, 1 ≤ j ≤ W) は，長方形の領域の北から i 行目，西から j 列目のマスが更地マスである場合は '.' (ピリオド) である．城マスである場合は '1', '2', ..., '9' のいずれかであり，そのマスの強度を表す．

長方形の領域の外縁部はすべて更地マスである．すなわち，すべての入力において，1 行目または H 行目の文字と，各行の左から 1 番目または W 番目の文字はすべて '.' である．

与えられる入力データのうち，入力 1 では H ≤ 50, W ≤ 50 を満たす．

出力

1 つ以上の城マスを崩壊させるような波が押し寄せてくる回数を 1 行で出力せよ．

入出力例

入力例 1

5 6
......
.939..
.3428.
.9393.
......

出力例 1

3

入力例 2

10 10
..........
.99999999.
.9.323239.
.91444449.
.91444449.
.91444449.
.91444449.
.91232329.
.99999999.
..........

出力例 2

35

入出力例 1 においては，初めに押し寄せる波で強度 3 の城マスがすべて崩壊し，

......
.9.9..
..428.
.9.9..
......

という状態になる．

次に押し寄せてくる波では強度 2 の城マスが崩壊し，

......
.9.9..
..4.8.
.9.9..
......

という状態になる．

次に押し寄せてくる波では強度 4 の城マスが崩壊し，

......
.9.9..
....8.
.9.9..
......

という状態になる．

これ以降の波が城マスを崩すことはない．よって答えは 3 である．

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。