alexjercan/bugnet huggingface dataset:
問題 A : Koto Distance

問題文

Koto は言わずと知れた碁盤の目の街である．
この街は東西方向に W メートル，南北方向に H メートルに伸びる長方形の領域によってできている．
この街の西端から x メートル，南端から y メートルの点は (x,  y) と記される．
ここの街に住む人は古くから伝わる独自の文化を重んじており，その一つにKoto距離という変わった距離尺度がある．
2つの点 (x_1, y_1)，(x_2, y_2) の Koto 距離は，min(|x_1 - x_2|,  |y_1 - y_2|) によって定義される．

最近この街全体に Wifi を使えるようにする計画が立ち上がった．
現在の計画では，親機を N 個作ることになっている．
i 番目の親機は点 (x_i,  y_i) に設置され，Koto距離が w_i 以下の領域に対して Wifi を提供する．

親機を計画どおり建てた場合に，街の内部及び境界上に Wifi を提供できるかどうかを判定せよ．

なお，Koto距離は一般に三角不等式を満たさないため，距離の公理を満たさないということはここだけの秘密である．

入力形式

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

N W H
x_1 y_1 w_1
...
x_N y_N w_N

出力形式

街の内部および境界上に Wifi を提供できるなら “Yes” を，そうでない場合は “No” を出力せよ．

制約

1 ≤ N ≤ 10^5

1 ≤ W ≤ 10^5

1 ≤ H ≤ 10^5

0 ≤ x_i ≤ W

0 ≤ y_i ≤ H

1 ≤ w_i ≤ 10^5

同一座標に親機は複数存在しない

入出力例

入力例 1

3 9 9
2 2 2
5 5 2
8 8 2

出力例 1

Yes

２番目の親機が提供するWifiの範囲は以下の通りである．

入力例 2

2 7 7
2 2 1
6 6 1

出力例 2

No

入力例 3

3 10 20
5 10 5
2 10 1
8 10 1

出力例 3

Yes
問題 B : Evacuation Route

問題文

日本では防災研究が盛んに行われており，近年その重要性がますます増している．
避難経路の評価も重要な研究のひとつである．
今回は直線状の通路の安全評価を行う．

通路は W 個のユニットに分けられており，一方の端のユニットからもう一方の端のユニットまで 0,  1,  2,  … ,  W-1 の番号がつけられている．
通路内の各ユニットには，入口の扉，出口の扉，防火扉のいずれか1つが存在する．
入り口の扉，出口の扉，防火扉はそれぞれ通路内に複数個存在しうる．

この問題では時刻 t=0 で火災が発生したと想定する．
それにより，通路の外部にいて避難しようとしている人々が入口の扉を通じて通路へ入り，より安全な場所へ出るために出口の扉へ脱出しようとするものとする．
避難中のそれぞれの人は単位時刻ごとに 1 つのユニットを移動するか，今のユニットに留まることができる．
すなわち，時刻 t にある人がユニット i にいたとするとき，その人は時刻 t+1 ではユニット i-1,  i,   i+1 の3つの数字のうち 0 以上 W-1 以下であるものを選択し，その番号のユニットへ移動することができる．
防火扉があるユニットは，ある一定時刻以降になると完全に遮断されてしまい，避難中の人々はそのユニットに立ち入りできなくなる．また，そのユニット内に居た人々もそこから他のユニットに移動できなくなってしまう．

この問題における目的は，それぞれの扉の情報が与えられるので，避難中の人々が最適に行動した時に最大で何人が出口の扉へたどり着けるか計算することである．

通路の情報がW個の整数a_iで与えられる．

a_i = 0のとき，i 番目のユニットが出口の扉であることをあらわす．

a_i < 0のとき，i 番目のユニットが防火扉により時間 |a_i| 以降出入りできなくなることを表す．

a_i > 0のとき，時刻 t=0, 1, 2, … , a_{i}-1 のそれぞれにおいて，ちょうど一人の人が i 番目のユニットに現れる．時刻 t に現れた人は，時刻 t+1 以降から移動を開始する．

なお，1つのユニットに複数の人々が存在してもかまわない．

出口の扉へたどり着ける最大の人数を求めよ．

入力形式

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

W
a_0 a_1 ... a_{W-1}

出力形式

最大人数を1行で出力せよ．

制約

1 ≤ W ≤ 10^5

|a_i|   ≤ 10^4

入力値はすべて整数である．

入出力例

入力例 1

7
2 0 -2 3 2 -2 0

出力例 1

4

0,   3,   5番目のユニットに入り口の扉があり，
1,   6番目のユニットに出口の扉がある．

0番目のユニットからは，1番目のユニットへ２人出ることができる．

3番目のユニットからは，1番目のユニットへ１人出ることができる．

5番目のユニットからは，6番目のユニットへ１人出ることができる．

よって合わせて４人が出口へとたどり着ける．

入力例 2

4
1 1 1 1

出力例 2

0

出口がないので誰も脱出できない．

入力例 3

9
10 -10 10 -10 10 -10 10 -10 0

出力例 3

24
問題 C : Apples

問題文

あるところに銃の腕に自信をもつ猟師がいました．
猟師はある日，「ウィリアムテルというスイス人が，息子の頭にりんごを乗せて遠くから矢で撃ち落とすパフォーマンスで有名になった」というお話を聞きました．
それを聞いて"自分のほうがもっと凄い!!"と思った猟師は動いている人の上にりんごを乗せて撃ちぬくパフォーマンスを考えつきました．

猟師は広場に N 人の人を集め，それぞれの人の上にりんごを乗せました．
i 番目の人は時刻 t=0 のとき，座標 (x_i,  y_i) にいます．
そこから単位時間あたり速度ベクトル (u_i,  v_i) にしたがって歩きます．
すなわち，時刻 t  ≥  0 のとき，i 番目の人は座標 (x_i + t \times u_i  ,   y_i + t \times v_i) にいます．
ここで，人々は十分小さいので，同じ座標に複数の人がいたり，同じ座標ですれ違ったりできると仮定します．

猟師は人々を驚嘆させるために，一発の弾丸でできるだけ多くのりんごを撃ち落とすことにしました．
猟師は t ≥ 0 であるような任意の時刻に，任意の座標から任意の方向に向けて弾丸を放つことができます．
放たれた弾丸は無限の速さで直線軌道で移動し，りんごに当たった場合貫通して移動します．
弾丸を一発だけ打つとき，最大で何個のりんごを撃ち落とせるか計算してください．

入力形式

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

N
x_0 y_0 u_0 v_0
...
x_{N-1} y_{N-1} u_{N-1} v_{N-1}

出力形式

撃ち落とせるりんごの最大個数を1行に出力せよ．

制約

1 ≤ N ≤ 200

0 ≤   |x_i|,   |y_i|   ≤ 10

0 ≤   |u_i|,   |v_i|   ≤ 3

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

入出力例

入力例 1

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

出力例 1

5

時刻１に５人がｙ軸上に並ぶので最大５つのりんごを撃ち落とせる．

入力例 2

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

出力例 2

3

入力例 3

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

出力例 3

5
問題 D : TiMe Table

問題文

ある学生は朝にいつも乗る通学バスで，あることに気がついた．
そのバスの利用者がいつも同じなのだ．
気になってバスに乗っている利用者たちに聞いてみると，毎日決まった時刻にバス停に来ているようである．
それなら，乗客にとってもっとよいバスの時間割があるのではないかとその学生は考えた．

学生の乗る通学路には，バスの営業所から終点までにs個のバス停が一直線に並んでいる．(営業所はバス停には含まれないが，終点はバス停に含まれる．)
各バス停には，営業所から近い方から順に1 から s までの番号が付けられている．
営業所と i 番目のバス停の距離は x_i である．
バスはまず営業所を出発し，それから x_i 経った後に i 番目のバス停に到着する．
バス停には n 人の利用者がやって来る．
i 番目の利用者は時刻 t_i にバス停 p_i にやって来る．

この通学路には1日にちょうど m 本のバスが営業所から終点まで走ることになっている．
バスはバス停に止まると，そのバス停で待っていた利用者を全員回収して，次のバス停に向かう．
バス停で利用者を回収する時間は無視出来ると仮定する．
いま各バスが営業所から出発する時刻を自由に決めることができるとき，利用者の待ち時間の和を最小化しよう．

入力形式

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

s n m
x_1 ... x_s
t_1 p_1
...
t_n p_n

出力形式

待ち時間の和の最小値を一行に出力せよ．

制約

1 ≤ s,   n,   m ≤ 2000

1 ≤ x_1 < x_2 < …< x_s ≤ 10^4

0 ≤ t_i ≤ 10^4

1 ≤ p_i ≤ s

入力値はすべて整数である.

入出力例

入力例 1

2 2 1
1 5
0 1
0 2

出力例 1

4

入力例 2

2 3 2
1 15
0 1
5 1
5 2

出力例 2

5

この例では，バスを時刻 −10 と 4 に出発させることが最適である．

入力例 3

4 8 1
6 38 105 390
14 1
4 2
39 3
89 2
32 4
1 1
25 1
60 4

出力例 3

1123
問題 E : Pattern Language

問題文

m 個の相異なるアルファベット var_0,  var_1,   … ,  var_{m-1} がある．
0,   1,   … ,   9,   var_0,   var_1,   … ,   var_{m-1} の 10+m 種類の文字からなる，長さ N の文字列 s_0s_1s_2…s_{N-1} が与えられる．
この文字列における各アルファベットを数字で置き換えて回文になるようにしたい．(回文とは，前から読んでも後ろから読んでも同じ文字列をあらわす．)
ここで，同じアルファベットは同じ数字で置き換えなければならない．また与えられたすべてのアルファベットvar_iは少なくとも，一度は文字列s_0s_1s_2…s_{N-1}にあらわれる．

アルファベット var_i は 0 以上 u_i 以下の，leading zero を含まない整数に置き換える事ができる．
置き換えた後の文字列が回文になるような置き換え方が何通り存在するかを，mod 10^9+7 で求めよ．
なお，アルファベットの置き換え方が異なれば，得られる文字列が同じでも異なるものとして数える．

入力形式

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

N m
s_0s_1s_2…s_{N-1}
var_0 u_0
...
var_{m-1} u_{m-1}

出力形式

置き換え方の場合の数を 10^9 + 7 で割った剰余を一行で出力せよ．

制約

1 ≤ N ≤ 500

1 ≤ m ≤ 10

0 ≤ u_i ≤ 99

s_i ∈ \{'0',   '1',   … ,   '9',   var_0,   var_1,   … ,   var_{m-1}\}

var_i ∈ \{'a',   'b',   … ,   'j'\}
各アルファベット var_i は s_0s_1s_2 …s_{N-1} に少なくとも一度は現れる．

var_0,  var_1,  … ,  var_{m-1} はすべて異なる

入出力例

入力例 1

3 1
a1a
a 99

出力例 1

19

入力例 2

5 3
jbfjb
f 50
b 25
j 5

出力例 2

252

入力例 3

7 3
jag2013
j 53
a 10
g 93

出力例 3

23
問題 F : Social Monsters

問題文

不思議な生き物と人間が互いに助け合って生きている世界．
この世界では自分で捕まえたモンスター同士を戦わせる大会が盛んに行われており，
多くの少年少女達が世界一のトレーナーを目指している．

バトルでは自分が捕まえたモンスターからパーティを作り，パーティ同士の対戦となる．
モンスターのペアには相性があり，相性が非常に悪い場合と普通の場合がある．
相性が非常に悪い場合，そのペアのモンスターを同じパーティに入れることはできない．
相性が普通の場合には，友情度という数値で相性の良さが表現される．
バトルでは，パーティ全体の友情度の和が勝負の鍵となる．

いまN匹のモンスターからK匹のモンスターからなるパーティを作りたい．
M個のモンスターのペア(a_i,   b_i)に対して相性が分かっており，整数 c_i で表されている．
c_i = 0 のとき，a_i 番目のモンスターと b_i 番目のモンスターは相性が非常に悪いことを意味する．
c_i  ≠  0 のとき，a_i 番目のモンスターと b_i 番目のモンスターは相性が普通であり，その友情度は c_i であることを意味する．
与えられたM個のペア以外は，相性が普通であり，それらの友情度はすべて0である．

パーティの友情度の和を最大にする選び方を考えてみよう．

入力形式

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

N M K
a_0 b_0 c_0
...
a_{M-1} b_{M-1} c_{M-1}

出力形式

K匹のモンスターからなるパーティを作ることができない場合は1行に "Impossible" を出力せよ．

パーティを作ることができるとき，友情度の和の最大値を出力せよ．

制約

1 ≤ K ≤ N ≤ 2000

0 ≤ M ≤ N

1   ≤   a_i   ≠   b_i   ≤ N

|c_i|   ≤ 10000

各モンスターは a_0, a_1, …, a_{M-1}, b_0, b_1, …, b_{M-1} の中に高々2回しか現れない．

i   ≠   j   ⇒
\{a_i, b_i\}   ≠   \{a_j,   b_j\}

入出力例

入力例 1

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

出力例 1

4

入力例 2

3 1 3
1 2 -10

出力例 2

-10

入力例 2

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

出力例 2

Impossible
問題 G : Perm Query

問題文

\{1,  2,  … ,  N\}の順列 (p(1),  p(2),  … ,  p(n)) が与えられる．
(l_i,  r_i) からなるクエリが Q 個与えられるので，各クエリに対して以下の擬似コードによる処理結果を出力せよ．

ret   :=   0, (x(1),  x(2),  … ,  x(N))  :=  (1,  2,  … ,  N) とおく．

各i   ∈ \{1,   2,  … ,   N\} について y(i) := p(x(i)) とする．

各i   ∈ \{1,   2,  … ,   N\} について x(i)   =  y(i)とする．

ret   :=  ret + x(l_i) + x(l_i+1) + …  + x(r_i)

もし (x(l_i),  x(l_i+1),  … ,  x(r_i)) = (l_i,  l_i+1,  … ,  r_i) なら (ret   mod10^9+7) を出力して終了する．そうでないなら 2 行目に戻る．

入力形式

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

N Q
p(1) p(2) ... p(N)
l_0 r_0
...
l_{Q-1} r_{Q-1}

出力形式

各クエリに対する出力を1行ずつ出力せよ．

制約

1 ≤ N ≤ 10^5

1 ≤ Q ≤ 10^4

(p_1,  p_2,  … ,  p_N) は (1,  2,  … ,  N) の順列になっている．

各 i に対して，ある 1 ≤ k ≤ 40 が存在して，p^k(i)=i となる．ここで，p^k(i) は p(p(p(… p(i)… ))) で p が k 回現れるもの．

1 ≤ l_i   ≤   r_i   ≤ N

入出力例

入力例 1

5 2
5 1 2 3 4
1 1
2 4

出力例 1

15
45

擬似コード中の順列(x(1),   x(2),   … ,  x(N))は以下のように変化する．

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

入力例 2

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

出力例 2

660
90
6
178
67
長年の研究の末、イクタ君は未来予知能力を手に入れた！　彼がこの研究に費やした時間や金銭は莫大なものであったが、ついに報われる時がやってきたのだ。手始めに金銭を取り戻すため、イクタ君は株式投資を始めることにした。

イクタ君は現在株式は全く保有しておらず、 x 円を所持している。彼が投資対象に定めた株式は n 種類で、それらについて今日から d 日分の株価を予知することに成功した。その結果、驚くべきことに今日から d 日間は日中の株価変動が全くないことが判明した。つまり、今日を1日目としたときの i （1 ≤ i ≤ d）日目の株式 j （1 ≤ j ≤ n）の株価 pi,j 円がわかっている。イクタ君はそれぞれの日に自由に株式を売買できる。すなわち、任意の時点で以下の操作（購入・売却）を任意の順番で任意の回数行える。ただし、各操作の前後での所持金と株式の保有単位数は非負整数でなければならない。

購入 : i 日目に、株式の種類 j （1 ≤ j ≤ n）を一つ選び、所持金 pi,j 円を支払い1単位の株式 j を得る。

売却 : i 日目に、株式の種類 j （1 ≤ j ≤ n）を一つ選び、1単位の株式 j を支払い pi,j 円を得る。

（彼が研究に没頭する間に証券取引システムは大きな発達を遂げ、取引手数料はかからなくなった。）

イクタ君は大学で情報科学を修めていたが、未来予知研究に明け暮れるすえに大学で学んだことをすべて忘れてしまっていた。そんな彼の代わりに最終日の所持金を最大化するプログラムを書いてあげてほしい。

Input

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

n d x
p1,1 ... p1,n
...
pd,1 ... pd,n

n : 株式の種類数
d : 日数
x : 1日目の所持金
pi,j : i 日目の銘柄jの株価（今日を1日目とする）

Constraints

入力中の各変数は以下の制約を満たす整数である。

1 ≤ n ≤ 10

1 ≤ d ≤ 10

1 ≤ x, pi,j ≤ 105

最終日の所持金が 105 以下となることが保証されている。

Output

最適に投資した場合の最終日の所持金を1行に出力せよ。

Sample Input 1

2 2 5
3 2
5 4

Output for the Sample Input 1

9

例えば、それぞれの株式を1単位ずつ購入します。

Sample Input 2

1 2 5
6
10000

Output for the Sample Input 2

5

1単位より小さい取引はできません。小口投資家の悲哀です。

Sample Input 3

2 3 5
4 5
6 3
8 5

Output for the Sample Input 3

11

1日目は1種類目の株式に、2日目は2種類目の株式に投資します。

Sample Input 4

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

Output for the Sample Input 4

10

景気が悪い時もあります。
イクタ君は、無向グラフについて異常なほどの思い入れを持っている。イクタ君は、無向グラフ G とその 2 点 s,tの組(G,s,t)のうち、その「うつくしさ」が大きいものが好きである。
組(G,s,t)の「うつくしさ」とは、辺 e = \{u, v\} (u と v は G の異なる 2 点) で、Gにおけるsからtへの最短路の長さが、Gにeをつけくわえた無向グラフにおけるsからtへの最短路の長さより 1 だけ大きいものの個数である。

あなたの仕事は、組(G,s,t)が与えられたとき、その「うつくしさ」を求めるプログラムを書くことである。

Input

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

N M s t
x1 y1
...
xi yi
...
xM yM

最初に無向グラフの頂点数、辺数、2つの頂点を表す整数N,M,s,tが入力される。
2行目からM+1行目までは辺によって結ばれている2つの頂点が入力される。
(ただし、G の頂点集合を\{1,..., N\}とする。)

Constraints

入力中の各変数は以下の制約を満たす。

2≤ N ≤ 100,000

1≤ M ≤ 300,000

1≤ s,t,xi,yi ≤ N

s と t とは異なる

s から t に辿り着けることは保証されている

Output

与えられたグラフをGとしたとき、組(G,s,t)の「うつくしさ」を1行で出力せよ。

Sample Input 1

3 2 1 3
1 2
2 3

Output for the Sample Input 1

1

頂点1から頂点3に辺を張ると、2点間の最短距離が 1 短くなる。

Sample Input 2

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

Output for the Sample Input 2

7

Sample Input 3

4 3 1 4
1 2
3 4
4 1

Output for the Sample Input 3

0

頂点1と頂点4には既に辺が張られているので、これ以上距離を縮めることはできない。

Sample Input 4

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

Output for the Sample Input 4

2
勇猛果敢なイクタ君はついに悪名高きビッグブリッジ伯爵を追い詰めた！　今やビッグブリッジ伯爵は幅 w メートル、奥行き h メートルの長方形の部屋に閉じ込められており、最期を待つばかりとなっている。

部屋のある角を選び、幅方向を x 軸、奥行き方向を y 軸に、それぞれ部屋の内部が正の方向になるように座標系をとると、ビッグブリッジ伯爵は点 (p, q) にいる。点 (x, y) にイクタ君の最終兵器である衝撃波発射装置があり、ここから秒速 v メートルの衝撃波を全方向に出す。この衝撃波は t 秒間有効であり、部屋の壁面で反射する。

部屋の外にいるイクタ君はビッグブリッジ伯爵がどれだけ苦しむか知りたがっているので、ビッグブリッジ伯爵に衝撃波が何回当たるかを求めるプログラムを書いてあげよう。このとき、衝撃波が同時に n 方向から敵に当たる場合は n 回当たったとみなし、また衝撃波がちょうど t 秒後に敵に当たる場合も有効であるとする。衝撃波は発射装置自身やビッグブリッジ伯爵などの障害物により消滅せず、衝撃波同士は干渉しない。

Input

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

w h v t x y p q

それぞれは問題文の説明の通りの正の整数である。

Constraints

v × t ≤ 106

2 ≤ w, h ≤ 108

0 < x, p < w

0 < y, q < h

(x, y) ≠ (p, q)

Output

衝撃波がビッグブリッジ伯爵に当たる回数を1行に出力せよ。

Sample Input 1

10 10 1 10 3 3 7 7

Output for the Sample Input 1

1

Sample Input 2

10 10 1 11 3 3 7 7

Output for the Sample Input 2

5

入力例 1, 2 において部屋の大きさと発射装置とビッグブリッジ伯爵の位置が同じであることに注意しながら、それぞれに付随する図（黒い点が発射装置、白い点がビッグブリッジ伯爵を表す）を見よ。

Sample Input 3

2 3 1000 1000 1 1 1 2

Output for the Sample Input 3

523598775681
イクタ君は速いプログラムが大好きである。最近は、除算のプログラムを高速にしようとしている。しかしなかなか速くならないので、「常識的に考えて典型的」な入力に対してのみ高速にすればよいと考えた。イクタ君が解こうとしている問題は次のようなものである。

与えられた非負整数nに対し、10進法でp(n) − 1桁の正整数11...1をp(n)で割ったあまりを求めよ。ただしp(n)は22{ . . . 2}（2がn個）より大きい最小の素数を表すとする。p(0) = 2とする。

あなたの仕事は、イクタ君より速くプログラムを完成させることである。

Input

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

n

問題の入力の非負整数nがあたえられる。

Constraints

入力中の各変数は以下の制約を満たす。

0 ≤ n < 1000

Output

問題の解を1行に出力せよ。

Sample Input 1

0

Output for the Sample Input 1

1

n=0のとき、p(n) = 2 なので、1 mod 2 = 1 が解となる。

Sample Input 2

1

Output for the Sample Input 2

2

n=1のとき、p(n) = 3 なので、11 mod 3 = 2が解となる。

Sample Input 3

2

Output for the Sample Input 3

1
イクタ君の住む町にはN個の塔がある。
それぞれの塔には0からN−1までの異なる番号が与えられており、番号iの塔を塔iと呼ぶ。
好奇心旺盛なイクタ君はN個の塔の高さに興味を持ち、それらの大小関係を表す表Tを作ることにした。
TはN × N個の要素を持ち、各要素Ti, j (0 ≤ i, j ≤ N − 1)は次のように定義される。

Ti, j = −1 ⇔ 塔iの高さが塔jの高さより小さい

Ti, j = 0 ⇔ 塔iの高さと塔jの高さが等しい

Ti, j = 1 ⇔ 塔iの高さが塔jの高さより大きい

イクタ君は表Tを作成するための調査として、2つの塔を選びそれらの高さを比較するということをN−1回繰り返した。

イクタ君の調査に関して以下のことがわかっている。

i回目の比較(1 ≤ i ≤ \ N − 1)で塔ai, 塔biが選ばれたとすると塔aiの高さが塔biの高さより大きかった。つまりTai, bi = 1, Tbi, ai = −1であった。

それぞれの塔は自分自身よりも大きな塔とは高々一回しか比較されていない。

残念ながらイクタ君の調査による情報だけで表Tの内容を一意に決めることができるとは限らない。
表Tがイクタ君の調査と矛盾せず、Tが定義されるような塔の高さの組み合わせが存在するときTを正しい表と呼ぶことにする。
正しい表として何通りのものが考えられるかを計算してイクタ君に教えて欲しい。

ただし、比較された２つの塔の高さは互いに異なるがすべての塔の高さが互いに異なるとは限らない。

Input

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

N
a1 b1
...
aN−1 bN−1

Nは塔の数を表す。
ai, bi (1 ≤ i ≤ N − 1)は塔aiが塔biより高いことを表す。

Constraints

入力中の各変数は以下の制約を満たす。

1 ≤ N ≤ 200

0 ≤ ai, bi < N

ai ≠ bi

異なる塔が同じ高さであることもある。

イクタ君の調査結果自体が矛盾していることはなく、少なくとも1つイクタ君の調査結果と矛盾しない表Tが存在する。

Output

考えられる正しい表Tの個数の数を1,000,000,007で割ったあまりを出力せよ。

Sample Input 1

3
0 1
1 2

Output for the Sample Input 1

1

正しい表Tは上図の1通りである。

Sample Input 2

3
0 1
0 2

Output for the Sample Input 2

3

正しい表Tは上図の3通りである。

Sample Input 3

1

Output for the Sample Input 3

1

正しい表Tは上図の1通りである。

Sample Input 4

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

Output for the Sample Input 4

91
負けず嫌いのイクタ君は、最近囲碁盤を使って遊ぶゲームに熱中している。
しかし、囲碁も五目並べも友人に全く勝てないので、あまり有名でない Phutball というゲームの特訓をすることにした。

このゲームは難しいゲームなので、手始めに自分のターンに勝って終局できるかを判定できるように特訓することにした。

ゲームの勝利条件は以下のようなものである。

白石は黒石の置かれている場所にジャンプすることは出来ない。

碁盤の中央の 19 × 15 の部分を用いる。

勝利条件を判定したい碁盤は白石が1つと黒石がいくつか置かれた状態で与えられる。

ゴール地点というのは碁盤の下端か、その下側を指す。（下図を参照せよ。）

ゴール地点に白石を運べば勝利する。

勝利するために以下のようなことを行う。

白石は1回以上ジャンプを行うことができる。

ジャンプは白石に隣接する8方向（上下左右と斜め上、斜め下）の黒石のどれかを飛び越えることで行える。

黒石が隣接していない方向へジャンプすることは出来ない。

飛び越えられた黒石は、1回のジャンプごとに碁盤の上から取り除かれる。

ジャンプしたあとの白石はゴール地点かゲーム盤の上に存在しなければいけない。

黒石が2個以上連続していても、ちょうどそれをまたぐようにジャンプできる。

白石は黒石の置かれている場所にジャンプすることは出来ない。(ジャンプする方向に連続している黒石は必ず飛び越えなくてはならない。)

図の丸印がついている場所へはジャンプすることが可能であり、全てゴール地点であるが、バツ印の場所はゴール地点でもなく、碁盤の内側でもないので、ジャンプすることは出来ない。

あなたの仕事はイクタ君の特訓を手助けするために、ゴールできるかどうかの判定と、ゴールするための最小のジャンプ回数を求めるプログラムを書いてあげる事である。

Input

.OXで構成された19 × 15の盤面が19行で与えられる。
各行は必ず15文字からなり、各文字は次を表す。

"."は空白を表す。
"O"は白石を表す。
"X"は黒石を表す。

Constraints

黒石の数が20以下。
白石は必ず1つだけ存在する。
すでにゴールした状態が入力されることはない。

Output

ゴール可能なら最短の手数を1行に出力せよ。ゴールすることが不可能な場合は-1を出力せよ。

Sample Input 1

...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
......O........
......X........

Output for the Sample Input 1

1

白石は黒石を1回ジャンプしてゴールすることができる。

Sample Input 2

...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
......O........
...............

Output for the Sample Input 2

-1

白石は移動できないのでゴールできない。

Sample Input 3

...............
...............
...............
...............
...............
...............
...............
...............
...........O...
............X..
.............X.
.............X.
.............X.
...............
..............X
.........X.....
.............X.
......X....X..X
.....X.X.XX.X..

Output for the Sample Input 3

6

ちょうど6回でゴールできる。

ジャンプ毎に分解した画像を以下に示す。

Sample Input 4

...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
.....XX........
.....XXXO......
......X........

Output for the Sample Input 4

4
小学生のイクタ君は、ある日おじいさんから数式が書かれた紙をもらった。
どうやらおじいさんは数式の答えの金額だけお小遣いをくれるらしい。
イクタ君はまだ足し算、引き算、掛け算しか習ってなかったので、数式にも足し算と引き算と掛け算しか使われていない。
通常の計算では足し算と引き算より掛け算を先に計算しなければならないのだが、イクタ君は演算子の優先順位についての理解があやふやだったので、とりあえず数式の計算結果が最大になるような都合の良い優先順位を考えることにした。

+−×の3つの二項演算子と括弧を含む数式が与えられる。
3つの演算子の優先順位を任意に変更して、数式を最大化したときの計算結果を答えよ。

ただし、以下の点に注意せよ。

演算子は必ず左結合である。
(同じ優先順位の演算子は必ず数式の左側から計算する。)
異なる演算子が同じ優先順位であってもよい。
一つの数式を計算している途中で優先順位を変更してはならない。

Input

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

0〜9の数字と演算子'+','-','*'、括弧'(',')'で構成された数式

正確に記述すると入力は以下のBNFで示される形式になっている

<expr> ::= ( <expr> ) | <number> | <expr> <op> <expr>
<op> ::= + | - | *

<number>は非負整数を表す。

Constraints

入力は以下の制約を満たす。

数式は200文字以下である。
どのような優先順位を設定しても、計算の結果やその途中で64bit整数型でoverflowするようなことはない。

Output

数式から得られる最大値を1行で出力せよ。

Sample Input 1

3-2*3

Output for the Sample Input 1

3

*の優先順位を-より低くすることでこのようになる。

Sample Input 2

(5-3*4)*(0-2+1)

Output for the Sample Input 2

21

優先順位は+>*>-

Sample Input 3

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

Output for the Sample Input 3

3

優先順位が一般的な場合

Sample Input 4

(1989967-3*1-211+4487)

Output for the Sample Input 4

8511076028
不運なイクタ君は持っていた大事な文字列Tをウィルスによって異なる文字列T'に書き換えられてしまった。そのウィルスがTの１文字を異なる文字に書き換えてしまったことがわかっている。すなわちTとT'はちょうど１文字のみ異なっている。イクタ君はTを復元するために、Tが出現していると思われる文書Sを用意した。Tを復元するための下準備としてSの部分文字列でTと一致している可能性があるものの個数を調べたい。

文字列T'と文書Sが与えられる。
S = a1 a2 a3 . . . a|S|の長さ|T'|の部分文字列ak ak+1 . . . ak+|T'|−1(1 ≤ k ≤ |S| − |T'| + 1)
でT'と比較して1文字だけ異なるものの数を求めよ。

Input

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

S
T'

１行目でSが与えられる。
２行目でT'が与えられる。
S, T'はそれぞれ大文字、小文字のアルファベットのみからなる。

Constraints

入力中の各変数は以下の制約を満たす。

1 ≤ |S| ≤ 300,000

1 ≤ |T'| ≤ |S|

Output

条件を満たす部分文字列の数を1行に出力せよ。

Sample Input 1

abcbcdbc
abc

Output for the Sample Input 1

2

Sの3番目の文字から始まるcbc, Sの6番目の文字から始まるdbcが条件を満たす。

Sample Input 2

aaaaaa
aaaaaa

Output for the Sample Input 2

0

完全に一致する文字列は数えてはならない。

Sample Input 3

baaaaaaaa
b

Output for the Sample Input 3

8
プログラミングコンテストの合宿で出す問題のアイディアが出ずに困っていたイクタ君は、ある日友人に相談した。

イクタ君「こういうアルゴリズムを使わないと解けないような問題が出したいんですけど、なにかありませんかね？」

友人「それではこういうものを考えたらいいんじゃないですか」

このようにしてその友人は以下のような問題の原案となるアイデアを考えてくれた。

2進数A,Bが与えられた時、以下の様なクエリを処理せよ。

出力クエリ: max{x を2進数で表したときの、1の数 | A ≤ x < A+B }を出力

A変更クエリ: Aの最下位ビットからiビット目(0-origin)を反転

B変更クエリ: Bの最下位ビットからiビット目(0-origin)を反転

iビット目というのが 0-origin で表されていることに注意せよ。
つまり、Aの最下位ビットから0ビット目とは最下位ビットを表す。

Input

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

N A B
Q1
...
QN

1行目にクエリの数N,2進数A, Bが与えられる。

2からN+1行目には以下の様なクエリが与えられる。

Q
A i
B i

Qが出力クエリを、A i,B iはそれぞれAの最下位ビットからiビット目、Bの最下位ビットからiビット目を反転させる変更クエリを表している。

Constraints

入力中の各変数は以下の制約を満たす。

1 ≤ N < 300,000
1 ≤ |A|,|B| ≤ 300,000 (|A|はAの長さ)
A i というクエリでは 0 ≤ i < |A|
B i というクエリでは 0 ≤ i < |B|
Bが0になることはない

Output

出力クエリごとに答えを1行に出力せよ。

Sample Input 1

4 10000 00101
Q
A 0
B 1
Q

Output for the Sample Input 1

3
4

最初の出力クエリでは A=10000, B=00101, A+B=10101なので求めるxは10011

次の出力クエリでは A=10001, B=00111, A+B=11000なので求めるxは10111

Sample Input 2

9 0110111101 0010100111
Q
B 4
Q
A 4
Q
B 9
Q
A 8
Q

Output for the Sample Input 2

9
9
9
10
9
ヘリリンは二次元平面上における長さ2Lの線分の形状をしている。

ヘリリンのまわりには、線分の形状をしたいくつかの障害物が存在している。

ヘリリンは障害物に接すると体力が削られてしまう。

完璧主義のヘリリンは無傷でゴールすることにした。

ヘリリンは以下の行動ができる。

平行移動

ヘリリンを表す線分の中点を中心として、反時計周りにちょうど 180 / r 度だけ回転する

ただし、二次元平面は上方向にy軸をとる。

ヘリリンのまわりに、2 点 S, G がある。

始めはヘリリンの中心は点 S にあって、x軸に平行な状態になっている。

ヘリリンは、平行移動するのは得意だが、回転するのは不得意である。

あなたの仕事は、ヘリリンが中心を点 S から点 G まで移動させるまでに必要な、最小の回転行動の回数を求めることである。

移動させることができない場合は、そのことも検出せよ。

ただし、以下のことに注意せよ。

ヘリリンは移動しながら回転することはできない。
ヘリリンが回転する途中で障害物にぶつかりうる場合は、回転することはできない。
障害物が互いに交差していることはあり得る。
線分は十分小さい有限の太さを持つものとして扱う。最後のサンプルを見よ。

Input

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

L r
sx sy
gx gy
n
x11 y11 x12 y12
...
xn1 yn1 xn2 yn2

Lはヘリリンの半分の長さを表す。
rは回転角度を定めるものである。
(sx, sy)は点 S、(gx, gy)は点 G の座標である。
nは障害物の数を表す。
(xi1, yi1)と(xi2, yi2)はi番目の障害物を表す線分の端点である。

Constraints

入力は以下の制約を満たす。

1 ≤ n ≤ 30
2≤ r ≤ 11
1 ≤ L ≤ 105
入力に含まれる座標の各成分は絶対値が105以下
入力に含まれる数値はすべて整数
i = 1, . . . , nについて (xi1, yi1) ≠ (xi2, yi2)
ヘリリンをスタート地点にx軸に水平な状態で配置したとき、障害物との（線分と線分との）距離は 10−3 より大きい
障害物を表す線分の端点を、両方向に 10−3 だけ延ばしても縮めても解は変わらない
Lを 10−3 だけ増減させても解は変わらない
障害物の線分をliと書くことにすると、1 ≤ i ≤ j ≤ nであって、liとljの距離が2L以下であるような組(i, j)は高々100個
ゴール地点は障害物に乗っていることはない

Output

スタート地点からゴール地点まで移動するために必要な最小の回転行動の回数を1行に出力せよ。
移動させることができない場合は、-1を1行に出力せよ。

Sample Input 1

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

Output for the Sample Input 1

1

ヘリリンを90度回転させることで、隙間を抜けることができる。

Sample Input 2

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

Output for the Sample Input 2

-1

ヘリリンは完全に囲まれているので、ゴールまで移動することができない。

Sample Input 3

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

Output for the Sample Input 3

3

斜めの経路を通るためには、3回反時計周りに回転しなければならない。

Sample Input 4

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

Output for the Sample Input 4

-1

ヘリリンは障害物にぴったり接することができないので、隙間のところで回転してゴールまで移動することはできない。
20XX年, ICPC (Ikuta's Computer Pollutes Community) 商店街の経営者たちは大気汚染に悩まされていた。かつての活気を取り戻すためにも大気の綺麗さを一定以上にしなければならない。

商店街の店は一列に並んでおり、1からnで番号付けられている。
現在、おのおのの店のまわりの大気の綺麗さは pi である。
あなたは2からn−1番目の店を選んで、その周辺の大気を循環させることで, その店と周囲の店の大気の綺麗さを変更することができる。
正確にいうと, i ( 2 ≤ i ≤ n−1 )番目を選んだとき、pi−1とpi+1にはpiだけ加算され, 逆にpiには2piだけ減算される。つまり、新しい大気の綺麗さp'は,

p'i−1 = pi−1 + pi

p'i = pi − 2 pi

p'i+1 = pi+1 + pi
となる。
この操作を繰り返して、すべての店の大気の綺麗さpiを、許容できる最低限の大気の綺麗さ li 以上にすることが目的である。

大気を循環させるためには多大な費用がかかるため、なるべく少ない回数で達成したい。
ICPC商店街の未来のためにも力を貸してほしい。

Input

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

n
p1 ... pn
l1 ... ln

nは店の数、piはi番目の店の現在の大気の綺麗さ、liはi番目の店が達成すべき大気の綺麗さを表す。

Constraints

入力中の各変数は以下の制約を満たす。

3 ≤ n ≤ 105

−108 ≤ pi ≤ 108

1 ≤ li ≤ 108

Output

すべての店が大気の綺麗さを達成するために必要な
大気を循環させる回数の最小値を1行に出力せよ。

どのように操作しても達成できない場合には−1を出力せよ。

Sample Input 1

3
3 -1 4
2 1 3

Output for the Sample Input 1

1

店2を選ぶことで, 店1,2,3の大気の綺麗さはそれぞれ2, 1, 3となる。

Sample Input 2

3
3 -1 4
2 1 5

Output for the Sample Input 2

-1

どのように操作しても店3が大気の綺麗さを達成できない。

Sample Input 3

4
3 -1 -1 3
1 1 1 1

Output for the Sample Input 3

3

店2, 店3, 店2の順番で大気を循環させると達成することができる。
キョウトという街は古い寺社仏閣で有名な観光地である。

イクタ君は数人の友人とキョウト観光に来ていたが、全員が好き勝手に行動した結果、みんな迷子になってしまった。

そこでイクタ君は、なるべく早く全員と合流するためには集合場所をどこにするのがよいか考えることにした。

キョウトの道路は東西と南北に距離10の間隔で無数に走っており、無限に広がる正方格子とみなすことができる。

道路は直線であるとみなし、幅は無いものとする。
また、街の中心を基準として東に距離x、北に距離y移動した位置を(x,y)という座標で表す。

街の中心である(0,0)では東西の道路と南北の道路が交差している。

下図はキョウトの道路と、いくつかの点の座標を図示したものである。

N人の観光客の座標(Xi,Yi)が整数で与えられるので、N人が道路上を移動して1点に集合するのに必要な時間の最小値を答えよ。

観光客は時間1あたり距離1の速さで連続的に道路上を動くことができるとする。

与えられるN人の観光客の座標はそれぞれ相異なり、また全ての座標は道路上にあることが保証されている。

また、複数の観光客が同時に1点に存在したり、観光客同士がすれ違うように移動することも可能であるとする。

Input

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

N
X1 Y1
...
XN YN

1行目のNは観光客の人数である。
次のN行のうちi行目(1≤ i ≤ N)はi番目の観光客の位置(Xi, Yi)を表している。
Xi,Yiはそれぞれ整数で与えられる。

Constraints

入力中の各変数は以下の制約を満たす。

2 ≤ N ≤ 10000

−108 ≤ Xi, Yi ≤ 108

i ≠ j のとき (Xi, Yi) ≠ (Xj, Yj)

Xi と Yi のうち少なくとも一方は10の倍数である

Output

問題の解を1行に出力せよ。
10−3までの絶対誤差を許容する。

Sample Input 1

3
5 10
-10 0
3 -10

Output for the Sample Input 1

14

(0, 1)に集合すればよい（この入力例は問題文中の図と対応している）

Sample Input 2

2
0 0
0 1

Output for the Sample Input 2

0.5

(0, 0.5)に集合すればよい（整数座標以外に集まる場合もあることに注意せよ）

Sample Input 3

4
100000000 100000000
100000000 -100000000
-100000000 100000000
-100000000 -100000000

Output for the Sample Input 3

200000000