alexjercan/bugnet huggingface dataset:
E: 往復文字列 / Round-trip String

物語

ここは全人類が競技プログラマーになった世界。この世界ではみなさんの生きる現代では考えられないような習慣が多数存在する。その中の一つに、両親、特に母親に感謝の証を表す時は、文字列を送るという風習がある。送る文字列としてどのような文字列がふさわしいかは地域差があるが、北の大地北海道では、できるだけシンプルな文字列が贈り物としてふさわしい。また、送られた側の母親は子供に返礼として、送られた文字列がどれほど美しいかを答える必要がある。

さて、今あなたは1児の母親から相談を受けている。その母親は子供から素晴らしそうな文字列をもらったのだが、どれくらい素晴らしいのかうまく測れないでいるそうだ。北海道の風習では、母親に送る文字列 T はある文字列 S を往復させて作ることになっている。この時、 S ができるだけ短い文字列ならばより素晴らしい文字列 T である。母親は子供の頑張りに報いるため、T を作ることができる文字列の中で、最短の文字列を見つけてあげたいが、それはなかなか難しいとのことだ。あなたのプログラミング能力を駆使して母親の悩みを解決して欲しい。

問題

長さが 2 以上の文字列 S から、以下のルールに従って長さ N の文字列 T を生成する。ここで、 S の文字列長を K とし、T[i] は文字列 T の i 番目の文字を表す。ここで、 T の先頭文字は 0 番目の文字とする。

T[i] = S[K - 1 - | (i $\bmod$ (2K - 2)) - K + 1 |]

T のみが与えられたとき、 T を生成する文字列は複数考えられる。 それらの文字列の中で最小の文字列長 K_{min} を出力せよ。

入力形式

N
T

制約

2 \leq N = |T| \leq 1,000,000

文字列は英小文字のみからなる

出力形式

T を生成する長さ最小の文字列 S の長さ K_{min} を出力してください。

入力例1

6
tabata

出力例1

3

tabata 、tabat 、tab の 3 つが考えられますが、 tab が長さ最小なので、答えは 3 です。

入力例2

4
hcpc

出力例2

3

入力例3

60
aaaaaabbbbbbbbbbbaaaaaaaaaaabbbbbbbbbbbaaaaaaaaaaabbbbbbbbbb

出力例3

12
F: 赤黒そーるじぇむ / Red-Black Soul Gem

問題

ほむちゃんは、そーるじぇむを赤色や黒色に変化させたり、 異なる 2 つのそーるじぇむ間を魔法の糸で接続したりする不思議な力を持っています。
この力を使うことで、ほむちゃんは、そーるじぇむによる魔方陣を作ることができます。

ほむちゃんは、 1 から N で番号付けられた N 個のそーるじぇむがあるとき、以下の条件が成り立つ異なる魔方陣がいくつあるのか気になりました。

どの 2 つのそーるじぇむ間も、高々 1 回しか接続されない。

すべてのそーるじぇむの色が、赤色か黒色のいずれかになっている。

任意のそーるじぇむに対して、自身の色と異なる色のそーるじぇむのうち、少なくとも 1 つと接続されている。

このとき、魔方陣はそーるじぇむを頂点とし、魔法の糸を辺とするグラフとみなすことができます。
ここで、そのグラフは 連結でなくてもよい ことに注意してください。

ほむちゃんは計算が苦手なので、代わりにあなたが高速なプログラムを作って異なる魔方陣の数を計算してあげましょう。
しかし、その数は非常に多いことが予想されるので、ある素数 M で割った余りを求めることにします。

なお、ある魔方陣 G と H が異なるとは、あるそーるじぇむ v について G と H でその色が異なる、もしくはあるそーるじぇむの組 u, v が G と H の一方でのみ接続されていることを指します。

入力形式

N M

制約

2 \leq N \leq 2,000

10^8 \leq M \leq 10^9 + 7

M は素数であることが保証される

出力形式

条件を満たすグラフの個数を M で割った余りを整数で 1 行に出力してください。

入力例1

3 310779401

出力例1

12

例えば、以下のような魔方陣は条件を満たします。

入力例2

7 566666561

出力例2

98638848

例えば、以下のような魔方陣は条件を満たします。

入力例3

1010 1000000007

出力例3

862232855

M で割った余りを出力することに注意してください。
G: Donuts Orientation

物語

ほむちゃんの最近のマイブームはお菓子作りだ。たくさんお菓子を作っては、それを友達におすそ分けしているらしい。そんなほむちゃんは今回、ドーナツづくりに挑戦するようだ。

ドーナツづくりに大切なことはいくつもある。生地や味付けはもちろん、かわいい見た目にするためのデコレーションも外せない。試行錯誤を繰り返しているうちに、ほむちゃんのデコレーションへのこだわりに熱がこもってきたようだ。こだわりぬいたドーナツを多くの人に食べてもらいたいので、ほむちゃんはドーナツをたくさんつくりたいと考えている。

・・・ところで、こだわるのは一向に構わないが、ほむちゃんこだわりのドーナツを十分な数用意することはできるのだろうか？

問題

3 以上の整数 N について、以下のようにして 2N 頂点のグラフを作る。

それぞれの頂点について 1 から 2N で番号付けする。

各整数 1 \leq a \leq N について、頂点 2a-1 と 2a の間に無向辺を張る

各整数 1 \leq b \leq 2N-2 について、頂点 b と b+2 の間に無向辺を張る

頂点 1 と 2N-1 および 2 と 2N の間に無向辺を張る

このグラフの各辺に向きをつけて、有向グラフを作る。つまり、頂点 u と v の間に無向辺があるならば、それを u から v へ向かう有向辺にするか、v から u へ向かう有向辺にする。

このようにしてできた有向グラフであって、サイクルを持たないものが何通りあるかを知りたい。答えは非常に大きくなるため、素数 M で割った余りを求めよ。

入力形式

N M

制約

3 \leq N \leq 1,000

10^8 \leq M \leq 10^9 + 7

M は素数であることが保証される

出力形式

条件を満たす有向グラフの数を M で割った余りを出力せよ。

入力例1

3 1000000007

出力例1

204

N = 3 なので、6 頂点からなるグラフを作る。条件に合致する有向グラフの一例は以下の通りである。

サイクルが存在するため、以下に示す有向グラフは条件を満たさない。

入力例2

128 998244353

出力例2

996915100

M で割った余りを出力することに注意せよ。
A: タイル貼り

問題

縦 $h$ , 横 $w$ の大きさの長方形の壁に, 縦 $a$ , 横 $b$ の大きさの長方形のタイルを出来るだけたくさん貼りたい.

タイルを貼る際は以下の条件を満たす必要がある.

タイルを重ねてはいけない.

タイルを斜めに貼ってはいけない. すなわち, タイルのどの縁も, 壁のどの縁に対しても平行, または垂直である.

タイルの向きを変えない. すなわち, 縦横を入れ替えない.

出来るだけ多くのタイルを貼ったとき, タイルに覆われていない部分の面積の総和を求めよ.

制約

入力値は全て整数である.

$1 \leq h,w,a,b \leq 100$

入力形式

入力は以下の形式で与えられる.

$h\ w$

$a\ b$

出力

タイルに覆われていない部分の面積の総和を出力せよ. また, 末尾に改行も出力せよ.

サンプル

サンプル入力 1

5 8
2 2

サンプル出力 1

8

サンプル入力 2

11 10
4 3

サンプル出力 2

38

サンプル入力 3

4 7
7 4

サンプル出力 3

28
B: たぬきつね

問題

謎の装置 $M$ があり,この装置に Tanuki と Fox を入れると, 装置から一匹の動物が出てくる（以下, Tanuki を $T$ ,Foxを $F$ とする）.

$M(x, y)$ は,装置 $M$ に $x, y$ の順で動物を入れて出てきた動物を表す.

色々試した結果,以下のことがわかった.

$M(T, T) = T$

$M(T, F) = F$

$M(F, T) = T$

$M(F, F) = T$

あなたは,一列に並んでいる動物たち $P_1, P_2, ... , P_N$ を以下のように装置に入れていった.

$M(....M(M(P_1,P_2), P_3)...., P_N)$

最後に出てくる動物を答えよ.

制約

$2 \leq N \leq 10^{5}$

$P_i$ は $T$ か $F$ の一文字

入力形式

入力は以下の形式で与えられる.

$N$

$P_1\ P_2\ ...\ P_N$

出力

最後に出てくる動物を表す文字 $T$ または $F$ を出力せよ.また,末尾に改行も出力せよ.

サンプル

サンプル入力 1

3
F T T

サンプル出力 1

T

サンプル入力 2

7
F T T F T T F

サンプル出力 2

F
C: オセロ

問題

オセロの盤面を用意する. 盤面は左上が $(1,1)$ , 右下が $(8,8)$ と表記する. ここで用意する盤面は, 以下のように, $(5,4)$ の黒の石がない.

........
........
........
...ox...
....o...
........
........
........

黒石:x 白石:o

8x8の盤面

この状態から, 黒が先手でオセロを開始する.

AORイカちゃんは, 以下のルールで $q$ 回遊ぶ.

左上を $a$ 行目 $b$ 列目のマス, 右下を $c$ 行目 $d$ 列目のマスとした, マス目に沿った長方形領域が与えられる.

AORイカちゃんは, この長方形領域に含まれる石の数を最大化するように, オセロのルール(参考:Wikipedia　オセロ )にのっとり黒石と白石を交互に置いていく.

これ以上石が置けなくなったとき(白石黒石ともにパスするしかない状態やすべての盤面が埋まった状態のとき), ゲームを終了する.

それぞれのゲームで, その領域に含まれる石の数を最大化したときの石の数を出力せよ.

なお, 入力や出力の回数が多くなることがあるため, 入出力には高速な関数を用いることを推奨する.

制約

$1 \leq q \leq 10^{5}$

$1 \leq a \leq c \leq 8$

$1 \leq b \leq d \leq 8$

入力形式

入力は以下の形式で与えられる.

$q$

$a_1\ b_1\ c_1\ d_1$

$a_2\ b_2\ c_2\ d_2$

$\vdots$

$a_q\ b_q\ c_q\ d_q$

出力

それぞれのゲームで, その領域に含まれる, 石の数を最大化したときの石の数を出力せよ. また, 末尾に改行も出力せよ.

サンプル

サンプル入力 1

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

サンプル出力 1

48
7
1
E: LISum

問題

長さ $N$ の数列 $A$ が与えられる。
数列 $A$ の最長増加部分列のひとつを $B$ とするとき、$\sum B_i$ の最大値を求めよ。

数列 $A$ の最長増加部分列とは、すべての $i < j$ で $A_i < A_j$ を満たす部分列のうち、最長なものを示す。

制約

入力値は全て整数である。

$1 \leq N \leq 10^5$

$0 \leq A_i \leq 10^5$

入力形式

入力は以下の形式で与えられる。

$N$

$A_1 \dots A_N$

出力

数列 $A$ の最長増加部分列のひとつを $B$ とするとき、$\sum B_i$ の最大値を出力せよ。また、末尾に改行も出力せよ。

サンプル

サンプル入力 1

4
6 4 7 8

サンプル出力 1

21

最長増加部分列は $ (6, 7, 8)$ と $(4, 7, 8)$ である。よって最大値は $21$ である。

サンプル入力 2

3
1000 2 3

サンプル出力 2

5

最長増加部分列は $(2,3)$ のみである。

サンプル入力 3

7
17 17 13 4 20 12 15

サンプル出力 3

31

サンプル入力 4

7
19 16 14 9 4 20 2

サンプル出力 4

39
F: Absum

問題

長さ $N$ の数列 $A$ が与えられる．あなたは高々 $M$ 回まで，数列の $i$ 番目と $j$ 番目（$0 \leq i, j \leq N-1$）の要素を入れ替える操作を行うことができる．

操作を行なってできる数列の $\sum_{i = 0}^{N - 1} abs(A_i - i)$ の最大値を求めよ．

制約

$2 \leq N \leq 10^5$

$0 \leq M \leq N$

$0 \leq A_i \leq 10^5$

入力形式

入力は以下の形式で与えられる.

$N\ M$（15:15修正）

$A_0\ A_1\ A_2\ \dots\ A_{N - 1}$

出力

操作を行なってできる数列の $\sum_{i = 0}^{N - 1} abs(A_i - i)$ の最大値を求めよ.また, 末尾に改行も出力せよ.

サンプル

サンプル入力 1

5 2
0 3 2 1 4

サンプル出力 1

12

$0$ 番目の要素と $4$ 番目の要素に操作を行うと，操作後の数列は $(4, 3, 2, 1, 0)$ となり， $|4 - 0| + |3 - 1| + |2 - 2| + |1 - 3| + |0 - 4| = 12$ で最大となる．必ずしも操作を $M$ 回行う必要がないことに注意せよ．

サンプル入力 2

3 2
0 0 0

サンプル出力 2

3

操作を行うことなく最大値となる．

サンプル入力 3

6 2
1 0 3 6 5 4

サンプル出力 3

20
G: イルミネーション

問題

$1 \leq x \leq h , 1 \leq y \leq w$ をみたす格子点 $(x,y)$ に電球がある.

電源装置は座標 $(i+0.5,j+0.5) (1 \leq i < h,1 \leq j < w, i+j$ は偶数）に設置されている(14:21修正).
座標 $(i+0.5,j+0.5)$ に設置されている電源装置をオンにすると, 座標 $(i,j),(i+1,j),(i,j+1),(i+1,j+1)$ に存在する $4$ つの電球が光る.

$(i,j)$ にある電球がオンになっている電源装置に $1$ つ以上つながっていると, きれいさ $B_{i,j}$ を得られる. あなたは, きれいさの合計分の収入がもらえる.
また, それぞれの電源装置をオンにすると, $1$ つあたり電気代が $W$ かかる.

いくつかの電源をオンにして「収入の合計 - 電気代の合計」を最大化しなさい.

制約

$2 \leq h, w \leq 50$

$0 \leq B_{i,j},W \leq 10^9$

$h,w$ は偶数

入力はすべて整数

入力形式

入力は以下の形式で与えられる.

$h\ w \ W$

$B_{1,1} \dots B_{1,w}$

$\vdots$

$B_{h,1} \dots B_{h,w}$

出力

「収入の合計 - 電気代の合計」の最大値を出力せよ. また, 末尾に改行も出力せよ.

サンプル

サンプル入力 1

4 4 10
100 100 100 100
100 100 100 100
1 100 100 1
1 1 1 1

サンプル出力 1

970

以下のように $@$ の位置の電源をオンにし, $X$ の位置の電源をオフにするのが最善である.

100 100 100 100
@ @
100 100 100 100
@
1 100 100 1
X X
1 1 1 1
割り勘

あなたは ICPC 2019 Yokohama Regional 国内予選の健闘を祈るためのパーティを企画した．このパーティの参加者は N 人である．

このパーティの開催には合計で M 円の費用が必要となるため，N 人の参加者からそれぞれ M/N 円を集めることにした．M は N で割り切れる金額となったため，余りについて心配する必要はない．

i 番目の参加者の今日の所持金は Ai 円である．M/N 円を払うことができない場合には，今日の所持金をすべて払ってもらい，足りない分は後日払ってもらうこととする．

あなたは今日のうちにパーティの開催費用をいくら集めることができるだろうか？

Input

入力は最大で 50 個のデータセットからなる． 各データセットは次の形式で表される．

N M
A1 A2 ... AN

データセットは 2 行からなる．1 行目にはパーティの参加者の数 N と，かかった費用 M が与えられる．N と M は整数であり，それぞれ 2 ≤ N ≤ 100，N ≤ M ≤ 10 000 が成り立つ．また，M は N の倍数である．2 行目には N 人の参加者のそれぞれの所持金が与えられる．Ai は i 番目の参加者の所持金を表す整数であり，1 ≤ Ai ≤ 10 000 である．

入力の終わりは，2 個の 0 だけからなる行で表される．

Output

各データセットについて，今日のうちに集めることができるパーティの開催費用を 1 行で出力せよ．

Sample Input

3 300
120 100 80
3 30
10 20 5
4 1000
100 200 300 400
5 5
2523 8430 3 4199 632
0 0

Output for the Sample Input

280
25
800
5

ひとつめのデータセットでは 1 人あたりの支払いは 100 円である．1 番目と 2 番目の参加者は 100 円を支払うことができるが，3 番目の参加者は 100 円を支払うことができないため，所持金である 80 円を支払ってもらい，足りない 20 円は後日支払ってもらうこととする．今日のうちに集めることができるのは 100+100+80=280 円である．
毒の沼地

あなたはレトロなロールプレイングゲームで遊んでいる．このゲームのフィールドは縦 100 マス，横 100 マスのマス目状である．このフィールドの左から x 列目，上から y 行目のマスは (x, y) と表される．あなたが操作するキャラクターはフィールド内のいずれかのマスの上におり，フィールド内を上下左右に 1 マスずつ移動することができる．

あなたが操作するキャラクターはいま (X0, Y0) にいて，これから N 箇所の目的地を順番に訪問する予定である．しかしながら，あなたはキャラクターを操作するとき，フィールドのマスの種類に注意してキャラクターを移動させなければならない．それぞれのマスは毒のある沼地か毒のない土地のどちらかである．キャラクターの移動先のマスが毒のある沼地の場合にはキャラクターはダメージを受け，移動先のマスが毒のない土地の場合にはダメージを受けない．あなたはキャラクターへのダメージを減らすため，適切に経路を選ぶことでキャラクターがダメージを受ける回数をできるだけ少なくしたい．ダメージの有無はキャラクターの移動先のマスの種類で決まること，例として，移動元のマスが毒のある沼地で移動先のマスが毒のない土地の場合にはキャラクターはダメージを受けないことに注意せよ．

あなたの分析によれば，左上を (A, B) ，右下を (C, D) とする長方形の範囲内のマスは毒のない土地であり，それ以外のマスは毒のある沼地である．あなたのキャラクターが毒のある沼地からダメージを受ける回数を最小化するように N 箇所の目的地を順番に訪問したとき，あなたの操作するキャラクターがダメージを受ける回数を求めよ．

Input

入力は最大で 50 個のデータセットからなる． 各データセットは次の形式で表される．

N
A B C D
X0 Y0
X1 Y1
X2 Y2
...
XN YN

データセットは N+3 行からなる．

1 行目は目的地の数 N (1 ≤ N ≤ 100) を表す整数である．

2 行目は毒のない土地となっている長方形の範囲を表す整数 A，B，C，D であり，1 ≤ A ≤ C ≤ 100，1 ≤ B ≤ D ≤ 100 を満たす．キャラクターの移動先のマス (x, y) が A ≤ x ≤ C と B ≤ y ≤ D を満たすとき，またその場合に限りキャラクターはダメージを受けない．

3 行目はあなたが操作するキャラクターが最初にいるマスの座標 (X0, Y0) を表す整数であり 1 ≤ X0, Y0 ≤ 100 を満たす．4 行目から続く N 行には N 箇所の目的地の座標が与えられる．3+i 行目は i 番目の目的地のマスの座標 (Xi, Yi) を表す整数であり 1 ≤ Xi, Yi ≤ 100 を満たす．キャラクターが最初にいるマスおよび目的地のマスの座標はそれぞれ異なる，すなわち (Xj, Yj) ≠ (Xk, Yk) (0 ≤ j < k ≤ N) を満たす．

入力の終わりは，1 個のゼロだけからなる行で表される．

Output

各データセットについて，あなたの操作するキャラクターがダメージを受ける回数を 1 行で出力せよ．

Sample Input

2
3 3 5 7
3 3
7 3
7 7
5
1 10 100 10
1 1
100 1
50 20
50 80
51 21
51 1
0

Output for the Sample Input

5
174

入力例を以下の図に示す．(3, 3) から (5, 3) の間は毒のない土地であるが (6, 3) と (7, 3) は毒のある沼地であるため，1 番目の目的地に移動するまでにダメージを 2 回受ける．1 番目の目的地から 2 番目の目的地まで下方向に 4 回移動して最短距離で移動した場合は，すべてのマスが毒のある沼地であるためダメージを 4 回受ける．遠回りして毒のない土地を通った場合は，(6, 3)，(6, 7)，(7, 7) の毒のある沼地に入るためダメージを 3 回受ける．ダメージを受ける回数を最小化するような移動方法を選んだとき，ダメージを受ける回数は 5 回である．
避けるべし

あなたはいま，上下左右に広大に広がるマス目の原点に当たる位置 (0, 0) にいる．マスの位置はx座標とy座標で表され，右に1マス動くことがx座標が1つ増えることに対応し，上に1マス動くことがy座標が1つ増えることに対応する．あなたはこれから目的地であるマス (x, y) を目指して出発するところだ．あなたは 1 歩で上下左右斜めの 8 方向に隣接するマスに移動することができる．

さあ，目的地に向かって移動開始だ！とあなたは意気込んでいるところかもしれないが，ちょっと待ってほしい．一つだけ先に忠告しておくことがある．それはこのマス目に潜む謎の人物，回り込みのプロ・廻小宮の存在だ．廻小宮はあなたが 1 歩移動したのを確認すると，あなたが進んだ方向のさらに 1 歩先のマスに瞬時に移動し，邪魔をしてくる．より正確に言えば，あなたがマス (xs, ys) から (xt, yt) に移動するとき，廻小宮は (xt + (xt - xs), yt + (yt - ys)) に移動する．明らかに異様な雰囲気を醸し出す廻小宮．ヤツの間合いに入り込むのは危険だ．回り込まれた直後は仕方ないとして，次に移動する先のマス，あるいはその 8 方向に隣接するマスのどれかに廻小宮がすでにいると，ヤツの間合いに入り込んでしまうことになるので，これはどうしても避けたい．

上記のように廻小宮の間合いを避けつつ，目的地に辿り着くためには最小で何歩必要だろうか？あなたの仕事はこの最小歩数を求めるプログラムを書くことだ．ただし，廻小宮は初期状態ではどのマスにも存在せず，最初の 1 歩目以降から上記のルールに従ったマスに現れるものとする．

最初のサンプルでは，あなたは (2, 0) を目指す．例えば最初に右横のマス(1, 0) に移動してしまうと，廻小宮が (2, 0) に回り込んでくるため，次にそのマスへと移動することができない．一方，最初に右斜め上の (1, 1) に移動すると，廻小宮の位置は (2, 2) となり (2, 0) が廻小宮の間合いではないため，次の 1 歩で (2, 0) に移動することができる．

Input

入力は複数のデータセットからなる． 各データセットは 2 つの整数 x, y からなる 1 行で表される．これは目的地のマスが位置 (x, y) であることを表し，|x|, |y| ≤ 109 を満たす．

入力の終わりは EOF (ファイルの終端) で表される． 全データセットの総数は 50 を超えない．

Output

条件を満たすように移動を繰り返すとき，マス (0, 0) からマス (x, y) に移動するために必要な最小歩数を 1 行に出力せよ．

Sample Input

2 0
2 2
1 -1
0 0
0 -5
173 207

Output for the Sample Input

2
4
1
0
6
379
文字列の魔法

魔法使いであるあなたは，今日も魔法の修行に励んでいる．あなたは今，手元に英小文字からなる文字列 X を持っている．あなたの今日の修行の課題は，この文字列を，別の文字列 Y に変化させることである．

あなたは，文字列を変化させる魔法を 4 種類習得していて，それらを好きな順序で何回でも唱えることができる．ただし，魔法を唱えるたびに，魔法石と呼ばれる特別な石を消費する．あなたが習得している魔法は次の通りである．

魔法石を A 個消費する．手元の文字列の好きな位置に，好きな英小文字 1 文字を追加する．例えば，元の文字列が bcbd であった場合，abcbd, bcebd, bcbdf などの文字列に変化させることができる．

魔法石を E 個消費する．手元の文字列の好きな 1 文字を取り除く．例えば，元の文字列が bcbd であった場合，cbd, bbd, bcd, bcb のいずれかに変化させることができる．なお，元の文字列の長さが 0 である場合，この魔法を唱えることはできない．

魔法石を S 個消費する．手元の文字列の好きな 1 文字を，別の好きな英小文字 1 文字に置き換える．例えば，元の文字列が bcbd であった場合，acbd や bebd などの文字列に変化させることができる．なお，元の文字列の長さが 0 である場合，この魔法を唱えることはできない．

魔法石を R 個消費する．手元の文字列の先頭の 1 文字を末尾に移動させる．例えば，元の文字列が bcbd であった場合，cbdb に変化させることができる．なお，元の文字列の長さが 0 である場合，この魔法を唱えることはできない．

魔法石は高価なので，あなたは魔法石の消費を最小限にしたいと考えている．文字列 X を文字列 Y に変化させるために必要な魔法石の個数の最小値を求めよ．

Input

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

X
Y
A
E
S
R

X, Y は英小文字のみからなる異なる文字列であり，いずれも長さは 1 以上 100 以下である．A, E, S, R はいずれも 1 以上 106 以下の整数である．

入力の終わりは '#' 一つのみからなる行で示される．入力に含まれるデータセットの数は高々 50 である．

Output

各データセットについて，文字列 X を文字列 Y に変化させるために必要な魔法石の個数の最小値を，1 行に出力せよ．

Sample Input

typewriter
periodicity
100010
100100
101000
110000
periodicity
typewriter
100010
100100
101000
110000
periodicity
typewriter
100010
100100
101000
1
domestic
contest
100010
100100
101000
110000
#

Output for the Sample Input

823120
1001540
603217
502210
成績上昇大作戦

受験生の太郎君は N 日間の勉強合宿に参加した．
この合宿では毎日 M 科目のテストを行い，
合宿の終了後にはすべてのテストの点数が書かれた成績表が配られる．
成績表は N 枚の紙からなっており，i 枚目の紙には i 日目の全 M 科目のテストの科目名と点数のみが印刷されている．

成績表に日付が書かれていないことに気付いた太郎君は，お母さんに成績表を渡す前に細工を加えることにした．
成績表の紙の順番を並べ替え，さらに1枚目から順番にページ番号を書き込んで冊子にすることによって「偽りの成績表」を作ったのだ．
太郎君の目的は，「偽りの成績表」でテストの点数がページ番号に対して広義単調増加している科目の個数を最大化することである．

太郎君が「偽りの成績表」を作るとき，テストの点数がページ番号に対して広義単調増加である科目の個数の最大値を求めよ．

ただし，N 日間のテストの点数がページ番号に対して広義単調増加であるとは 1 ≤ i < N に対して i+1 枚目に記載されている点数が i 枚目に記載されている点数以上であることを意味する．

Input

入力は 50 個以下のデータセットからなる． 各データセットは次の形式で表される．

N M
a11 ... a1M
...
aN1 ... aNM

1行目には，勉強合宿の日数 N と科目数 M が与えられる．N は 1 以上 103 以下の整数で，M は 1 以上 40 以下の整数である．

続く N 行には太郎君の点数が与えられる．各行は M 個の整数からなっており aij は太郎君の i 日目の科目 j の点数であり，aij は 0 以上 103 以下の整数である．

入力の終わりは，2 つのゼロからなる行で表される．

Output

各データセットについて，テストの点数がページ番号に対して広義単調増加である科目の個数の最大値を 1 行に出力せよ．

Sample Input

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

Output for the Sample Input

2
3
1
9
全宇宙生命ゲノムデータベース リターンズ

西暦2301年，宇宙連邦共和国の生命科学局では，宇宙生物のゲノム配列の研究を行っていた．近年の研究の結果，ゲノム配列に特定のパターンが何回現れるかが生物の性質に大きく影響することが分かってきた．

宇宙生物のゲノム配列は英大文字からなる文字列で表される．研究員たちはゲノム配列の中に，ある特定のパターンが何回現れるかを数え上げることにした．しかしながら，宇宙生物のゲノム配列は非常に長いため，後述する方法で繰り返しがある部分文字列を圧縮してデータベースに保存している．

あなたの仕事は圧縮されたゲノム配列 S から文字列 Q の出現回数を数え上げるプログラムを作成することである．ただし，Q の出現は，開始位置さえ異なっていれば，重なっている部分があっても別の出現として数える．例えば， MISSISSIPPI に ISSI は 2 回出現する．

ゲノム配列の圧縮方法は以下のBNFで定義される．

<Genome> ::= <Letter> | <Number> <Letter> | <Number> ( <Genome> ) | <Genome> <Genome>
<Letter> ::= 'A' | 'B' | … | 'Z'
<Number> ::= <Digit> | <Number> '0' | <Number> <Digit>
<Digit> ::= '1' | '2' | … | '9'

ここで，文字列の前に付けられる整数はその文字列がその回数だけ繰り返されることを表す．例えば，5A は AAAAA を表し，2(AB) は ABAB を表す．整数の直後に括弧がない場合は，その直後の1文字のみが繰り返される．例えば，2AB は AAB を表す．繰り返しは多重にネストすることが可能で，2(2(AB)C) は 2(ABABC) と同じであり，ABABCABABC を表す．

Input

入力は最大で 50 個のデータセットから構成される．各データセットは次の形式で表される．

S
Q

各データセットの1行目は，圧縮されたゲノム配列を表す文字列 S である．S は上記のBNFに従い，その長さは 1 以上 3 000 文字以下である．また，S を展開した元のゲノム配列の長さは 1018 以下である．各データセットの2行目は数え上げる対象となる文字列 Q である．Q は英大文字からなり，長さは 1 以上 3 000 文字以下である．

入力の終了は '#' の1文字だけを含む行で表される．

Output

各データセットについて，S を展開した文字列に Q が何回現れるかを出力せよ．

Sample Input

MI2(2SI)2PI
ISSI
100(100(JAG))
JAG
1000000000000000000A
AAAAA
#

Output for the Sample Input

2
10000
999999999999999996
Kは多角形のケイ

「1 番じゃなきゃダメですか？K 番じゃダメなんでしょうか？」

これがケイ氏の座右の銘である．最近ケイ氏はもっぱら多角形に興味があるようで，目の前に広がる広大な二次元平面上に置かれた N 個の点を見て，そこから多角形を形成する方法について思いを馳せている．ケイ氏はどうやら，この N 個の点のうちいくつかの点を選んで自由な順番で繋げることで，選んだ点を頂点とする多角形を構成することにしたようだ．ただし，多角形は以下の条件を満たす必要がある．

単純多角形である．すなわち，3 つ以上の頂点を持ち，連続しない任意の 2 辺が交点を持たない．

選ばれた点以外も含む N 個すべての点をその内部，または周上に含む．

ケイ氏は己の信念に従って，このような多角形のうち，周長，すなわち全ての辺の長さの和が K 番目に短い多角形を渇望している．

あなたの仕事は，ケイ氏を手伝うため，条件を満たす多角形のうち，周長の昇順に並べたときに K 番目となる多角形を求め，その周長を出力するプログラムを書くことだ．ただし，そのような多角形が K 個以上存在しないこともある．そのようなときにはケイ氏の無念の気持ちを慮りつつ，申し訳ない気持ちを込めながら -1 と出力する必要がある．

Input

入力は複数のデータセットからなる． 各データセットは次の形式で表される．

N K
x1 y1
...
xN yN

データセットの1行目には二次元平面上の点の数 N と求める周長の順位 K が与えられる． N, K はともに整数であり，3 ≤ N ≤ 25, 1 ≤ K ≤ 10 が成り立つ．続く N 行では各点の二次元平面上の座標が与えられる．N 行のうち i 行目には i 番目の点の x 座標 xi と y 座標 yi がともに整数で与えられ，すべての 1 ≤ i ≤ N について -100 ≤ xi, yi ≤ 100 が成り立つ．どの相異なる 3 点を選んでも，その 3 点すべてを通るような直線は存在しないと仮定してよい．また，入力において，周長の昇順に並べたときに K 番目となる，問題文中に述べた条件を満たす多角形は，存在するならば一意に定まると仮定してよい．

入力の終わりは，2 個のゼロだけからなる行で表される． 全データセットの総数は 50 を超えない．

Output

与えられた点集合からいくつかの点を選び単純多角形を作るとき，構成可能な単純多角形のうち K 番目に周長が短い多角形の周長を 1 行に出力せよ．そのような多角形が存在しない場合は -1 を出力せよ．結果は 10-4 以上の誤差を含んではいけない．

Sample Input

5 2
1 1
1 4
2 2
3 1
3 5
3 1
0 2
1 0
-1 0
3 2
0 2
1 0
-1 0
9 10
8 1
9 19
2 10
1 1
4 17
7 13
3 4
6 13
9 21
0 0

Output for the Sample Input

11.812559200041266
6.472135954999580
-1
52.202878812480016
不思議なボタン

あなたは，町外れにあるダンジョンでコインを稼ぐことにした．このダンジョンには N 個の部屋が存在し，1 から N までの番号がつけられている．また，ダンジョン内には「コインボタン」「脱出ボタン」「ワープボタン」と呼ばれる不思議なボタンが存在する．それぞれのボタンの詳細は次の通りである．

コインボタンは各部屋にちょうど 1 個存在する．コインボタンは何回でも押すことができ，そのたびにコインが 1 枚手に入る．

脱出ボタンは各部屋にちょうど 1 個存在する．脱出ボタンを押すとあなたはただちにダンジョンから脱出し，この冒険を終了する．

ワープボタンは合計で M 個存在する．このうち i 個目のワープボタンは部屋 ai に存在し，押すことであなたは部屋 bi にワープし，さらにコインが ci 枚手に入る．ただし，ai < bi および 1 ≤ ci ≤ 3 を満たす．なお，ワープボタンが 1 つの部屋に複数ある場合や，ワープボタンのまったく無い部屋が存在する場合もある．

なお，ボタンを押す以外の方法で部屋を移動することはできず，複数のボタンを同時に押すこともできない．また，いずれのボタンも互いに区別可能である．

あなたはこのダンジョンを Q 回冒険した．あなたの記憶が正しければ，j 回目の冒険は部屋 1 から始まり，最後に部屋 dj にある脱出ボタンを押し，コインの合計獲得枚数はちょうど ej 枚だったはずである．Q 回の冒険それぞれについて，そのようなボタンの押し方が何通りあるかを求めよ．答えは大きくなる可能性があるので，109+7 すなわち 1000000007 で割った余りを求めよ．

ただし，2 通りの「ボタンの押し方」が異なるとは，ボタンを押した合計回数が異なるか，またはある整数 k が存在し，k 回目に押したボタンが異なることを指す．

なお，もしかしたらあなたの記憶は間違っており，そのようなボタンの押し方は存在しないかもしれない．その場合には 0 を出力せよ．

Input

入力は複数のデータセットからなる． 各データセットは次の形式で表される．

N M
a1 b1 c1
a2 b2 c2
...
aM bM cM
Q
d1 e1
d2 e2
...
dQ eQ

データセットの 1 行目には，部屋の数を表す整数 N と，ワープボタンの数を表す整数 M が与えられ，1 ≤ N, M ≤ 2 000 を満たす．続く M 行にはワープボタンの情報が与えられる．M 行のうち i 行目には，i 番目のワープボタンの存在する部屋番号 ai，ワープ先の部屋番号 bi および手に入るコインの枚数 ci が与えられ，1 ≤ ai < bi ≤ N および 1 ≤ ci ≤ 3 を満たす．M+2 行目には冒険の回数を表す整数 Q が与えられ，1 ≤ Q ≤ 2 000 を満たす．続く Q 行にはあなたの記憶にある冒険の情報が与えられる．Q 行のうち j 行目には，j 番目の冒険であなたが脱出ボタンを押した部屋番号 dj およびコインの獲得枚数 ej が与えられ，1 ≤ dj ≤ N および 1 ≤ ej ≤ 109 を満たす．

入力の終わりは，2 個のゼロだけからなる行で表される．全データセットの総数は 50 を超えない．

Output

各データセットについて出力は Q 行からなる．このうち j 行目には，部屋 1 から始まり，最後に部屋 dj にある脱出ボタンを押し，コインの合計獲得枚数がちょうど ej 枚であるようなボタンの押し方の総数を，109+7 で割った余りを出力せよ．

Sample Input

4 9
1 2 1
1 2 2
1 3 1
1 3 2
1 3 3
2 3 1
2 3 2
1 4 1
3 4 2
8
1 5
2 5
3 5
4 5
1 1234567
2 1234567
3 1234567
4 1234567
4 8
1 2 1
1 2 1
1 2 3
3 4 3
1 4 2
2 4 1
2 4 3
2 4 3
8
1 3
2 6
3 8
4 12
1 31415926
2 53589793
3 23846
4 26433832
0 0

Output for the Sample Input

1
9
37
21
1
2469133
307629943
60012504
1
16
0
424
1
160769377
0
43581113
A: Hokkaido University Easy

注意

問題設定は B 問題と同一のものですが、制約のみが異なりますのでご注意ください。

物語

北海道大学に合格し、新たな生活の始まりに心を躍らせるほむらちゃん。しかし彼女の前には、とてつもなく広いキャンパスが待ち受けていた...。

「え...次の授業に間に合わないんだけど...」

問題

北海道大学札幌キャンパスは異常に広いことで有名です。札幌キャンパスは縦に H マス、横に W マス並んだ長方形のマス目で表現されます。北から i マス、西から j マス進んだマスを (i,j) で表すことにします。キャンパス内にはいくつか建物があり、マス (i,j) で表される位置に建物がある場合は 'B' 、ない場合は '.' が c_{i,j} に書かれています。

北海道大学の新入生のほむらちゃんは、キャンパスのあまりの広さに驚愕し、建物間の移動が心配になってきました。そこで、建物のある 2 つのマスのうち、最も遠い組はどれくらい離れているのかが気になりました。ここで、2 つのマスの組 (i,j) , (i',j') の間の距離を |i-i'|+|j-j'| と定義します。

ほむらちゃんは、自分にはこの問題は難しいと思い、同級生のあなたに助けを求めてきました。ほむらちゃんの代わりに答えを求めてください。

入力形式

H W
c_{11}c_{12} ... c_{1W}
:
c_{H1}c_{H2} ... c_{HW}

制約

2\leq H,W \leq 30

H,W は整数

c_{i,j} は 'B' か '.' のいずれかである。

c_{i,j} のうち少なくとも 2 つは 'B' である。

出力形式

答えを表す整数を 1 行に出力せよ。

入力例 1

3 3
B.B
..B
.BB

出力例 1

4

(1,1) と (3,3) の 2 点間が最長です。

入力例 2

4 3
B..
B..
...
...

出力例 2

1

隣り合う位置が最長になる場合もあります。

入力例 3

6 6
...B..
B.B.B.
.B.B.B
...B.B
.B..B.
..B...

出力例 3

7
B: Hokkaido University Hard

注意

問題設定は A 問題と同一のものですが、制約のみが異なりますのでご注意ください。

物語

北海道大学に合格し、新たな生活の始まりに心を躍らせるほむらちゃん。しかし彼女の前には、とてつもなく広いキャンパスが待ち受けていた...。

「え...次の授業に間に合わないんだけど...」

問題

北海道大学札幌キャンパスは異常に広いことで有名です。札幌キャンパスは縦に H マス、横に W マス並んだ長方形のマス目で表現されます。北から i マス、西から j マス進んだマスを (i,j) で表すことにします。キャンパス内にはいくつか建物があり、マス (i,j) で表される位置に建物がある場合は 'B' 、ない場合は '.' が c_{i,j} に書かれています。

北海道大学の新入生のほむらちゃんは、キャンパスのあまりの広さに驚愕し、建物間の移動が心配になってきました。そこで、建物のある 2 つのマスのうち、最も遠い組はどれくらい離れているのかが気になりました。ここで、2 つのマスの組 (i,j) , (i',j') の間の距離を |i-i'|+|j-j'| と定義します。

ほむらちゃんは、自分にはこの問題は難しいと思い、同級生のあなたに助けを求めてきました。ほむらちゃんの代わりに答えを求めてください。

入力形式

H W
c_{11}c_{12} ... c_{1W}
:
c_{H1}c_{H2} ... c_{HW}

制約

2 \leq H,W \leq 10^3

H,W は整数

c_{i,j} は 'B' か '.' のいずれかである。

c_{i,j} のうち少なくとも 2 つは 'B' である。

出力形式

答えを表す整数を 1 行に出力せよ。

入力例 1

3 3
B.B
..B
.BB

出力例 1

4

(1,1) と (3,3) の 2 点間が最長です。

入力例 2

4 3
B..
B..
...
...

出力例 2

1

隣り合う位置が最長になる場合もあります。

入力例 3

6 6
...B..
B.B.B.
.B.B.B
...B.B
.B..B.
..B...

出力例 3

7
C: 串刺し (Skewering)

問題

ある日、ほむらちゃんが積み木で遊んでいるとてんぷら君がやってきました。
ほむらちゃんは、てんぷら君と一緒に積み木で遊ぶことにしました。

一辺の長さが 1 の立方体の積み木のブロックを A \times B \times C 個隙間なく積み重ねてできた、A \times B \times C の直方体があります。全ての立方体と直方体の各辺は x 軸、y 軸、z 軸のいずれかと平行です。

ほむらちゃんとてんぷら君は交互に以下の操作を繰り返します。

直方体から縦方向、横方向、奥行き方向のいずれかの方向に一列に並んだ積み木のブロックの列を選んで、列に含まれるブロック全てを赤く塗る。ただし、すでに赤く塗られているブロックを含む列は選ぶことができない。

より正確には、

直方体に含まれるブロックのうち一つと、x,y,z の三つの方向から一つを選ぶ。

選んだブロックを選んだ方向に整数の距離だけ動かしたとき、完全に重なるようなブロック全てを赤く塗る（ 0 や負の整数の距離を動かすことも考える）。ただし、条件を満たすブロックであってすでに塗られたものがひとつでも存在する場合、この操作は行うことができない。

ほむらちゃんが先手で、先に操作を行えなくなった方の負けです。

また、最初全ての立方体に色は塗られていません。

二人が最適に行動したとき、どちらが勝つか判定してください。

入力形式

A B C

制約

1 \leq A, B, C \leq 100

入力はすべて整数である。

出力形式

二人が最適に行動したとき、ほむらちゃんが勝つならば Hom を、てんぷら君が勝つならば Tem を一行に出力する。

入力例 1

1 1 10

出力例 1

Hom

一回目でほむらちゃんは全てのブロックを赤く塗ることができます。

入力例 2

4 3 5

出力例 2

Hom

入力例 3

6 4 10

出力例 3

Tem
D: Two Colors Sort

問題

umg 君は散歩中に 1,2, ... ,N を並び変えてできる長さ N の数列 P_1, P_2, ..., P_N を見つけました。

umg 君は不思議な力を使うことで、同じ色に塗られた異なる数を二つ選んで場所を交換することができます。

umg 君は、数列に含まれる数のうち R 個を赤に、残りの N-R 個を青に塗ることで数列を昇順に並び替えられるようにしたいと考えました。

umg 君が目標を達成できるかどうか判定してください。

ただし、数字はとても重いので不思議な力を使わずに動かすことはできません。また、umg 君は天才なので不思議な力を任意の回数使うことができます。

入力形式

N R
P_1 P_2 ... P_N

制約

1 \leq N \leq 3 \times 10^5

1 \leq R \leq N

1\leq P_i \leq N

P_i \neq P_j (1 \leq i < j \leq N)

入力は全て整数である。

出力形式

umg 君が目的を達成できるなら Yes、そうでなければ No を一行に出力せよ。

入力例 1

3 2
1 3 2

出力例 1

Yes

1 を青に、2,3 を赤に塗ることで目標が達成できます。

入力例 2

5 2
1 2 3 4 5

出力例 2

Yes

初めから昇順に並んでいます。

入力例 3

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

出力例 3

No
E: ジャム (Jam)

問題

ある国には N 個の街があり、1,\ 2,\ ...,\ N の番号がつけられています。これらの街は M 本の道で双方向に結ばれており、i 番目の道を使うと街 u_i と v_i の間を時間 t_i で移動することができます。また、どの 2 つの街もいくつかの道を使うことで行き来することができます。

それぞれの街では食パンが売られており、街 i で売られている食パンの美味しさは P_i です。

さらに、この国には K 種類の味のジャムがあり、街 i では味 c_i で美味しさ J_i のジャムを買うことができます。

街 1 に住んでいるほむちゃんは、これからパンとジャムを 1 つずつ買いにお出かけすることにしました。ほむちゃんは、いくつかの街を移動してパンとジャムを買って街 1 に戻ってきます。より正確には、ある街 u に移動してパンを買い、ある街 v を選んでジャムを買い、街 1 に戻ってきます。この際、u=v や u=1 、v=1 でも構いません。

お買い物を終えたほむちゃんの幸福度は、「買ったパンとジャムの美味しさの合計」ー「移動にかかった時間」です。K 種類それぞれのジャムについて、その味のジャムとパンを買いに行くときの幸福度として考えられる最大値を計算してください。

入力形式

N M K
P_1 P_2 ... P_N
c_1 c_2 ... c_N
J_1 J_2 ... J_N
u_1 v_1 t_1
u_2 v_2 t_2
:
u_M v_M t_M

制約

1\leq N\leq 10^5

1\leq M\leq 2\times 10^5

1\leq K\leq N

1\leq P_i, J_i\leq 10^9

1\leq c_i\leq K

1\leq u_i, v_i \leq N

1\leq t_i \leq 10^9

すべての i\ (1\leq i\leq K) について、c_j=i となるj\ (1\leq j\leq N) が存在する

与えられるグラフは多重辺や自己ループを含まない連結なグラフである

入力はすべて整数で与えられる

出力形式

K 行出力してください。i 行目にはパンと味 i のジャムを買いに行く場合の幸福度の最大値を出力してください。

入力例 1

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

出力例 1

10
8
9

味 1 のジャムを買う場合

街 1 でジャムを買い、街 2 に移動してパンを買い、街 1 に戻ってくると、幸福度は 6+6-2=10 となりこれが最適です。

味 2 のジャムを買う場合

街 2 に移動してパンを買い、街 3 に移動してジャムを買い、街 1 に戻ってくると、幸福度は 6+5-3=8 となります。

味 3 のジャムを買う場合

街 4 に移動してパンとジャムの両方を買って街 1 に戻ってくると、幸福度は 6+5-2=9 となります。

入力例 2

2 1 2
1 1
1 2
1 1
1 2 1000000000

出力例 2

2
-1999999998

パンやジャムの美味しさに比べて距離が遠すぎるのでほむちゃんは不満そうです。

入力例 3

6 8 3
31 41 59 26 53 58
1 2 3 1 2 3
27 18 28 18 28 46
1 2 3
2 3 7
2 4 8
3 6 9
3 5 3
4 5 3
1 5 15
4 6 7

出力例 3

66
61
68
F: MOD Rush

問題

長さ N の正の整数列 A と、長さ M の正の整数列 B が与えられます。

すべての (i, j) (1 \leq i \leq N, 1 \leq j \leq M) について、A_i を B_j で割ったあまりを求め、それらの和を出力してください。

入力形式

N M
A_1 A_2 ... A_N
B_1 B_2 ... B_M

制約

1 \leq N, M \leq 2 \times 10^5

1 \leq A_i, B_i \leq 2 \times 10^5

入力はすべて整数で与えられる

出力形式

答えを 1 行に出力してください。最後に改行してください。

入力例 1

3 3
5 1 6
2 3 4

出力例 1

9

数列 A の 1 番目の要素を、数列 B の各要素で割ったあまりを考えます。5 を 2 で割るとあまりは 1、3 で割るとあまりは 2、4 で割るとあまりは 1 です。

同様に 2 番目の要素についても考えると、あまりはそれぞれ 1, 1, 1 です。

3 番目の要素についても考えると、あまりはそれぞれ 0, 0, 2 です。

あまりを合計すると 1 + 2 + 1 + 1 + 1 + 1 + 0 + 0 + 2 = 9 となるので、9 を出力します。

入力例 2

2 4
2 7
3 3 4 4

出力例 2

16

数列内には同じ値が複数含まれていることがありますが、それぞれの要素に対してあまりを計算して和を求めます。

入力例 3

3 1
12 15 21
3

出力例 3

0