alexjercan/bugnet huggingface dataset:
チーズ (Cheese)

問題

今年も JOI 町のチーズ工場がチーズの生産を始め，ねずみが巣から顔を出した．JOI 町は東西南北に区画整理されていて，各区画は巣，チーズ工場，障害物，空き地のいずれかである．ねずみは巣から出発して全てのチーズ工場を訪れチーズを 1 個ずつ食べる．

この町には，N 個のチーズ工場があり，どの工場も１種類のチーズだけを生産している．チーズの硬さは工場によって異なっており，硬さ 1 から N までのチーズを生産するチーズ工場がちょうど 1 つずつある．

ねずみの最初の体力は 1 であり，チーズを 1 個食べるごとに体力が 1 増える．ただし，ねずみは自分の体力よりも硬いチーズを食べることはできない．

ねずみは，東西南北に隣り合う区画に 1 分で移動することができるが，障害物の区画には入ることができない．チーズ工場をチーズを食べずに通り過ぎることもできる．すべてのチーズを食べ終えるまでにかかる最短時間を求めるプログラムを書け．ただし，ねずみがチーズを食べるのにかかる時間は無視できる．

入力

入力は H+1 行ある．1 行目には 3 つの整数 H，W，N (1 ≤ H ≤ 1000，1 ≤ W ≤ 1000，1 ≤ N ≤ 9) がこの順に空白で区切られて書かれている．2 行目から H+1 行目までの各行には，'S'，'1', '2', ..., '9'，'X'，'.' からなる W 文字の文字列が書かれており，各々が各区画の状態を表している．北から i 番目，西から j 番目の区画を (i,j) と記述することにすると (1 ≤ i ≤ H, 1 ≤ j ≤ W)，第 i+1 行目の j 番目の文字は，区画 (i,j) が巣である場合は 'S' となり，障害物である場合は 'X' となり，空き地である場合は '.' となり，硬さ 1, 2, ..., 9 のチーズを生産する工場である場合はそれぞれ '1', '2', ..., '9' となる．入力には巣と硬さ 1, 2, ..., N のチーズを生産する工場がそれぞれ 1 つずつある．他のマスは障害物または空き地であることが保証されている．ねずみは全てのチーズを食べられることが保証されている．

出力

すべてのチーズを食べ終えるまでにかかる最短時間（分）を表す整数を 1 行で出力せよ．

入出力例

入力例 1

3 3 1
S..
...
..1

出力例 1

4

入力例 2

4 5 2
.X..1
....X
.XX.S
.2.X.

出力例 2

12

入力例 3

10 10 9
.X...X.S.X
6..5X..X1X
...XXXX..X
X..9X...X.
8.X2X..X3X
...XX.X4..
XX....7X..
X..X..XX..
X...X.XX..
..X.......

出力例 3

91

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

問題

情報オリンピック日本委員会では，今年の日本情報オリンピック (JOI) を宣伝するために， JOI のロゴをモチーフにした旗を作ることになった．旗は「良い旗」でなければならない．「良い旗」とは，アルファベットの J, O, I のいずれかの文字を，縦 M 行，横 N 列の長方形状に並べたもので， J, O, I が以下の図のように (すなわち，J の右隣に O が，その J の下隣に I が) 並んでいる箇所が旗の少なくとも 1 か所にあるものである．

以下の図に，「良い旗」の例を 2 つ示す．

以下の図に，「良い旗」ではない例を 2 つ示す．

いま M, N の値，および旗の一部の場所について J, O, I のどの文字にするかが決まっており，入力としてその情報が与えられる．考えられる「良い旗」は何通りあるかを計算し，その数を 100000 (=105) で割った余りを出力するプログラムを作成せよ．

入力

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

1 行目には旗の大きさを表す 2 つの整数 M, N (2 ≤ M ≤ 20, 2 ≤ N ≤ 20) が空白で区切られて書かれている．

1 + i 行目 (1 ≤ i ≤ M) には，N 文字からなる文字列が書かれている．各文字は J, O, I, ? のいずれかであり， j 文字目 (1 ≤ j ≤ N) が J, O, I のいずれかである場合は i 行 j 列の場所の文字がそれぞれ J, O, I に決まっていること， ? である場合はまだ決まっていないことを表す．

出力

考えられる「良い旗」の個数を 100000 (=105) で割った余りを 1 行で出力せよ．

入出力例

入力例 1

2 3
??O
IIJ

出力例 1

4

入力例 1 においては，以下の図の 4 通りの「良い旗」が考えられる．

入力例 2

2 2
??
??

出力例 2

3

入力例 3

3 3
??I
???
O?J

出力例 3

53

入力例 4

5 4
JOI?
????
????
????
?JOI

出力例 4

28218

入力例 4 においては，「良い旗」は 2428218 通り考えられるので，それを 100000 (=105) で割った余りである 28218 を出力する．

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

あなたを乗せた超時空移民船は長旅の末，ついに居住可能と思われる惑星を発見した．JOI 星と名付けられたその惑星は，その名の通り「ジャングル(Jungle)」，「海(Ocean)」，「氷(Ice)」の3 種類の地形が入り組んだ過酷な惑星である．簡単な調査により，居住予定地近辺の地図が作成された．居住予定地は南北M km, 東西N km の長方形の形をしており， 1 km 四方の正方形の区画に分けられている．区画は全部でMN 個あり，北からp 行目，西からq 列目の区画を(p, q) で表す．北西の角の区画が(1, 1) であり，南東の角の区画が(M, N) である．各区画の地形は，「ジャングル」，「海」，「氷」のいずれかであり，「ジャングル」はJ, 「海」はO, 「氷」はI の英字1 文字で表される.

さて，詳細な移住計画を立てるにあたり， K 箇所の長方形領域内に「ジャングル」，「海」，「氷」がそれぞれ何区画含まれるかを調べることにした．

課題

居住予定地の情報と，調査対象となる領域の情報が与えられたとき，それぞれの領域について， 「ジャングル」，「海」，「氷」が何区画含まれているかを求めるプログラムを作成せよ．

制限

1 ≤ M ≤ 1000 居住予定地の南北の長さ(km)

1 ≤ N ≤ 1000 居住予定地の東西の長さ(km)

1 ≤ K ≤ 100000 調査対象となる領域の個数

入力

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

1 行目には整数M, N が空白を区切りとして書かれており，居住予定地が南北にM km ，東西にN km の広さであることを表す．

2 行目には整数K が書かれており，調査対象となる領域の個数を表す．

続くM 行には居住予定地の情報が書かれている．i + 2 行目(1 ≤ i ≤ M) には，居住予定地の北からi行目に位置するN 区画の情報を表すJ，O，I からなるN 文字の文字列が書かれている．

続くK 行には調査対象となる領域が書かれている．j + M + 2 行目(1 ≤ j ≤ K) には， j 番目の領域を表す正整数aj, bj, cj, dj が空白を区切りとして書かれている．(aj, bj) は調査領域の北西の角の区画を，(cj, dj) は調査領域の南東の角の区画を表す．ただし，aj, bj, cj, dj は，1 ≤ aj ≤ cj ≤ M, 1 ≤ bj ≤ dj ≤ Nを満たす．

出力

標準出力に調査の結果を表すK 行を出力せよ．出力のj 行目には， j 番目の調査領域に含まれる「ジャングル」(J) の区画数，「海」(O) の区画数，「氷」(I) の区画数を表す3 つの整数を，この順に空白を区切りとして書け．

採点基準

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

入出力の例

入力例

4 7
4
JIOJOIJ
IOJOIJO
JOIJOOI
OOJJIJO
3 5 4 7
2 2 3 6
2 2 2 2
1 1 4 7

出力例

1 3 2
3 5 2
0 1 0
10 11 7

この入力例では， 2 番目の領域は上図のように「ジャングル」を3 区画，「海」を5 区画，「氷」を2 区画含む．

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

あなたの町にはJOI 古本店という老舗の古本屋があり，あなたはJOI 古本店をよく利用している．それぞれの本には基準価格が定まっており，JOI 古本店に行けばその価格で買い取ってもらえる．

JOI 古本店では，本を小説,漫画,雑誌など10 種類のジャンルに分類して扱っている．ジャンルには1から10 までの番号が付けられている．JOI 古本店には，同じジャンルの本をまとめて買い取ってもらうと高値で買い取ってくれるというサービスがある．具体的には，同じジャンルの本をまとめてT 冊買い取ってもらう場合，そのジャンルの本の一冊あたりの買取価格が基準価格よりT - 1 円高くなる．例えば，同じジャンルで基準価格100 円，120 円，150 円の本をまとめてJOI 古本店に売ったとすると，買取価格はそれぞれ102 円，122 円，152 円となる．

さて，あなたは一身上の都合で急遽引越しをすることになった．あなたはN 冊の本を持っているが，新しい住居にすべての本を持っていくことは困難なため，N 冊の本のうちK 冊をJOI 古本店に売ることにした．

課題

N 冊の本それぞれの基準価格とジャンルの番号が与えられるとき，合計買取価格の最大値を求めるプログラムを作成せよ．

制限

2 ≤ N ≤ 2000 あなたが持っている本の冊数

1 ≤ K < N JOI 古本店に売る本の冊数

1 ≤ Ci ≤ 100000 = 105 i 番目の本の基準価格

1 ≤ Gi ≤ 10 i 番目の本のジャンルの番号

入力

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

1 行目には整数N, K が空白を区切りとして書かれており，あなたの持っている本の冊数がN で，そのうちK 冊をJOI 古本店に売ることを表す．

続くN 行にはあなたの持っている本の情報が書かれている．i + 1 行目(1 ≤ i ≤ N) には，整数Ci,Giが空白を区切りとして書かれており，i 番目の本の基準価格がCi で，ジャンルの番号がGi であることを表す．

出力

標準出力に，合計買取価格の最大値を表す整数を1 行で出力せよ．

採点基準

採点用データのうち，

配点の20% 分については，N ≤ 20 を満たす．

配点の20% 分については，すべての本のジャンルは1 または2 である．

配点の10% 分については，これら2 つの条件の両方を満たす．

配点の30% 分については，これら2 つの条件の少なくとも一方を満たす．

入出力の例

入力例

7 4
14 1
13 2
12 3
14 2
8 2
16 3
11 2

出力例

60

この入力例では，2 番目，4 番目，6 番目，7 番目の4 冊の本を売ったとき，ジャンル2 の本の買取価格が1 冊あたり2 円高くなるので，これらの本の買取価格は以下のようになる．

番号
基準価格
ジャンル
買取価格

2
4
6
7

13
14
16
11

2
2
3
2

15
16
16
13

よって合計買取価格は15 + 16 + 16 + 13 = 60 円である．このとき合計買取価格は最大となる．

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

JOI 国にはN 個の町があり，それらの間はM 本の双方向に通行可能な道路で結ばれている．K 個の町にはショッピングモールがあり，国民は道路を通ってそれらの町のいずれかに行き買い物をする．

家の場所によっては，買い物に行くために長い距離を移動する必要があり，それは非常に不便である．国王はこの実情を把握するため，ショッピングモールのある町までの最短距離が家の場所によってどれだけ長くなりうるのかを調べることにした．家は道路の途中に建てられることもあるので(入力例1 の説明を参照)，この調査は非常に大変である．そこで国王は，優秀なプログラマーであるあなたに，調査を行うプログラムの作成を依頼した．

課題

道路の情報とショッピングモールのある町の情報が与えられるとき，ショッピングモールのある町からもっとも遠い道路上の点(端点も含む) までの距離を求めるプログラムを作成せよ．町の中を移動するのにかかる距離は無視してよい．

制限

2 ≤ N ≤ 3000 JOI 国の町の個数

1 ≤ M ≤ 100000 = 105 JOI 国の道路の本数

1 ≤ K ≤ N ショッピングモールがある町の個数

1 ≤ li ≤ 1000 i 番目の道路の長さ

入力

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

1 行目には整数N, M, K が空白区切りで書かれている．N はJOI 国の町の個数を，M はJOI 国の道路の本数を，i>K はショッピングモールがある町の個数をそれぞれ表す．町には1, 2, ..., N の番号がつけられている．

続くM 行は道路の情報を表す．i + 1 行目(1 ≤ i ≤ M) には整数ai, bi, li (1 ≤ ai ≤ N, 1 ≤ bi ≤ N, 1 ≤ li ≤ 1000) が空白区切りで書かれている．これは，i 本目の道路が町ai と町bi を結んでおり，長さがli であることを表す．道路の両端が同じ町であることはない．また，任意の2 つの町p, q に対し，pとq を結ぶ道路は2 本以上存在しない．どの町からどの町へもいくつかの道路をたどって行くことができる．
続くK 行はショッピングモールの情報を表す．i+M+1 行目(1 ≤ i ≤ K) には1 つの整数si (1 ≤ si ≤ N)が書かれている．これは町si にショッピングモールがあることを表す．s1, ..., sK の中に同じ値が2
回以上現れることはない．

出力

標準出力に，ショッピングモールのある町までの最短距離の最大値の小数点以下を四捨五入した整数1
つを出力せよ．

採点基準

採点用データのうち，配点の40% 分については，K = 1 を満たす．

入出力の例

入力例1

3 3 1
1 2 1
2 3 1
3 1 1
1

出力例1

2

入力例1 は次のような町を表す．道路の長さはすべて1 である．ショッピングモールは町1 にしかない．

ショッピングモールのある町までもっとも遠い点は，町2 と町3 を結ぶ道路上の，町2 から距離0.5 の位置にある点であり，ショッピングモールのある町までの距離は1.5 である．よって，それを四捨五入した値である2 を出力する．

入力例2

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

出力例2

3

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

昨年末，サンタクロースはJOI 村の子供たちにクリスマスプレゼントを渡すのを忘れてしまった．そこで，お詫びの気持ちとして子供たちにチョコレートケーキを届けることにした．届けるべき日は明日に迫っているので，そろそろ移動計画を考えなければならない．

JOI 村は，南北方向にまっすぐに伸びるW 本の道路と，東西方向にまっすぐに伸びるH 本の道路により，碁盤の目の形に区分けされている. 南北方向のW 本の道路には，西から順に1, 2, ... , W の番号が付けられており，東西方向のH 本の道路には，南から順に1, 2, ... , H の番号が付けられている. 西からx 番目の南北方向の道路と，南からy 番目の東西方向の道路が交わる交差点を(x, y) で表す. JOI 村にはN 軒の家があり，それらはいずれかの交差点に位置している. サンタクロースは道路に沿ってのみ移動することができる. 隣り合う交差点の間を移動するのにかかる時間を1 とする.

JOI 村のすべての家には子供がいるので，サンタクロースはJOI 村のすべての家に1 個ずつチョコレートケーキを届けてまわらなければならない. 大切なチョコレートケーキを持ってトナカイと空を飛びまわるのはやや危険であるので，サンタクロースとトナカイはJOI 村のいずれかの交差点に降り立ち，サンタクロースがそこから歩いてチョコレートケーキを届けることにした. サンタクロースは同時に2 個以上のチョコレートケーキを運んで歩くことはしない．つまり，サンタクロースはチョコレートケーキを1 軒の家に届けるたびに降り立った交差点に戻る．

サンタクロースは，JOI 村に降り立ってからすべての家にチョコレートケーキを届けるまでの所要時間が最小になるような移動計画を選ぶことにした．ここで，最後の家にチョコレートケーキを届けてから降り立った交差点に戻るまでの時間は所要時間に含めないことに注意せよ．また，移動にかかる時間以外は考えない．

課題

家の位置の情報が与えられたとき，サンタクロースが降り立つ交差点をうまく選んだ場合の，JOI 村に降り立ってからすべての家にチョコレートケーキを届けるまでの所要時間の最小値と，所要時間を最小にするために降り立つべき交差点の位置を求めるプログラムを作成せよ．

制限

1 ≤ W ≤ 1000000000 = 109 南北方向に伸びる道路の本数

1 ≤ H ≤ 1000000000 = 109 東西方向に伸びる道路の本数

1 ≤ N ≤ 100000 = 105 家の数

1 ≤ Xi ≤ W i 番目の家の位置の, 南北方向に伸びる道路の番号

1 ≤ Yi ≤ H i 番目の家の位置の, 東西方向に伸びる道路の番号

入力

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

1 行目には各方向の道路の本数を表す整数 W, H が空白を区切りとして書かれている．

2 行目には家の数を表す整数N が書かれている．

続くN 行には，家の位置の情報が書かれている．i + 2 行目(1 ≤ i ≤ N) には整数Xi, Yi が空白を区切りとして書かれており，i 番目の家が交差点(Xi, Yi) に位置していることを表す．これらN 個の交差点はすべて異なる．

出力

標準出力に以下のデータを出力せよ．

1 行目には所要時間の最小値を表す1 つの整数が書かれていなければならない．

2 行目には所要時間を最小にするために降り立つべき交差点が(x, y) であるとき，2 つの整数x, y がこの順に空白を区切りとして書かれていなければならない．適切な交差点が複数ある場合は，そのうち最も西にある(つまり，x の値が小さい) 交差点を, それでも1 つに定まらない場合は, さらにそのうちで最も南にある(つまり，y の値が小さい) 交差点を選べ.

注意

この問題では，扱う整数の範囲が32 ビットに収まらない可能性があることに注意せよ．

採点基準

採点用データのうち，配点の40%分については，N ≤ 1000 を満たす．

採点用データのうち，配点の10%分については，W ≤ 50, H ≤ 50, N ≤ 1000 を満たす．

入出力の例

入力例1

5 4
3
1 1
3 4
5 3

出力例1

10
3 3

たとえば，次のような移動計画により所要時間を最小にできる．

交差点(3; 3) に降り立つ．

交差点(3; 4) に位置している家にチョコレートケーキを届ける．ここまでの経過時間は1 である．

交差点(3; 3) に戻る．ここまでの経過時間は2 である．

交差点(5; 3) に位置している家にチョコレートケーキを届ける．ここまでの経過時間は4 である．

交差点(3; 3) に戻る．ここまでの経過時間は6 である．

交差点(1; 1) に位置している家にチョコレートケーキを届ける．ここまでの経過時間は10 である．

入力例2

4 6
8
1 3
3 2
4 4
2 5
2 3
3 3
3 4
2 4

出力例2

21
2 3

家がある交差点に降り立ってもよいことに注意せよ．

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

あなたはJust Odd Inventions 社を知っているだろうか? この会社の業務は「ただ奇妙な発明(just odd inventions)」をすることである．ここでは略してJOI 社と呼ぶ．

JOI 社では多くの微生物を1 つのシャーレに生きたまま閉じ込める研究をしている．調査対象の微生物はN 匹存在し，1, 2, ... , N という番号がついている．各微生物はシャーレに閉じ込められると，foo (fatally odd object) と呼ばれる有害物質を一瞬のうちにシャーレ内に放出する．各微生物が放出するfoo の量は知られている．シャーレに閉じ込められた全微生物が放出したfoo はシャーレ内の各微生物が均等に摂取する．各微生物のfoo 許容量は知られており，この量を超えてfoo を摂取すると微生物は死んでしまう．

微生物i のfoo 放出量はai ミリグラム，foo 許容量はbi ミリグラムである．すなわち，シャーレに微生物i1, i2, ... , ik を閉じ込めたとき，シャーレ内の各微生物はそれぞれ(ai1 + ai2 + ... + aik)/k ミリグラムのfoo を摂取し，シャーレ内の微生物i は，この摂取量がbi より大きいと死んでしまう．

JOI 社からの委託により，あなたは出来るだけ多くの微生物をシャーレに生きたまま閉じ込めなければならない．ただし，微生物の死骸はシャーレ内の環境に悪影響を及ぼすため，シャーレ内のどの微生物もfoo の摂取で死んではならない．

なお，JOI 社が「ただ奇妙な発明」をすることでどうやって利益を得ているかは，今もって謎であり，JOI社内でも社長以外の誰も知らない．

課題

調査対象の微生物数と，各微生物のfoo 放出量とfoo 許容量が与えられたとき，1 つのシャーレに閉じ込めることができる微生物数の最大値を求めるプログラムを作成せよ．

制限

1 ≤ N ≤ 300000 = 3 × 105 調査対象の微生物の数

1 ≤ ai ≤ 100000 = 105 微生物i のfoo 放出量(ミリグラム)

1 ≤ bi ≤ 100000 = 105 微生物i のfoo 許容量(ミリグラム)

入力

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

1 行目には整数N が書かれており，調査対象の微生物がN 匹存在することを表す．

続くN 行には各微生物の情報が書かれている．i + 1 行目(1 ≤ i ≤ N) には，正整数 ai, bi が空白を区切りとして書かれており，微生物i のfoo 放出量がai ミリグラムでfoo 許容量がbi ミリグラムであることを表す.

出力

標準出力に，1 つのシャーレに閉じ込めることができる微生物数の最大値を1 行で出力せよ．

注意

この問題では，扱う整数の範囲が32 ビットに収まらない可能性があることに注意せよ．

採点基準

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

入出力の例

入力例

6
12 8
5 9
2 4
10 12
6 7
13 9

出力例

3

この例では，微生物2, 4, 5 をシャーレに入れれば，放出されるfoo の合計量は5 + 10 + 6 = 21 ミリグラムとなり，それぞれの微生物が摂取するfoo の量は21/3 = 7 ミリグラムとなる．微生物2, 4, 5 のfoo 許容量はそれぞれ9, 12, 7 ミリグラムなので，シャーレ内のどの微生物も死なない．また，4 匹以上の微生物をどの微生物も死なないようにシャーレに入れることはできない．

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

問題

JOI パスタ店では，ランチのおすすめパスタと搾りたてジュースのセットメニューが好評である．このセットメニューを注文するときは，その日の 3 種類のパスタと 2 種類のジュースから 1 つずつ選ぶ．パスタとジュースの値段の合計から 50 円を引いた金額が代金となる．

ある日のパスタとジュースの値段が与えられたとき，その日のセットメニューの代金の最小値を求めるプログラムを作成せよ．

入力

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

1 行目の整数は 1 つ目のパスタの値段である．

2 行目の整数は 2 つ目のパスタの値段である．

3 行目の整数は 3 つ目のパスタの値段である．

4 行目の整数は 1 つ目のジュースの値段である．

5 行目の整数は 2 つ目のジュースの値段である．

ただし，与えられる入力データにおいては全てのパスタとジュースの値段は 100 円以上 2000 円以下であることが保証されている．

出力

その日のセットメニューの代金の最小値を 1 行で出力せよ．

入出力例

入力例 1

800
700
900
198
330

出力例 1

848

入出力例 1 では，2 つ目のパスタと 1 つ目のジュースを組み合わせた場合の
700 + 198 - 50 = 848 がその日のセットメニューの代金の最小値である．

入力例 2

1999
1999
100
189
100

出力例 2

150

入出力例 2 では，3 つ目のパスタと 2 つ目のジュースを組み合わせた場合の
100 + 100 - 50 = 150 がその日のセットメニューの代金の最小値である．

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

問題

JOI 国ではサッカーが人気であり，JOI リーグというリーグ戦が毎週行われている．

JOI リーグには N 個のチームが所属していて，1 から N までの番号がつけられている．すべての組み合わせの試合がちょうど一度ずつ行われる．つまり， N × (N - 1) / 2 試合が行われる．各試合の勝敗はそれぞれのチームの得点で決まる．勝ったチームの勝ち点は 3 点であり，負けたチームの勝ち点は 0 点である．引き分けの場合，両チームの勝ち点は 1 点である．順位は各チームの獲得した勝ち点の合計で決定し，得失点差は考えない．勝ち点の合計が等しいチームの順位は上位に揃える．

例として， 4 チームでのリーグ戦を考える．4 × (4 - 1) / 2 = 6 試合が行われる．それらの結果が以下の表のようになったとする．ハイフンの左側はその横のチームの得点であり，右側はその縦のチームの得点である．

チーム 1
チーム 2
チーム 3
チーム 4
勝ち数
負け数
引き分け数
勝ち点

チーム 1
---
0 - 1
2 - 1
2 - 2
1
1
1
4

チーム 2
1 - 0
---
1 - 1
3 - 0
2
0
1
7

チーム 3
1 - 2
1 - 1
---
1 - 3
0
2
1
1

チーム 4
2 - 2
0 - 3
3 - 1
---
1
1
1
4

このとき，勝ち点の最も多いチーム 2 が 1 位である．

その次に勝ち点が多いチームはチーム 1 とチーム 4 であり，これらのチームの順位は共に 2 位である．

そして勝ち点が最も少ないチーム 3 が 4 位である．

全ての試合の結果が与えられたとき，各チームの順位を求めるプログラムを作成せよ．

入力

入力ファイルの 1 行目にはチームの個数 N (2 ≦ N ≦ 100) が書かれている．続く N × (N - 1) / 2 行には各試合の結果が書かれている．i + 1 行目 (1 ≦ i ≦ N × (N - 1) / 2) には整数 Ai，Bi，Ci，Di (1 ≦ Ai ≦ N，1 ≦ Bi ≦ N，0 ≦ Ci ≦ 100，0 ≦ Di ≦ 100) が空白を区切りとして書かれており，チーム Ai とチーム Bi が対戦し，チーム Ai の得点が Ci 点，チーム Bi の得点が Di 点であったことを表す．全ての i について Ai ≠ Bi であり，同じ組み合わせの対戦が書かれていることはない．

出力

出力は N 行からなる．各行は 1 つの整数からなり， i 行目 (1 ≦ i ≦ N) の整数はチーム i の順位を表す．

入出力例

入力例 1

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

出力例 1

2
1
4
2

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

入力例 2

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

出力例 2

2
4
1
4
3

入出力例 2 における結果は以下の通りである．

勝ち数
負け数
引き分け数
勝ち点

チーム 1
2
1
1
7

チーム 2
0
1
3
3

チーム 3
3
0
1
10

チーム 4
1
3
0
3

チーム 5
1
2
1
4

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

問題

K 理事長は，JOI 市の中心部にある JOI ピザ店の常連客である．彼はある事情により，今月から節約生活を始めることにした．そこで彼は，JOI ピザ店で注文できるピザのうち，1 ドルあたりのカロリーが最大となるようなピザを注文したいと思った．このようなピザを「最高のピザ」と呼ぶことにしよう．「最高のピザ」は 1 種類とは限らない．

JOI ピザでは N 種類のトッピングから何種類かを自由に選び，基本の生地の上に載せたものを注文することができる．同種のトッピングを 2 つ以上載せることはできない．生地にトッピングを 1 種類も載せないピザも注文できる．生地の値段は A ドルであり，トッピングの値段はいずれも B ドルである．ピザの値段は，生地の値段と載せたトッピングの値段の合計である．すなわち，トッピングを k 種類 (0 ≦ k ≦ N) 載せたピザの値段は A + k × B ドルである．ピザ全体のカロリーは，生地のカロリーと載せたトッピングのカロリーの合計である．

生地の値段とトッピングの値段，および，生地と各トッピングのカロリーの値が与えられたとき，「最高のピザ」の 1 ドルあたりのカロリー数を求めるプログラムを作成せよ．

入力

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

1 行目にはトッピングの種類数を表す 1 つの整数 N (1 ≦ N ≦ 100) が書かれている．2 行目には 2 つの整数 A, B (1 ≦ A ≦ 1000，1 ≦ B ≦ 1000) が空白を区切りとして書かれている．A は生地の値段，B はトッピングの値段を表す．3 行目には，生地のカロリー数を表す 1 つの整数 C (1 ≦ C ≦ 10000) が書かれている．

3 + i 行目 (1 ≦ i ≦ N) には，i 番目のトッピングのカロリー数を表す 1 つの整数 Di (1 ≦ Di ≦ 10000) が書かれている．

出力

「最高のピザ」の 1 ドルあたりのカロリー数を 1 行で出力せよ．ただし，小数点以下は切り捨てて整数値で出力せよ．

入出力例

入力例 1

3
12 2
200
50
300
100

出力例 1

37

入出力例 1 では，2 番目と 3 番目のトッピングを載せると，200 + 300 + 100 = 600 カロリーで 12 + 2 × 2 = 16 ドルのピザになる．

このピザは 1 ドルあたり 600 / 16 = 37.5 カロリーになる．これが「最高のピザ」となるので，37.5 の小数点以下を切り捨てた 37 を出力する．

入力例 2

4
20 3
900
300
100
400
1300

出力例 2

100

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

問題

あなたはパスタが大好物であり，毎日，晩御飯にパスタを作って食べている．あなたはトマトソース，クリームソース，バジルソースの 3 種類のパスタを作ることができる．

N 日間の晩御飯の予定を考えることにした．それぞれの日に 3 種類のパスタから 1 種類を選ぶ．ただし，同じパスタが続くと飽きてしまうので，3 日以上連続して同じパスタを選んではいけない．また，N 日のうちの K 日分のパスタはすでに決めてある．

入力として N の値と，K 日分のパスタの情報が与えられたとき，条件をみたす予定が何通りあるかを 10000 で割った余りを求めるプログラムを作成せよ．

入力

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

1 行目には 2 つの整数 N, K (3 ≦ N ≦ 100，1 ≦ K ≦ N) が空白を区切りとして書かれている．

1 + i 行目 (1 ≦ i ≦ K) には 2 つの整数 Ai, Bi (1 ≦ Ai ≦ N，1 ≦ Bi ≦ 3) が空白を区切りとして書かれている．これは，Ai 日目のパスタはすでに決まっており，Bi = 1 のときはトマトソースであり，Bi = 2 のときはクリームソースであり，Bi = 3 のときはバジルソースであることを表す．Ai (1 ≦ i ≦ K) は全て異なる．与えられる入力データにおいて，条件をみたす予定は 1 通り以上あることが保証されている．

出力

条件をみたす予定が何通りあるかを 10000 で割った余りを 1 行で出力せよ．

入出力例

入力例 1

5 3
3 1
1 1
4 2

出力例 1

6

入出力例 1 において，あなたは 5 日間の予定を考える．1 日目と 3 日目はトマトソースであり，4 日目はクリームソースである．また，3 日以上連続して同じパスタを選んではいけない．これらの条件をみたす予定は 6 通りある．

1日目
2日目
3日目
4日目
5日目

予定 1
1
2
1
2
1

予定 2
1
2
1
2
2

予定 3
1
2
1
2
3

予定 4
1
3
1
2
1

予定 5
1
3
1
2
2

予定 6
1
3
1
2
3

この表では，1 はトマトソースを，2 はクリームソースを，3 はバジルソースを表す．

入力例 2

20 5
10 2
4 3
12 1
13 2
9 1

出力例 2

2640

入出力例 2 において，条件をみたす予定は全部で 4112640 通りある．それを 10000 で割った余りである 2640 を出力する．

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

問題

JOI 社の建物は図のような 1 辺 1 メートルの正六角形をつなぎ合わせた形である．クリスマスが近づいているので，JOI 社では建物の壁面をイルミネーションで飾り付けることにした．ただし，外から見えない部分にイルミネーションを施すのは無駄なので，イルミネーションは外から建物の中を通らずに行くことのできる壁面にのみ飾り付けることにした．

図: JOI 社の建物の配置の例

上の図は上空から見た JOI 社の建物の配置の例である．正六角形内の数字は座標を表す．灰色の正六角形は建物がある場所を表し，白色の正六角形は建物がない場所を表す．この例では，赤の実線で示される部分がイルミネーションで飾り付けを行う壁面となり，その壁面の長さの合計は 64 メートルとなる．

JOI 社の建物の配置を表す地図が与えられたとき，飾り付けを行う壁面の長さの合計を求めるプログラムを作成せよ．ただし，地図の外側は自由に行き来できるものとし，隣接した建物の間は通ることはできないものとする．

入力

入力ファイルの 1 行目には 2 つの整数 W, H (1 ≦ W ≦ 100，1 ≦ H ≦ 100) が空白を区切りとして書かれている．続く H 行には JOI 社の建物の配置が書かれている．i + 1 行目 (1 ≦ i ≦ H) には W 個の整数が空白を区切りとして書かれており，j 個目 (1 ≦ j ≦ W) の整数は座標 (j, i) の正六角形に建物がある時は 1 であり，ない時は 0 である．また，与えられる入力データには建物が必ず 1 つ以上ある．

地図は以下の規則によって記述されている．

地図の最も北の行の最も西の正六角形は座標 (1, 1) である．

座標 (x, y) の正六角形に隣接する東隣の正六角形は座標 (x + 1, y) である．

y が奇数の時，座標 (x, y) の正六角形に隣接する南西の正六角形の座標は (x, y + 1) である．

y が偶数の時，座標 (x, y) の正六角形に隣接する南東の正六角形の座標は (x, y + 1) である．

出力

イルミネーションで飾り付けを行う壁面の長さの合計を 1 行で出力せよ．

入出力例

入力例 1

8 4
0 1 0 1 0 1 1 1
0 1 1 0 0 1 0 0
1 0 1 0 1 1 1 1
0 1 1 0 1 0 1 0

出力例 1

64

入出力例 1 は問題文中の例に対応しており，イルミネーションで飾り付けを行う壁面の長さの合計は 64 メートルである．

入力例 2

8 5
0 1 1 1 0 1 1 1
0 1 0 0 1 1 0 0
1 0 0 1 1 1 1 1
0 1 0 1 1 0 1 0
0 1 1 0 1 1 0 0

出力例 2

56

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

問題

正の整数を (先頭に 0 をつけずに) 10 進法で書いて桁の数字を順番に見ていくと増加と減少を交互に繰り返しているとき，その数は「ジグザグ数」であると呼ぶことにしよう．たとえば，2947 は桁の数字が 2 → 9 → 4 → 7 と，増加 → 減少 → 増加 の順になっているのでジグザグ数である．また，71946 は 減少 → 増加 → 減少 → 増加 の順なのでジグザグ数である．一方，123 や 71446 や 71442 や 88 はジグザグ数ではない．なお，1 桁の正の整数はジグザグ数であると考えることとする．

A 以上 B 以下の M の倍数のうち，ジグザグ数の個数を 10000 で割った余りを求めるプログラムを作成せよ．

入力

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

1 行目の整数は A を，2 行目の整数は B を，3 行目の整数は M を表す．これらは 1 ≦ A ≦ B ≦ 10500，1 ≦ M ≦ 500 を満たす．

※ A や B の値は，通常の整数を表すデータ型には収まらない可能性があることに注意せよ．

出力

A 以上 B 以下の M の倍数のうち，ジグザグ数の個数を 10000 で割った余りを 1 行で出力せよ．

入出力例

入力例 1

100
200
5

出力例 1

13

入出力例 1 において，100 以上 200 以下の 5 の倍数であるジグザグ数は，105, 120, 130, 140, 150, 160, 165, 170, 175, 180, 185, 190, 195 の 13 個である．

入力例 2

6
1234567
3

出力例 2

246

入出力例 2 において，6 以上 1234567 以下の 3 の倍数であるジグザグ数は 50246 個あるので，それを 10000 で割った余りである 246 を出力する．

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

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

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

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

また，0 以上の整数k に対し，レベルk のJOI 列とは，k 個の文字J，k 個の文字O，k 個の文字I をこの順に並べた文字列のことであるとする．たとえば，JJOOII はレベル2 のJOI 列である．与えられた文字列の部分文字列であるJOI 列のうち，レベルが最大のものを求めたい．

課題

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

制限

1 ≤ N ≤ 1000000 (= 106) S の長さ

入力

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

1 行目にはJ, O, I の3 種類の文字からなる文字列S が書かれている．

出力

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

採点基準

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

入出力例

入力例 1

OJJOOIIOJOI

出力例 1

2

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

入力例 2

IJJIIJJJ

出力例 2

0

入力例 3

JOIJOIJOIJOIJOI

出力例 3

1

入力例 4

OOJJJJJJJOOOOIIIII

出力例 4

4

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

1 から1000 までのどれかの整数が書かれたカードがたくさんある．アンナとブルーノはそれらのカードを用いて，次のようなゲームをする．

アンナはA 枚，ブルーノはB 枚のカードからなる山を持つ．アンナはA 枚のカードの中から任意の何枚か（0 枚でもよい）を捨てて新しい山を作る．ブルーノはB, 枚のカードからなる山の一番上から何枚か（0枚でもよい）と，一番下から何枚か（0 枚でもよい）を捨てて新しい山を作る．ただし，捨てる際に残ったカードの並び替えは行わない．このように作った2 つの山が一致していたら，一方の山に含まれるカードの枚数が2 人の得点になる．ただし，2 つの山が一致するとは，山に含まれるカードの枚数n が同じで，かつ上からi 番目(1 ≤ i ≤ n) に書かれたカードの整数が全て同じであることである．

例えば，アンナが5 枚のカードの山を持ち，書かれている整数は上から順に1,2,3,4,5 であり，ブルーノが4 枚のカードの山を持ち，書かれている整数が上から順に3,1,4,1 であったとする．このとき，アンナが2,3,5 のカードを捨て，ブルーノが一番上の3 と一番下の1 のカードを捨てると2 人の山が一致する．このとき，残った山の一方に含まれるカードの枚数は2 枚なので，2 人は得点2 を得る．

2 人の得点の最大値を求めたい．

課題

アンナとブルーノが持っているカードの山の情報が与えられたときに，2 人の得点の最大値を求めるプ
ログラムを作成せよ．

制限

1 ≤ A ≤ 5000

1 ≤ B ≤ 5000

カードに書かれている整数は1 以上1000 以下である．

入力

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

1 行目には，整数A, B が空白を区切りとして書かれている．

2 行目には，A 個の整数が空白を区切りとして書かれており，i 番目の整数(1 ≤ i ≤ A) はアンナの持っている山の上からi 番目のカードに書かれている整数を表す．

3 行目には，B 個の整数が空白を区切りとして書かれており，j 番目の整数(1 ≤ j ≤ B) はブルーノの持っている山の上からj 番目のカードに書かれている整数を表す．

出力

標準出力に，得点の最大値を表す整数を1 行で出力せよ．

採点基準

採点用データのうち，配点の10%分については，A ≤ 10, B ≤ 10 を満たす．

採点用データのうち，配点の50%分については，A ≤ 100, B ≤ 100 を満たす．

入出力例

入力例 1

5 4
1 2 3 4 5
3 1 4 1

出力例 1

2

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

入力例 2

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

出力例 2

3

この入出力例では，2 人が得点3 を得る方法が2 通り存在する．アンナが1, 2, 3 のカードを捨てブルーノが2, 3 のカードを捨てたとき, 2 人の山は上から順に4, 5, 4 となり, 2 人の得点は3 点となる. また, アンナが1, 5, 4 のカードを捨てブルーノが一番上の4 と5 のカードを捨てたとき, 2 人の山は上から順に4, 2, 3となり, 2 人の得点は3 点となる.

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

太郎くんは，JOI 神社で開かれる夏祭りに行くことにした．

JOI 神社に向かう道に沿って，N 個の夜店が開かれている．それぞれの夜店には，1 からN までの番号が順番についており，遊んだ時の楽しさと遊ぶのにかかる時間がそれぞれ整数で決まっている．夜店i で遊んだ時の楽しさはAi で，夜店i で遊ぶのにかかる時間はBi である．

また，夏祭りのイベントとして花火大会があり，時刻S に最も大きな花火が打ち上げられる．太郎くんはこの最も大きな花火を見たいと思っている．

太郎くんは夜店と花火の両方を楽しむために，夏祭りに到着する時刻0 から夏祭りが終わる時刻T までの予定を立てることにした．

太郎くんは夜店の中からk 個(1 ≤ k ≤ N) の夜店を選び，それぞれに対して訪れる時刻を整数で決める．同じ夜店を2 度選ぶことはできない．選ばれた夜店の番号を小さい順にy1, y2, ... yk とし，夜店yi を訪れる時刻をxyi とすると，太郎くんは夜店yi で時刻xyi から時刻xyi + Byi まで遊ぶ．

太郎くんは夜店の番号の小さい順に遊び，同時に2 つの夜店では遊べない．また，夜店と夜店の間の移
動にかかる時間は無視できる．

時刻T を超えると夏祭りが終わるので，夜店で遊ぶことはできない．また，夜店で遊んでいる間は花火を見ることはできない．ただし，時刻S がある夜店で遊び始める時刻や遊び終わる時刻であった場合は，太郎くんは花火を見ることができるものとする．

すなわち，予定は以下の条件を満たしていなければならない．

y1 < y2 < ... < yk

xy1, xy2, ... xyk は整数．

0 ≤ xy1 < xy1 + By1 ≤ xy2 < xy2 + By2 ≤ ... ≤ xyk < xyk + Byk ≤ T

xyi < S < xyi + Byi となるようなi は存在しない．

選ばれた夜店の楽しさAy1, Ay2, ... Ayk の合計をM とする．太郎くんはM ができるだけ大きくなるように予定を立てたいと思っている．

課題

N 個の夜店の情報と時刻S, T が与えられた時，M の最大値を求めるプログラムを作成せよ．

制限

1 ≤ N ≤ 3000 夜店の数

1 ≤ T ≤ 3000 夏祭りが終わる時刻

0 ≤ S ≤ T 最も大きな花火が打ち上げられる時刻

0 ≤ Ai ≤ 100000 (= 105) 夜店i で遊んだ時の楽しさ

1 ≤ Bi ≤ 3000 夜店i で遊ぶのにかかる時間

入力

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

入力の1 行目には整数N, T, S が空白を区切りとして書かれており，夜店の数がN 個，夏祭りが終わる時刻がT，最も大きな花火が打ち上げられる時刻がS であることを表す．

続くN 行には夜店の情報が書かれている．入力のi + 1 (1 ≤ i ≤ N) 行目には整数Ai, Bi が空白を区切りとして書かれており，夜店i で遊んだ時の楽しさがAi で，夜店i で遊ぶのにかかる時間がBi であることを表す．

また，すべての入力において，１つ以上の予定を立てられることが保証されている．

出力

標準出力に，M の最大値を表す整数を1 行で出力せよ．

採点基準

採点用データのうち，

配点の10%分については，N ≤ 20 を満たす．

配点の20%分については，S = 0 を満たす．

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

入出力例

入力例 1

5 20 14
8 9
2 4
7 13
6 3
5 8

出力例 1

16

この例において，

夜店1 を時刻0 に訪れ，

夜店2 を時刻9 に訪れ，

夜店4 を時刻14 に訪れるような予定を立てると，M を最も大きくすることができる．

このとき，M = 8 + 2 + 6 = 16 である．

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

JOI くんは板に釘を刺して遊んでいる．下図のように，JOI くんは一辺N 本の正三角形の形に釘を並べて刺した．上からa 行目(1 ≤ a ≤ N) にはa 本の釘が並んでいる．そのうち左からb 本目(1 ≤ b ≤ a) の釘を(a, b) で表す．

図1: 釘の並び方（N = 5 の場合）

釘を頂点とする正三角形が，「各辺が全体の正三角形の辺のいずれかと平行で，全体の正三角形と同じ向き」であるとき，この正三角形を「よい正三角形」と呼ぶ．すなわち，「よい正三角形」とは，3 本の釘(a, b), (a + x, b), (a + x, b + x) を頂点とする正三角形のことである（ただしa, b, x は1 ≤ a < N, 1 ≤ b ≤ a, 1 ≤ x ≤ N - a) をみたす）．

JOI くんは，輪ゴムを使って，「よい正三角形」の周りを囲うことにした．

図2: 輪ゴムによる「よい正三角形」の囲い方の例

課題

正三角形の一辺に並んでいる釘の本数N と，JOI くんが持っている輪ゴムの数M と，M 本の輪ゴムによる「よい正三角形」の囲い方が与えられたとき，1 本以上の輪ゴムで囲われた釘の本数を求めるプログラムを作成せよ．

制限

2 ≤ N ≤ 5000 一辺に並んでいる釘の本数

1 ≤ M ≤ 500000 (= 5 × 105) 輪ゴムの数

入力

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

1 行目には整数N, M が空白を区切りとして書かれている．N は正三角形の一辺に並んでいる釘の本数を，M はJOI くんの持っている輪ゴムの数をそれぞれ表す．

続くM 行は輪ゴムによる「よい正三角形」の囲い方の情報を表す．i + 1 行目(1 ≤ i ≤ M) には整数Ai, Bi, Xi (1 ≤ Ai < N, 1 ≤ Bi ≤ Ai, 1 ≤ Xi ≤ N - Ai) が空白を区切りとして書かれている．これは，i本目の輪ゴムは3 本の釘(Ai, Bi), (Ai + Xi, Bi), (Ai + Xi, Bi + Xi) を頂点とする「よい正三角形」を囲っていることを表す．

出力

標準出力に，1 本以上の輪ゴムに囲われている釘の本数を1 行で出力せよ．

採点基準

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

入出力例

入力例 1

5 2
2 2 1
2 1 3

出力例 1

12

この例は図2 のような「よい正三角形」の囲い方に対応している．この例において，(1, 1), (4, 4), (5, 5) 以外の12 本の釘が1 本以上の輪ゴムで囲われている．

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