alexjercan/bugnet huggingface dataset:
ビンゴ

問題

あるプログラミングコンテストでは,競技後の懇親会でビンゴゲームをする習わしがある．しかし,このビンゴゲームで使うビンゴカードは少々特殊で,以下の条件に従って作成される．

ビンゴカードは N 行 N 列のマス目に区切られており，各マス目には正整数が１つずつ書かれている．それらの整数は全て異なる．

マス目に書かれている整数は 1 以上 M 以下である．

ビンゴカードに書かれているN×N個の整数の合計は S である．

どの列を見たときも，上から下に向かって整数は昇順に並んでいる．

どのマス目の整数も，そのマス目より左の列のどの整数よりも大きい．

以下は， N = 5, M = 50, S = 685 のときのビンゴカードの例である．

懇親会のために上の条件を満たすビンゴカードをできるだけたくさん作りたい．ただし，同一のカードを2枚以上作ってはならない．作ることができるビンゴカードの枚数の最大値を 100000 で割った余りを出力するプログラムを作成せよ．

入力

入力は複数のデータセットからなる．各データセットは以下の形式で与えられる．

入力は1行からなり, その行にはビンゴカードのサイズ N (1≤N≤7), マス目に書かれている整数の上限 M (1≤M≤2000),ビンゴカードに書かれている整数の合計 S (1≤S≤3000) を表す3つの正整数が空白区切りで書かれている．ただし, 与えられるどの入力データにおいても，条件を満たすビンゴカードを1枚以上作ることができる．

N, M, S が 0 のとき入力の終了を示す. データセットの数は 5 を超えない．

出力

データセットごとに, 作ることができるビンゴカードの枚数の最大値を 100000 で割った余りを1行に出力せよ．

入出力例

入力例

3 9 45
3 100 50
5 50 685
0 0 0

出力例

1
7
74501

3つ目の入力例に対して，作ることができるビンゴカードの枚数の最大値は 642499974501 であるので， 100000 で割った余りの 74501 を出力する．

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

問題

整数 n (1 ≤ n) に対し, n + 1 個の I と n 個の O を I から始めて交互に並べてできる文字列を Pn とする.ここで I と O はそれぞれ英大文字のアイとオーである.

P1	IOI

P2	IOIOI

P3	IOIOIOI

.

.

.

Pn	IOIOIO ... OI (O が n 個)

図 1-1 本問で考える文字列 Pn

整数 n と, I と O のみからなる文字列 s が与えられた時, s の中に Pn が何ヶ所含まれているかを出力するプログラムを作成せよ.

例

n が 1, s が OOIOIOIOIIOII の場合, P1 は IOI であり,下図 1-2 に示した 4ヶ所に含まれている.よって,出力は 4 である.

OO

IOI

OIOIIOII

OOIO

IOI

OIIOII

OOIOIO

IOI

IOII

OOIOIOIOI

IOI

I

図 1-2 n が 1, s が OOIOIOIOIIOII の場合の例

n が 2, s が OOIOIOIOIIOII の場合, P2 は IOIOI であり,下図 1-3 に示した 2ヶ所に含まれている.よって,出力は 2 である.

OO

IOIOI

OIIOII

OOIO

IOIOI

IOII

図 1-3 n が 2, s が OOIOIOIOIIOII の場合の例

入力

入力は複数のデータセットからなる．各データセットは以下の形式で与えられる．

1 行目には整数 n (1 ≤ n ≤ 1000000) が書かれている.

2 行目には整数 m (1 ≤ m ≤ 1000000) が書かれている. m は s の文字数を表す.

3 行目には文字列 s が書かれている. s は I と O のみからなる.

全ての採点用データで, 2n + 1 ≤ m である.採点用データのうち, 配点の 50% 分については, n ≤ 100, m ≤ 10000 を満たす.

n が 0 のとき入力の終了を示す. データセットの数は 10 を超えない．

出力

データセットごとに,文字列 s に文字列 Pn が何ヶ所含まれるかを表す 1 つの整数を1 行に出力する. s に Pn が含まれていない場合は,整数として 0 を出力せよ.

入出力例

入力例

1
13
OOIOIOIOIIOII
2
13
OOIOIOIOIIOII
0

出力例

4
2

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

問題

JOI ピザでは,市の中心部を通る全長 d メートルの環状線の沿線上でピザの宅配販
売を行っている.

JOI ピザは,環状線上に n 個の店舗 S1, ... , Sn を持つ.本店は S1 である. S1 から Si まで,時計回りに環状線を移動したときの道のりを di メートルとおく. d2, ... , dn は 1 以上 d - 1 以下の整数である. d2 , ... , dn は全て異なる. ピザの注文を受けると, ピザが冷めないように, 宅配先までの移動距離がもっとも短い店舗でピザを焼き宅配する.

宅配先の位置は 0 以上 d - 1 以下の整数 k で表される.これは, 本店 S1 から宅配先までに時計回りで環状線を移動したときの道のりが k メートルであることを意味する. ピザの宅配は環状線に沿って行われ, それ以外の道を通ることは許されない. ただし, 環状線上は時計回りに移動しても反時計回りに移動してもよい.

例えば,店舗の位置と宅配先の位置が下図のようになっている場合 (この例は「入出力の例」の例 1 と対応している),

宅配先 1 にもっとも近い店舗は S2 なので, 店舗 S2 から宅配する.このとき, 店舗からの移動距離は 1 である.また, 宅配先 2 にもっとも近い店舗は S1 (本店) なので, 店舗 S1 (本店) から宅配する.このとき,店舗からの移動距離は 2 である.

環状線の全長 d, JOI ピザの店舗の個数 n, 注文の個数 m, 本店以外の位置を表す n - 1 個の整数 d2, ... , dn , 宅配先の場所を表す整数 k1, ... , km が与えられたとき, 各注文に対する宅配時の移動距離 (すなわち,最寄店舗から宅配先までの道のり) の全注文にわたる総和を求めるプログラムを作成せよ.

入力

入力は複数のデータセットからなる．各データセットは以下の形式で与えられる．

1 行目には環状線の全長を表す正整数 d (2 ≤ d ≤ 1000000000 = 109 ), 2 行目には店舗の個数を表す正整数 n (2 ≤ n ≤ 100000), 3 行目には注文の個数を表す正整数 m (1 ≤ m ≤ 10000) が書かれている. 4 行目以降の n - 1 行には本店以外の店舗の位置を表す整数 d2, d3, ... , dn (1 ≤ di ≤ d - 1) がこの順に書かれており, n + 3 行目以降の m 行には宅配先の場所を表す整数 k1, k2, ... , km (0 ≤ ki ≤ d - 1) がこの順に書かれている.

採点用データのうち,配点の 40% 分については, n ≤ 10000 を満たす. また,配点の 40% 分については, 求める移動距離の総和と d の値はともに 1000000 以下である. さらに,全ての採点用データにおいて, 求める移動距離の総和は 1000000000 = 109以下である.

d が 0 のとき入力の終了を示す. データセットの数は 10 を超えない．

出力

データセットごとに,宅配時の移動距離の総和を表す 1 つの整数を1 行に出力する.

入出力例

入力例

8
3
2
3
1
4
6
20
4
4
12
8
16
7
7
11
8
0

出力例

3
3

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

問題

あなたは J 君と一緒にあみだくじを使って遊んでいる.あみだくじは n 本の縦棒と
m 本の横棒からなる.縦棒には左から順に 1 から n の番号がついており,縦棒 i の下端には正整数 si が書かれている.

図 3-1 あみだくじの例(n = 4, m = 5, s1 = 20, s2 = 80, s3 = 100, s4 = 50)

縦棒 i の一番上から順に道をたどっていき到達した下端に書かれている整数が, 縦
棒 i を選んだ場合の得点である.例えば,図 3-1 では,縦棒 1 を選ぶと得点は 80 点
であり,縦棒 2 を選ぶと得点は 100 点である.

図 3-2 道のたどり方の例

J 君は縦棒 1 から縦棒 k までの連続した k 本を選ぶことにした.それら k 本の縦棒を選んだときの点数の合計が J 君の得点となる.ただし,あなたはあみだくじ内の
横棒を一本選び,その横棒をあみだくじから削除することができる. (削除しなくてもよい.) もし,あなたが横棒を一本削除した場合は,削除後のあみだくじにおいて,
縦棒 1 から縦棒 k までの連続した k 本の縦棒を選んだときの点数の合計が J 君の得点となる.

入力としてあみだくじの形と J 君の選ぶ縦棒の本数 k が与えられたとき,J 君の得
点の最小値を求めるプログラムを作成せよ.

入力

入力は複数のデータセットからなる．各データセットは以下の形式で与えられる．

1 行目には 4 つの整数 n, m, h, k が空白区切りで書かれている. n (2 ≤ n ≤ 1000) は縦棒の本数を, m (1 ≤ m ≤ 100000) は横棒の本数を, h (2 ≤ h ≤ 1000) は縦棒の長さを,k (1 ≤ k ≤ n) は J 君が選ぶ縦棒の本数を表す.

続く n 行には縦棒の下端に書かれている点数が書かれている. i + 1 行目 (1 ≤ i ≤ n)には正整数 si が書かれている. また, s1 + s2 + ... + sn ≤ 2000000000 = 2 × 109 を満たす.

続く m 行には横棒の位置が書かれている.横棒には 1 から m までの番号がついている.i + n + 1 行目 (1 ≤ i ≤ m) には, 横棒 i の位置を表す 2 つの整数 ai, bi (1 ≤ ai ≤ n - 1, 1 ≤ bi ≤ h - 1) が空白区切りで書かれており,横棒 i が縦棒 ai と縦棒 ai + 1 を結び, 横棒 i の上端からの距離が bi であることを表す. ただし,どの 2 つの横棒も端点を共有することはない.

採点用データのうち,配点の 20 % 分は横棒を削除しない場合に J 君の得点が最少となる.また,配点の 30 % 分は n ≤ 20, m ≤ 30, h ≤ 10 を満たし,配点の 60 % 分は m ≤ 1000 を満たす.

入力の終わりは 4つのゼロを含む行で示される. データセットの数は 10 を超えない．

出力

データセットごとに, J 君の得点の最小値を1 行に出力する.

入出力例

入力例

4 5 7 2
20
80
100
50
1 1
2 6
2 3
1 5
3 1
2 2 5 1
10
20
1 1
1 3
0 0 0 0

出力例

100
10

1つ目の例 は図 3-1 に対応し,あなたが横棒 4 (縦棒 1 と縦棒 2 を上端から距離 5 の場所で結ぶ横棒)を削除したとき,J 君の得点は最小になる.例 2 では,あなたが横棒を削除しない場合に J 君の得点が最小になる. (図3-3 を見よ.)

図 3-3

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

問題

JOI 町に住む太郎君は, ある日,健康増進のために散歩を日課にしようと思い立った.
太郎君の住む JOI 町には,図のように,東西方向に走る (H + 1) 本の道路と,南北
方向に走る (W + 1) 本の道路が碁盤目状に通っている.太郎君の家はもっとも北西の
交差点にあり,ここから散歩を開始する.

以降,北から a 番目,西から b 番目の交差点を (a, b) で表す.たとえば,太郎君の家がある交差点は (1, 1) である.

図: JOI 町の図 (H = 3, W = 4 の場合).図の上が北,左が西に対応する.

太郎君は,散歩のルートが日々違ったほうが面白いと考えたので,(1, 1) から (H, W) までの H × W 個の交差点に, 「東」または「南」の文字を書き,次のようなルールに従って毎日散歩を行うことにした.

文字の書かれた交差点にいる場合,その交差点に書かれている文字が「東」な
ら「南」に, 「南」なら「東」に文字を書き換え,もともと書かれていた文字の方角にある次の交差点まで進む.

もっとも東やもっとも南の道路に到達したら散歩を終了する.

この計画を考えた後,太郎君は,将来の散歩で自分がどのようなルートをたどる
ことになるのかが気になった.太郎君のために,太郎君の N 回目の散歩のルートを
予測するプログラムを作成せよ.

入力

入力は複数のデータセットからなる．各データセットは以下の形式で与えられる．

1 行目には,3 つの正整数が空白区切りで書かれている.これらは,問題文中の 3 つの数値 H, W, N の値である. H, W, N はそれぞれ, 1 ≤ H ≤ 1000, 1 ≤ W ≤ 1000, 1 ≤ N ≤ 10000000 = 107 をみたす. 2 行目から H + 1 行目には,それぞれ W 個の整数が空白区切りで書かれている.これらは,太郎君が最初に交差点に書いた文字の情報を表す. i + 1 行目の j 番目の整数が 0 なら,交差点 (i, j) に書かれた文字が「南」であることを, 1 なら, 交差点 (i, j) に書かれた文字が「東」であることを表す.

採点用データのうち,配点の 30%分については, H ≤ 100, W ≤ 100, N ≤ 1000 を満たす.

H, W, N がすべて 0 のとき入力の終了を示す. データセットの数は 10 を超えない．

出力

データセットごとに次の形式で出力する.

N 回目の散歩において太郎君が散歩を終了する交差点が (i, j) のとき,i と j をこの順に空白で区切って出力せよ.

入出力の例

入力例

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

出力例

1 5

上の例では,1 回目から 3 回目の散歩のルートは次の図のようになる.

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

問題

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

JOI 社には 2 つの事務所があり,それぞれ同じ大きさの正方形の部屋がマス目状に並んでできている.辺で接しているすべての部屋の間に,身分証による認証機能の付いた扉がある.JOI 社では様々なレベルの機密情報を扱っているため,部屋ごとに機密レベルという正の整数が設定されており,身分証の事務所ごとに定められた非負整数の認証レベルが,機密レベル以上でないとその部屋に入室することができない.各事務所の出入り口は唯一あるエレベーターホールのみで,エレベーターホールの部屋の機密レベルは最低の 1 である.その事務所についての認証レベルが 0 のときはエレベーターホールに入ることさえできない.

JOI 社では,社長の突発的な提案で,一般の人に社内を見学してもらうツアーを実施することになった.あなたは見学者に渡す身分証の認証レベルの組み合わせを決める必要がある.見学者は開けられる扉を見つけると必ず開けて中に入る (同じ部屋を何度も訪れることも可能である).そのため,必要以上に見学者の身分証の認証レベルを高くしたくはない.しかし,ツアーに魅力を持たせるため,ツアーではエレベーターホールの部屋を含め 2 つの事務所であわせて R 個以上の部屋を訪れることができるようにする必要がある.身分証の認証レベルを低くしすぎると,この条件を満たすことができないかもしれない.

JOI 社には事務所が 2 個あり,第 k 事務所 (k = 1, 2) の部屋は東西方向に Wk 個,南北方向に Hk 個並んでおり,全部で Wk × Hk 個ある. 西から i 番目,北から j 番目の部屋を (i, j)k で表すことにする.

Wk と Hk と R の値,エレベーターホールの位置 (Xk, Yk )k ,各部屋の機密レベルが与えられたとき,見学者が 2 つの事務所であわせて R 個以上の部屋を訪れることができるための,見学者の身分証の認証レベルの和の最小値を求めるプログラムを作成せよ.

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

入力

入力は複数のデータセットからなる．各データセットは以下の形式で与えられる．

1 行目には正整数 R (1 ≤ R ≤ 100000) が書かれている.2 行目以降には,2 つの事務所のデータが順に与えられる.

事務所のデータは,最初の行に正整数 Wk, Hk, Xk, Yk (1 ≤ Xk ≤ Wk ≤ 500, 1 ≤ Yk ≤ Hk ≤ 500), 続く Hk 行の j 行目の i 番目に, 部屋 (i, j)k の機密レベルを表す整数 Lk, i,j (1 ≤ Lk,i,j < 100000000 = 108) として与えられる.

また, R ≤ W1 × H1 + W2 × H2 を満たす.

採点用データのうち, 配点の 30% 分については, R, Wk, Hk ≤ 100 を満たす.

R が 0 のとき入力の終了を示す.　データセットの数は 10 を超えない．

出力

データセットごとに,求める身分証の認証レベルの和の最小値を 1 行に出力する.

入出力例

入力例

5
2 2 1 2
9 5
1 17
3 2 2 1
6 1 20
8 18 3
8
5 4 1 3
5 5 4 5 5
8 2 1 9 7
1 1 3 5 1
7 2 7 1 3
6 5 6 2
2 3 5 8 2 7
1 6 9 4 5 1
2 4 5 4 2 2
5 4 2 5 3 3
7 1 5 1 5 6
6
3 3 2 2
2 9 2
9 1 9
2 9 2
2 2 1 1
1 3
5 7
0

出力例

15
4
9

1つ目の例 では,見学者に渡す身分証の認証レベルを,事務所 1 の認証レベルが 9,事務所 2 の認証レベルが 6 となるように設定すると,見学者は 5 個の部屋 (事務所 1 の部屋 (1, 1)1 , (1, 2)1 , (2, 1)1 と,事務所 2 の部屋 (1, 1)2 , (2, 1)2 ) を訪れることができる.このとき,認証レベルの和は 15 となる.これが合計 5 個以上の部屋を訪れることができるための認証レベルの和の最小値である.

３つ目の例 では,見学者に渡す身分証の認証レベルを,事務所 1 の認証レベルが 9,事務所 2 の認証レベルが 0 となるように設定すると,見学者は 9 個の部屋 (事務所 1 の部屋 (1, 1)1, (1, 2)1, (1, 3)1, (2, 1)1, (2, 2)1, (2, 3)1, (3, 1)1, (3, 2)1, (3, 3)1 ) を訪れることができる.事務所 2 の部屋は 1 個も訪れることができない.(エレベーターホール (1, 1)2にすら入ることができない.) このとき,認証レベルの和は 9 となる.これが合計 6 個以上の部屋を訪れることができるための認証レベルの和の最小値である.

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

問題

太郎君は10冊の本を購入した．
後日，
レシートをもとに価格を調べようとしたが，
レシートには汚れがあり，
ある本の価格が読み取れなかった．
その本の価格を，
10冊の総額と他の9冊の価格から計算することにした．

価格が読み取れなかった本の価格を出力するプログラムを書け．
なお，本の価格はすべて正の整数である．
また，消費税を考慮する必要はない．

入力

入力は複数のデータセットからなる．各データセットは以下の形式で与えられる．

各データセットは10行からなり，1行に1つずつ正の整数が書かれている．
1行目の整数は10冊の総額を，
2行目から10行目の整数は読み取れた価格を表している．
なお，10冊の総額は10000以下である．

総額 が 0 のとき入力の終了を示す.データセットの数は 5 を超えない．

出力

データセットごとに，価格が読み取れなかった本の価格を1 行に出力する．

入出力例

入力例

9850
1050
800
420
380
600
820
2400
1800
980
0

出力例

600

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

問題

JOI さんは一人ですごろく遊びをしている．
このすごろくには一直線上に N 個のマスがあり，それぞれ移動の指示が書かれている．スタート地点は 1 マス目であり，ゴールはNマス目である．
JOI さんはゴールするまで次を繰り返す．

サイコロを振って出た目の数だけ現在のマスから進み，そのマスの指示に従う．
指示に従って移動した先のマスの指示には従わない．

ちょうど N マス目に止まる時だけでなく，移動先が N マス目を超える場合もゴールとなる．

すごろくの盤面と， M 回分のサイコロの出る目が与えられたとき，サイコロを何回振ったところでゴールするかを出力するプログラムを作成せよ．

入力

入力は複数のデータセットからなる．各データセットは以下の形式で与えられる．

各データセットは 1+N+M 行からなる．

入力の 1 行目には２つの整数 N,M （2 ≤ N ≤ 1000 ，1 ≤ M ≤ 1000 ）が空白を区切りとして書かれている．
N はすごろくのマス目の個数を， M は与えられるサイコロの目の個数を表す．

続く N 行には -999 以上 999 以下の整数が１つずつ書かれている．
1+i 行目 （ 1 ≤ i ≤ N ） の整数は，すごろくの i 番目のマスの指示を表す．
書かれている整数を X とする．
X=0 のときは「何もしない」を， X>0 のときは「 X マス進む」を，X<0 のときは「 |X| マス戻る」の指示を表す．ただし， |X| は X の絶対値を表す．

続く M 行には 1 以上 6 以下の整数が１つずつ書かれており， 1+N+j 行目 （ 1 ≤ j ≤ M ）の数は j 回目に出るサイコロの目を表す．

ただし， 2 行目と 1+N 行目の数は必ず 0 である．
1 マス目よりも前のマスに移動させる指示が書かれているマスはない．
また，どの採点用入力データにおいてもサイコロを振る回数が M 以下でゴールできる．

N, M がともに 0 のとき入力の終了を示す.データセットの数は 5 を超えない．

出力

データセットごとに，サイコロを何回振ったところでゴールするかを表す整数を 1 行に出力する．

入出力例

入力例

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

出力例

5
6

次の図は1つ目の入力例を表す．

次の図は2つ目の入力例を表す．

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

問題

あなたはクリスマスパーティーに学校内の自分の友達と，自分の友達の友達を招待することにした．
あなたの通う学校の生徒数は n 人であり，それぞれの生徒には 1 から n までの番号が割り振られている．
あなたの番号は 1 である．
あなたの手元には，誰と誰が友達であるかを記したリストがある．
このリストをもとに，
あなたがクリスマスパーティーに招待する生徒数を求めるプログラムを作成せよ．

入力

入力は複数のデータセットからなる．各データセットは以下の形式で与えられる．

データセットの1 行目には学校の生徒数 n （2 ≤ n ≤ 500）が，
2 行目にはリストの長さ m （1 ≤ m ≤ 10000）が書かれている．
入力は全部で 2+m 行からなる．2+i 行目（1 ≤ i ≤ m）には 2 つの整数 ai と bi （1 ≤ ai < bi ≤ n）が空白区切りで書かれており，番号 ai と番号 bi の生徒が友達同士であることを表す．
3 行目から 2+m 行目には同じ友達関係を表す行が重複して現れることはない．

n, m がともに 0 のとき入力の終了を示す.データセットの数は 5 を超えない．

出力

データセットごとに，あなたがクリスマスパーティーに招待する生徒数を1 行に出力する．

入出力例

入力例

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

出力例

3
0

1つ目の入力例 において，あなたの友達は番号 2 と番号 3 の生徒の 2 人である．
また，番号 3 と番号 4 の生徒は友達同士であるので，
番号 4 の生徒はあなたの友達の友達である．
番号 5 と番号 6 の生徒はあなたの友達でもなく，あなたの友達の友達でもない．
したがって，あなたは番号 2,3,4 の 3 人の生徒をクリスマスパーティーに招待する．

2つ目の入力例 において，あなたには友達はいない．
したがって，あなたがクリスマスパーティーに招待する生徒数は 0 人である．

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

問題

花子さんは n 枚（4 ≤ n ≤ 10）のカードを並べて遊んでいる．
それぞれのカードには 1 以上 99 以下の整数が 1 つずつ書かれている．
花子さんは，これらのカードの中から k 枚（2 ≤ k ≤ 4）を選び，
横一列に並べて整数を作ることにした．
花子さんは全部で何種類の整数を作ることができるだろうか．

例えば，1, 2, 3, 13, 21 の 5 枚のカードが与えられ，そこから 3 枚を選び整数を作ることを考える．
2, 1, 13 をこの順に並べると，整数 2113 を作ることができる．
また，21, 1, 3 をこの順に並べても，同じ整数 2113 を作ることができる．
このように，異なるカードの組み合わせから同じ整数が作られることもある．

n 枚のカードに書かれた整数が与えられたとき，
その中から k 枚を選び，横一列に並べることで作ることができる整数の個数を求めるプログラムを作成せよ．

入力

入力は複数のデータセットからなる．各データセットは以下の形式で与えられる．

各データセットは 2+n 行からなる．
1 行目にはカードの枚数 n （4 ≤ n ≤ 10）が，
2 行目にはカードを選ぶ枚数 k （2 ≤ k ≤ 4）が書かれている．
2+i 行目（1 ≤ i ≤ n）には i 枚目のカードに書かれている 1 以上 99 以下の整数が書かれている．

n, k がともに 0 のとき入力の終了を示す.データセットの数は 5 を超えない．

出力

データセットごとに，花子さんが作ることができる整数の個数を1 行に出力する．

入出力例

入力例

4
2
1
2
12
1
6
3
72
2
12
7
2
1
0
0

出力例

7
68

1つ目の入力例 において，
1, 2, 12, 1 の 4 枚のカードの中から 2 枚を選び，横一列に並べて作ることができる整数は，
11, 12, 21, 112, 121, 122, 212 の 7 個である．

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

問題

JOIさんが住むカナダのある都市は，南北方向にまっすぐに伸びる w 本の道路と，東西方向にまっすぐに伸びる h 本の道路により，碁盤の目の形に区分けされている．

南北方向の w 本の道路には，西から順に 1, 2, ... , w の番号が付けられている．また，東西方向の h 本の道路には，南から順に 1, 2, ... , h の番号が付けられている．西から i 番目の南北方向の道路と，南から j 番目の東西方向の道路が交わる交差点を (i, j) で表す．

JOIさんは，交差点 (1, 1) の近くに住んでおり，交差点 (w, h) の近くの会社に車で通っている．車は道路に沿ってのみ移動することができる．JOIさんは，通勤時間を短くするため，東または北にのみ向かって移動して通勤している．また，この都市では，交通事故を減らすために，次のような交通規則が設けられている：

交差点を曲がった車は，その直後の交差点で曲がることは出来ない．

すなわち，交差点で曲がったあとに1ブロックだけ進んで再び曲がることは許されない．このとき，JOIさんの通勤経路は何通り考えられるだろうか．

w と h が与えられたとき，JOIさんの通勤経路の個数を 100000 で割った余りを出力するプログラムを作成せよ．

入力

入力は複数のデータセットからなる．各データセットは1行からなり，空白を区切りとして2個の整数 w, h (2 ≤ w ≤ 100， 2 ≤ h ≤ 100) が書かれている．w は南北方向の道路の本数， h は東西方向の道路の本数を表す．

w, h がともに 0 のとき入力の終了を示す.データセットの数は 5 を超えない．

出力

データセットごとに，JOIさんの通勤経路の個数を 100000 で割った余りを1行に出力する．

入出力例

入力例

3 4
15 15
0 0

出力例

5
43688

1つ目の入力例におけるJOIさんの通勤経路 ( 5 通り)

1つ目の入力例において，JOIさんの通勤経路は図のように 5 通り考えられる．したがって，5を出力する．

2つ目の入力例において，JOIさんの通勤経路は 143688 通り考えられる．したがって，143688 を 100000 で割った余りである 43688 を出力する．

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

問題

今年も JOI 町にサンタクロースが空からやってきた．JOI 町にある全ての家には子供がいるので，このサンタクロースは JOI 町の全ての家にプレゼントを配ってまわらなければならない．しかし，今年は連れているトナカイが少々方向音痴であり，また建物の上以外に降りることができないため，全ての家にプレゼントを配るためには少々道順を工夫しなければならないようだ．

JOI 町は東西南北に区画整理されており，各区画は家，教会，空き地のいずれかである．JOI 町には 1 つだけ教会がある．次のルールに従い，サンタクロースとトナカイは教会から出発し，全ての家に 1 回ずつプレゼントを配った後，教会に戻る．

今年のトナカイは少々方向音痴であるため，東西南北いずれかの方向にまっすぐ飛ぶことしかできず，空中では方向転換できない．

まだプレゼントを配っていない家の上は自由に通過できる．まだプレゼントを配っていない家には降りることができる．家に降りた時は必ずプレゼントを配り，その後は東西南北いずれかの方向に飛び立つ．

JOI 町の家では，クリスマスの夜はサンタクロースが来るまでは暖炉をつけずに過ごしているが，サンタクロースが飛び立った後は暖炉をつける．暖炉をつけると煙突から煙が出るので，プレゼントを配り終えた家の上を通過することはできない．

教会の上は自由に通過することができる．しかし，教会では礼拝が行われているので，全てのプレゼントを配り終えるまで教会に降りることはできない．

空き地の上は自由に通過することができるが，空き地に降りることはできない．

入力として町の構造が与えられたとき，サンタクロースとトナカイがプレゼントを配る道順が何通りあるかを求めるプログラムを作成せよ．

入力

入力は複数のデータセットからなる．各データセットは以下の形式で与えられる．

各データセットは n+1 行ある．
1 行目には整数 m (1 ≤ m ≤ 10) と整数 n (1 ≤ n ≤ 10) が空白で区切られて書かれている．
2 行目から n+1 行目までの各行には，0，1，2 のいずれかが，
空白で区切られて m 個書かれており，各々が各区画の状態を表している．
北から i 番目，西から j 番目の区画を (i,j) と記述することにすると
(1 ≤ i ≤ n, 1 ≤ j ≤ m)，
第 i+1 行目の j 番目の値は，
区画 (i,j) が空き地である場合は 0 となり，
家である場合は 1 となり，
教会である場合は 2 となる．
教会の個数は 1 であり，家の個数は 1 以上 23 以下である．
ただし，採点用入力データでは配る道順が 2000000 通りをこえることはない．

m, n がともに 0 のとき入力の終了を示す.データセットの数は 5 を超えない．

出力

データセットごとに,プレゼントを配る道順が何通りあるかを表す整数を1 行に出力する．

入出力例

入力例

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

出力例

2
6

図: 2つ目の入力例 に対する 6 通り全ての道順
（数字は配る順序を表す）

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

問題

あなたは JOI 街道を旅する旅人である.JOI 街道は東西にまっすぐに延びた道路で,JOI 街道上には n 個の宿場町がある.宿場町には西から東の順に 1 から n までの番号が付けられている.JOI 街道上の最も西の宿場町が宿場町 1 であり,最も東の宿場町が宿場町 n である.

あなたは,宿場町 1 から出発して m 日間の旅に出ることになった.あなたの旅程は数列 a1 , a2 , . . . , am に従い,次のように決められている.ai は i 日目の移動方法を表す 0 ではない整数である.i 日目にあなたが出発する宿場町を宿場町 k とおくと,i 日目にあなたは宿場町 k から宿場町 k + ai までまっすぐに移動することを意味する.

宿場町の個数 n,旅の日数 m,宿場町間の距離の情報と,移動方法を表す数列a1 , a2 , . . . , am が与えられたとき,m 日間の旅におけるあなたの移動距離の合計を100000 = 105 で割った余りを求めるプログラムを作成せよ.

入出力の例に対応する図

入力

1 行目には整数 n, m が空白区切りで書かれている.n (2 ≤ n ≤ 100000 = 105 ) はJOI 街道上の宿場町の個数を,m (1 ≤ m ≤ 100000 = 105 ) は旅の日数を表す.

続く n − 1 行は JOI 街道上の宿場町間の距離を表す.i + 1 行目 (1 ≤ i ≤ n − 1) に
は宿場町 i と宿場町 i + 1 の距離を表す正整数 si (1 ≤ si ≤ 100) が書かれている.

続く m 行には m 日間の移動方法を表す数列が書かれている.i + n 行目 (1 ≤ i ≤ m)
には i 日目のあなたの移動方法を表す 0 ではない整数 ai が書かれている.

採点用データにおいて,宿場町 1 より西に移動することや,宿場町 n より東に移
動することはない.

採点用データのうち,配点の 50% 分については,n ≤ 100 かつ m ≤ 100 を満たす.

出力

出力 は, m 日間の旅におけるあなたの移動距離の合計を 100000 = 105 で割った余りを含む 1 行からなる.

入出力例

入力例 1

7 5
2
1
1
3
2
1
2
-1
3
2
-3

出力例 1

18

1 日目に,あなたは宿場町 1 から宿場町 3 まで移動する.2 日目に,あなたは宿場
町 3 から宿場町 2 まで移動する.そして,3 日目に宿場町 2 から宿場町 5 まで移動
し,4 日目に宿場町 5 から宿場町 7 まで移動し,5 日目に宿場町 7 から宿場町 4 ま
で移動する.5 日間の旅におけるあなたの移動距離の合計は 18 である.

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

問題

長さ N ミリメートルの棒状のお菓子が 1 本ある(ここで N は偶数). 2 人の JOI
関係者が,このお菓子を複数本に切断して,合計 N/2 ミリメートルずつに分けること
にした.

理由は不明であるが,このお菓子は場所によって切断のしやすさが異なっている.
2 人は,お菓子を左から 1 ミリメートルごとに調べ,各場所で切断に何秒かかるか
を割り出した.2 人がお菓子を分けるための切断にかかる秒数の最小値を求めるプ
ログラムを作成せよ.

入力

入力の 1 行目には,棒の長さ N(2 ≤ N ≤ 10000 ,ただし N は偶数) が書かれてい
る.入力の i + 1 行目 (1 ≤ i ≤ N − 1) には,左端から i ミリメートル目の場所の切
断にかかる秒数を表す整数 ti (1 ≤ ti ≤ 10000) が書かれている.切断可能な場所が
N − 1 箇所であることに注意せよ.

採点用データのうち,配点の 5% 分については,高々 2 カ所を切断することで最
小値を実現でき,10% 分については,高々 3 カ所を切断することで最小値を実現で
きる.配点の 20% 分については,N ≤ 20 である.

出力

出力は2 人がお菓子を分るための切断にかかる秒数の最小値を含む 1 行からなる.

入出力例

入力例 1

6
1
8
12
6
2

出力例 1

7

この場合,左端から 1 ミリメートルと 4 ミリメートルの場所で切断するとかかる
秒数が最小となる.かかる秒数は 1 秒と 6 秒で,合計 7 秒である.

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

問題

カナダに住む JOI 君の家の軒下には,立派なつららが出来ている.せっかくなので,JOI 君はつららについて調べてみることにした.

JOI 君の家の軒下には N 本(2 ≤ N ≤ 100000 = 105 )のつららが出来ている.これらのつららは一直線上に並んでおり,軒下の左端から i cm(1 ≤ i ≤ N )の位置に i 本目のつららが出来ている.i 本目のつららの長さは最初 ai cm(ai は 1 以上の整数)である.これらのつららは,次のような規則によって伸びていく:

i 本目のつららは,i − 1 本目のつららと i + 1 本目のつららの両方よりも長い場合にのみ,1 時間につき 1 cm ずつ伸びる(ただし,両端のつららに関しては片方の隣のみ考える.すなわち,1 本目のつららは 2 本目のつららより長ければ伸び,N 本目のつららは N − 1 本目のつららより長ければ伸びる).

どのつららも,L cm(2 ≤ L ≤ 50000)に達した瞬間に,根元から折れる(折れたつららは,以後長さ 0 cm のつららとみなす)
.

最初の段階で,隣り合う 2 本のつららの長さはすべて異なっている.このとき,十分な時間が経過すれば,N 本すべてのつららが折れて長さ 0 cm となる.JOI 君は,つららがこのような状態になるまでの時間を知りたくなった.

N 本のつららの最初の長さとつららの限界の長さ L が与えられると,すべてのつららが折れるまでにかかる時間を求めるプログラムを作成せよ.

入力

入力の 1 行目には,つららの本数を表す整数 N とつららの限界の長さを表す整数
L が,空白を区切りとしてこの順に書かれている.入力の i + 1 行目 (1 ≤ i ≤ N) に
は, i 本目のつららの最初の長さを表す整数 ai (1 ≤ ai < L) が書かれている.

採点用データのうち,配点の 30% 分については,N ≤
500 かつ L ≤
1000 を満
たす.

出力

出力 は,すべてのつららが折れるまでにかかる時間を表す 1 つの整数のみを含む 1 行からなる.

入出力例

入力例 1

4 6
4
2
3
5

出力例 1

8

例 1 の場合,1, 2, 3, 4 本目のつららは,それぞれ 2, 8, 4, 1 時間後に折れる.した
がって,すべてのつららが折れるまでにかかる時間は 8 時間であるので,8 を出力
する.

入力例 2

6 10
3
4
1
9
5
1

出力例 2

15

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

問題

JOI 市では,とある大規模な博覧会を開催することになった.

今回の博覧会には 2 つのテーマがあり,JOI 市にある N 個の展示施設でそれぞれ,
2 つのテーマのうちどちらか一方に沿った展示を行う予定である.

施設の位置は平面座標 (x, y) で表される.位置 (x, y) にある施設から (x′ , y′) にある施設まで移動するためには, |x − x′| + |y − y′| だけの時間がかかる (整数 a に対して,
|a| で a の絶対値を表す).同一テーマ内での統一感を出すため,および一方のテーマのみに関心を持つ人に不便を感じさせないために,同一のテーマで展示を行っている 2 つの施設の間の移動時間がなるべく短くなるようにテーマを割りふりたい.すべての展示施設に同じテーマを割りふらない限り, どのようにテーマを割りふってもよい.

同一のテーマで展示を行っている 2 つの施設の間の移動時間の最大値を M とする. N 個の展示施設の位置が与えられたとき, M の最小値を求めるプログラムを作成せよ.

入力

入力の 1 行目には, 施設の個数 N(3 ≤ N ≤ 100000 = 105 ) が書かれている.入力のi + 1 行目 (1 ≤ i ≤ N) には,各施設の座標を表す 2 つの整数 xi, yi (|xi| ≤ 100000 = 105, |yi| ≤ 100000 = 105 ) が空白区切りで書かれている.これは,i 個目の施設の座標が(xi , yi) であることを表す. 同一の座標に 2 つ以上の施設が存在することはない.

採点用データのうち,配点の 40% 分については, N ≤ 2000 である.

出力

出力は 1 行のみからなる.同一のテーマで展示を行っている 2 つの施設間の移動時間の最大値 M の最小値を出力せよ.

入出力例

入力例 1

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

出力例 1

3

この場合,たとえば座標 (0, 0), (1, 0), (0, 1) にある施設に一方のテーマを,(−1, −2),
(−1, 1) にある施設にもう一方のテーマを割りふると,同一のテーマで展示を行う 2
つの施設間の移動時間はすべて 3 以下になる.移動時間をすべて 2 以下にすることはできないので,3 を出力する.

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

問題

あなたはあるダンジョンの地下 N 階にある財宝を手に入れたいと思っている.最初,あなたは地下 1 階におり,あなたの体力は H(H は正整数) である.下の階に降りるときに,体力が消費される.あらかじめ各階における下の階に降りるときに消費される体力が分かっている.一方,各階には 1 つの回復の泉があり,泉を 1 回使うごとに回復できる体力がそれぞれ定まっている.体力が 0 以下になるとあなたは死んでしまう.また,体力が H よりも高くなることはない.回復の泉は何回でも使うことができるが,回復には時間がかかるので,あなたは泉の使用回数をできるだけ少なくしたいと考えている.

N ,H ,各階の下の階に降りるときに消費される体力,そして各階で回復の泉を 1 回使用したときに回復する体力が与えられたとき,体力を 0 以下にすることなく地下 N 階まで到達するために必要な泉の使用回数の最小値を求めるプログラムを作成せよ.

また,一度下の階に降りると,財宝を手に入れるまで上の階に戻ることはできない.

入力

入力は N 行からなる.
入力の 1 行目には 2 つの整数 N, H(2 ≤ N ≤ 100000 = 105, 1 ≤
H ≤ 10000000 = 107 ) が空白を区切りとして書かれている.N は地下 N 階に財宝があるということを表し,H は初期体力 ( ダンジョンの地下 1 階に到着した段階の体力 ) であり,かつ体力の最大値である ( 回復によって体力が H より大きくなることはない ) .

続く N − 1 行には,2 つの整数が空白を区切りとして書かれている.1 + i 行目(1 ≤ i ≤ N − 1) の整数 di , hi について, di は地下 i 階から地下 i + 1 階に降りる際に消費される体力を,hi は地下 i 階で泉を 1 回使用したときに回復する体力を表す(0 ≤ di < H, 1 ≤ hi < H).

どの採点用データにおいても,地下 N 階にたどり着く方法が存在する.採点用データのうち,配点の 10%分については,N ≤
1000 かつ H ≤
1000 を満たす.配点の30%分については,N ≤1000 を満たす.配点の 50%分については,泉の使用回数の最小値が 106 を超えない.

出力

出力は,体力を 0 以下にすることなく地下 N 階に到達するために必要な,泉の使用回数の最小値を含む 1 行からなる.

注意

この問題では,扱う整数の範囲が 32bit に収まらない可能性があることに注意せよ.

入出力例

入力例 1

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

出力例 1

10

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

問題

太郎君は 3 カ所の店を訪ねることを日課にしている．家を出発し，決まった順番で 3 カ所の店を回った後，家に帰る．ときどき，ストップウォッチを使って，各区間を移動するのに何秒かかったかを計り，その秒数を記録する．

ある日の計測結果が与えられたとき，この日の移動時間の合計が何分何秒かを求めるプログラムを作成せよ．

入力

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

1 行目の整数は家から 1 つ目の店までの移動時間を表す秒数である．

2 行目の整数は 1 つ目の店から 2 つ目の店までの移動時間を表す秒数である．

3 行目の整数は 2 つ目の店から 3 つ目の店までの移動時間を表す秒数である．

4 行目の整数は 3 つ目の店から家までの移動時間を表す秒数である．ただし，与えられる入力データにおいては合計移動時間は 1 分 0 秒以上で 59 分 59 秒以下であることが保証されている．

出力

出力は 2 行からなる．x 分 y 秒 (1 ≤ x ≤ 59 , 0 ≤ y ≤ 59 )のとき， 1行目に x を，2行目に y を出力せよ．

入出力例

入力例 1

31
34
7
151

出力例 1

3
43

入力例 2

316
430
643
1253

出力例 2

44
2

入力例 3

5
10
15
30

出力例 3

1
0

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

問題

あなたは N 個の指輪を持っている．どの指輪にも，アルファベットの大文字 10 文字からなる文字列が刻印されている．指輪には文字列の最初と最後がつながった形で文字が刻印されている．指輪に刻印された文字列を逆順に読む心配はない．

探したい文字列が与えられたとき，その文字列を含む指輪が何個あるかを求めるプログラムを作成せよ．

入力

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

1 行目には，1 文字以上 10 文字以下のアルファベットの大文字からなる探したい文字列が書かれている．

2 行目には，指輪の個数 N ( 1 ≦ N ≦ 100 )が書かれている．

2+i 行目(1 ≤ i ≤ N )には， i 個目の指輪に刻印されている 10 文字からなる文字列が書かれている．

出力

探したい文字列を含む指輪の個数を表す整数を 1 行で出力せよ．

入出力例

入力例 1

ABCD
3
ABCDXXXXXX
YYYYABCDXX
DCBAZZZZZZ

出力例 1

2

入力例 2

XYZ
1
ZAAAAAAAXY

出力例 2

1

入力例 2 の指輪には「XYZ」という文字列が 1 つ含まれている．これは、指輪の文字列の最初と最後がつながっているためである．

入力例 3

PQR
3
PQRAAAAPQR
BBPQRBBBBB
CCCCCCCCCC

出力例 3

2

入力例 3 の 1 個目の指輪には「PQR」という文字列が 2 つ含まれており， 2 個目の指輪には「PQR」という文字列が 1 個含まれており， 3 個目の指輪には「PQR」という文字列が含まれていない．そのため「PQR」という文字列が含まれている指輪の数は 2 個となる．

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

問題

JOI 高校では， 1 × 1 の正方形のタイルを使って N × N の正方形の壁画を作り，文化祭で展示することになった．タイルの色は，赤，青，黄の 3 種類である．壁画のデザインは次の通りである．まず，最も外側の周に赤のタイルを貼り，その内側の周に青のタイルを貼る．さらにその内側の周に黄色のタイルを貼る．これを N × N の正方形が埋め尽くされるまで繰り返す．用いるタイルの色は，一番外側の周から順番に赤，青，黄，赤，青，黄，…である．

文化祭が近づいてきたある日，壁画のうち K 枚のタイルがはがれていることが判明した．そこで，新しいタイルを購入して，はがれた箇所に新しいタイルを貼ることにした．

入力として壁画の一辺の長さ N と，はがれたタイルの枚数 K， K 枚のはがれたタイルの位置が与えられたとき，はがれたタイルの色を求めるプログラムを作成せよ．

例えば，N = 11 の場合，11 × 11 の壁画のデザインは下図の通りである．

また，N = 16 の場合，16 × 16 の壁画のデザインは下図の通りである．

入力

入力は全部で 2+K 行からなる． 1 行目には，壁画の一辺の長さ N （1 ≤ N ≤ 1000000000 = 109）が， 2 行目には，はがれたタイルの枚数 K （1 ≤ K ≤ 1000）が書かれている． 2+i 行目（1 ≤ i ≤ K）には，2 つの整数 ai と bi （1 ≤ ai ≤ N, 1 ≤ bi ≤ N）が空白区切りで書かれており， i 枚目のはがれたタイルが，左から ai 列目，上から bi 行目のタイルであることを表す．

入力の 3 行目から 2+K 行目には同じタイルを表す行が重複して現れることはない．また，与えられる入力データ 40% では， N ≤ 1000 をみたしている．

出力

出力は K 行からなる．各行は 1 つの整数からなり， i 行目（1 ≤ i ≤K）の整数は，i 枚目のはがれたタイルが赤のときは 1 を，青のときは 2 を，黄色のときは 3 を表す．

入出力例

入力例 1

11
4
5 2
9 7
4 4
3 9

出力例 1

2
3
1
3

入力例 2

16
7
3 7
5 2
11 6
15 2
9 7
8 12
15 16

出力例 2

3
2
3
2
1
2
1

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

問題

JOI君は小学 1 年生である．JOI君は教わったばかりの足し算，引き算がとても好きで，数字が並んでいるのを見ると最後の 2 つの数字の間に「=」を入れ，残りの数字の間に必ず「+」または「-」を入れて等式を作って遊んでいる．例えば「8 3 2 4 8 7 2 4 0 8 8」から，等式「8+3-2-4+8-7-2-4-0+8=8」を作ることができる．

JOI 君は等式を作った後，それが正しい等式になっているかを計算して確かめる．ただし，JOI君はまだ負の数は知らないし，20 を超える数の計算はできない．したがって，正しい等式のうち左辺を左から計算したとき計算の途中で現れる数が全て 0 以上 20 以下の等式だけがJOI君が確かめられる正しい等式である．例えば，「8+3-2-4-8-7+2+4+0+8=8」は 正しい等式だが，途中に現れる 8+3-2-4-8 が負の数なのでJOI君はこの等式が正しいかどうか確かめることができない．

入力として数字の列が与えられたとき，JOI君が作り，確かめることができる正しい等式の個数を求めるプログラムを作成せよ．

入力

入力ファイルは 2 行からなる．1 行目には並んでいる数字の個数を表す整数 N （3 ≤ N ≤ 100）が書かれている．2 行目には 0 以上 9 以下の整数が N 個，空白を区切りとして書かれている．

与えられる入力データの 60% では，JOI君が作り，確かめることができる正しい等式の個数は 231-1 を超えない．また，与えられる入力データの全てにおいて，JOI君が作り，確かめることができる正しい等式の個数は 263-1 を超えない．

出力

JOI君が作り，確かめることができる正しい等式の個数を表す整数を 1 行で出力せよ．

入出力例

入力例 1

11
8 3 2 4 8 7 2 4 0 8 8

出力例 1

10

入力例 1 において，JOI君は 10 個の正しい等式

8+3-2-4+8-7-2-4-0+8=8
8+3-2-4+8-7-2-4+0+8=8
8+3+2+4-8-7+2-4-0+8=8
8+3+2+4-8-7+2-4+0+8=8
8+3-2-4+8-7+2+4-0-8=8
8+3-2-4+8-7+2+4+0-8=8
8-3+2+4-8+7+2+4-0-8=8
8-3+2+4-8+7+2+4+0-8=8
8-3+2-4+8+7+2-4-0-8=8
8-3+2-4+8+7+2-4+0-8=8

を作り，確かめることができるので 10 を出力する．

入力例 2

40
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1

出力例 2

7069052760

入力例 2 において，答えが 32 bit符号付き整数の範囲に収まらないことに注意せよ．

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