A - AtCoder Jumper

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 500

問題文

本サイトのこの部分にお気づきでしょうか。

これらの番号は、どのページからどのページへも少ないクリック数で到達できるように、なおかつ各ページのリンク数が多くなりすぎないように配慮して選ばれています。 この問題では、似たようなことを 1 ページあたり リンク 2 で実現していただきましょう。

すぬけ君は、1 から N までの番号が振られた N ページからなるサイトを作りました。 あなたには、各 i (1 \leq i \leq N) について 2 つの整数 a_i, b_i (1 \leq a_i, b_i \leq N) を選び、ページ i にページ a_i へのリンクとページ b_i へのリンクを貼ることで、以下の制約を満たしていただきます。

  • どのページから他のどのページへも、リンクを 10 回以下クリックすることで到達可能でなければならない。

この問題の制約の下で、これが常に可能であることは証明可能です。

制約

  • 1 \leq N \leq 1000

入力

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

N

出力

答えを以下の形式で出力せよ。

a_1 \ b_1
:
a_N \ b_N

複数通りの答えが考えられる場合は、そのどれを出力してもよい。


入力例 1

1

出力例 1

1 1

すぬけ君は 1 ページだけの見事なサイトを作りました。 自分自身へのリンクも 2 つあります。


入力例 2

3

出力例 2

2 3
1 3
1 2

ここでは、どのページからどのページへも直接のリンクで到達できます。

Score : 500 points

Problem Statement

Have you noticed this part of AtCoder website?

Here the numbers are carefully chosen so that we can jump from any page to any page in small number of steps, while each page doesn't contain too many links. In this task you are asked to do a similar thing with only two links on each page!

Snuke made a website with N pages numbered 1 through N. For each i (1 \leq i \leq N), choose two integers a_i and b_i (1 \leq a_i, b_i \leq N), and add two links on Page i: a link to Page a_i and a link to Page b_i. The website must satisfy the following constraint:

  • You must be able to jump from any page to any other page by clicking at most 10 links.

Under the constraints of the problem, we can prove that this is always possible.

Constraints

  • 1 \leq N \leq 1000

Input

Input is given from Standard Input in the following format:

N

Output

Print the answer in the following format:

a_1 \ b_1
:
a_N \ b_N

In case there are multiple possible answers, print any.


Sample Input 1

1

Sample Output 1

1 1

Snuke made an excellent website with only one page. It even contains two links to itself!


Sample Input 2

3

Sample Output 2

2 3
1 3
1 2

Here we can jump from any page to any other page by a direct link.

B - Three Coins

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 800

問題文

N 個のマスが一列に並んでおり、左から右に 1 から N までの番号が振られています。

はじめ、すべてのマスは空です。 あなたは、以下の 2 種類の操作を任意の順に何度でも行うことができます。

  • 連続する 3 マスであってコインが置かれていないものを選び、それぞれにコインを置く。
  • 連続する 3 マスであっていずれにもコインが置かれているものを選び、それぞれからコインを取り除く。

操作を済ませた後、左から i マス目にコインが置かれているなら、a_i 点が得られます。 コインがあるマス全てから得られる点数の合計が、あなたの得点です。

得られる最高得点を求めてください。

制約

  • 3 \leq N \leq 500
  • -100 \leq a_i \leq 100
  • 入力中の全ての値は整数である。

入力

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

N
a_1
a_2
:
a_N

出力

答えを出力せよ。


入力例 1

4
1
2
3
4

出力例 1

9

コインが置かれたマスを o で、置かれていないマスを . で表します。 最適な手順の 1 つは次の通りです。

.... \rightarrow .ooo

このようにすれば、2 + 3 + 4 = 9 点を得られます。


入力例 2

6
3
-2
-1
0
-1
4

出力例 2

6

最適な手順の 1 つは次の通りです。

...... \rightarrow ooo... \rightarrow oooooo \rightarrow o...oo

このようにすれば、3 + (-1) + 4 = 6 点を得られます。


入力例 3

10
-84
-60
-41
-100
8
-8
-52
-62
-61
-76

出力例 3

0

Score : 800 points

Problem Statement

N cells are arranged in a row. The cells are numbered 1 through N from left to right.

Initially, all cells are empty. You can perform the following two types of operation arbitrary number of times in arbitrary order:

  • Choose three consecutive empty cells, and put a coin on each of the three cells.
  • Choose three consecutive cells with coins, and remove all three coins on the chosen cells.

After you finish performing operations, if the i-th cell contains a coin, you get a_i points. Your score is the sum of all points you get from the cells with coins.

Compute the maximum possible score you can earn.

Constraints

  • 3 \leq N \leq 500
  • -100 \leq a_i \leq 100
  • All values in the input are integers.

Input

Input is given from Standard Input in the following format:

N
a_1
a_2
:
a_N

Output

Print the answer.


Sample Input 1

4
1
2
3
4

Sample Output 1

9

We represent a cell with a coin as o and a cell without a coin as . (a dot). One optimal way is as follows:

.... \rightarrow .ooo

We get 2 + 3 + 4 = 9 points this way.


Sample Input 2

6
3
-2
-1
0
-1
4

Sample Output 2

6

One optimal way is as follows:

...... \rightarrow ooo... \rightarrow oooooo \rightarrow o...oo

We get 3 + (-1) + 4 = 6 points this way.


Sample Input 3

10
-84
-60
-41
-100
8
-8
-52
-62
-61
-76

Sample Output 3

0
C - Block Game

Time Limit: 4 sec / Memory Limit: 1024 MB

配点 : 1000

問題文

左右に無限に続くマスの列があります。 これを用いて、あなたとすぬけ君は以下のゲームをプレイします。

  • 審判が、BS からなる「ターン文字列」t を作り、二人に見せる。
  • まず、すぬけ君がマスのうち 1 つの上に立つ。
  • そして、各 i = 1, ..., |t| について、この順番に以下が行われる。
    • ti 文字目が B のとき、あなたのターンである。あなたは、他のブロックやすぬけ君を含まないマスを 1 つ選び、ブロックを置く。設置後、すぬけ君の両隣のマスにともにブロックが置かれている場合、あなたの勝利でゲームが終了する。
    • ti 文字目が S のとき、すぬけ君のターンである。すぬけ君は、隣の空きマスに移動するか、何もしない。
  • この時点でゲームが終了していない場合、すぬけ君の勝利でゲームが終了する。

B, S, ? からなる文字列 s が与えられます。 s に含まれる ? の個数が Q であるとき、? をそれぞれ B または S で置き換えてターン文字列とする方法は 2^Q 通り存在します。 これらの 2^Q 個のターン文字列のうち、両プレイヤーが最適に行動したときにあなたが勝利するようなものは何個あるでしょうか。 この答えを 998,244,353 で割った余りを求めてください。

制約

  • 1 \leq |s| \leq 10^6
  • sB, S, ? からなる。

入力

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

s

出力

答えを出力せよ。


入力例 1

BSSBS

出力例 1

0

1, 4 ターン目があなたのターンで、2, 3, 5 ターン目がすぬけ君のターンです。 この場合、両者が最適に行動するとすぬけ君が勝つことがわかります。


入力例 2

?S?B????S????????B??????B??S??

出力例 2

16777197

Score : 1000 points

Problem Statement

There is a sequence of cells that extends infinitely to both directions. You and Snuke play the following game:

  • The judge chooses a string t consisting of B and S, called turn string, and show it to both players.
  • First, Snuke stands on one of the cells.
  • Then, for each i = 1, ..., |t| in this order, the following happens:
    • If the i-th letter of t is B, it is your turn. You choose a cell that contains neither other blocks nor Snuke, and put a block on the cell. After that, if both of the two cells adjacent to Snuke's cell are blocked, you win and the game ends.
    • If the i-th letter of t is S, it is Snuke's turn. He may move to an adjacent unblocked cell, or doesn't do anything.
  • If the game still hasn't ended, Snuke wins and the game ends.

You are given a string s consisting of B, S, and ?. If s contains Q ?s, there are 2^Q ways to replace each ? with B or S and get a turn string. Among those 2^Q strings, how many will end up with your winning, in case both players play optimally? Find the answer modulo 998,244,353.

Constraints

  • 1 \leq |s| \leq 10^6
  • s consists of B, S, and ?.

Input

Input is given from Standard Input in the following format:

s

Output

Print the answer.


Sample Input 1

BSSBS

Sample Output 1

0

You take the 1st and the 4th turn, and Snuke takes the 2nd, the 3rd, and the 5th turn. In this case, if both players play optimally, it turns out that Snuke wins.


Sample Input 2

?S?B????S????????B??????B??S??

Sample Output 2

16777197
D - Shopping

Time Limit: 4 sec / Memory Limit: 1024 MB

配点 : 1300

問題文

1 から N までの番号が振られた N 人の人と、1 から K までの番号が振られた K 個の商品があります。 これから、ターン制のゲームが行われます。 ターンは、番号 1 の人、番号 2 の人、番号 3 の人、\ldots、番号 N の人、番号 1 の人 、\ldots、番号 N の人、番号 1 の人、\ldots、の順に回り、全ての商品が誰かに獲得されるまで続きます。

各ターンには、以下が行われます。

  • 自分のターンが来た人がすでに商品を獲得済みの場合、何も行われない。
  • そうでない場合、その人は、まだ自分が選んでいない商品から 1 つを等確率でランダムに選び、審判であるすぬけ君に秘密裏に伝える。 その商品がすでに他の誰かに獲得されていたなら、何も起こらない。そうでないなら、その商品はその人が獲得する。

i について、番号 i の人がいずれかの商品を獲得する確率を \bmod 998,244,353 で計算してください (注記参照)。

注記

  • 商品をランダムに選ぶ行為は全て独立に行われます。
  • ゲームが有限のターン数で終了することは証明可能です。
  • 参加者が商品を選ぶ場面で、まだその人が選んでいない商品が必ず 1 つ以上存在することも証明可能です。
  • 求めるべき確率が有理数であることも証明可能です。確率を出力する際は、まずその確率を分数 \frac{y}{x} として表してください。ここで、x, y は整数であり、xP = 998,244,353 で割り切れてはなりません (この問題の制約の下で、そのような表現は必ず可能です)。そして、xz \equiv y \pmod{P} なる 0 以上 P - 1 以下の唯一の整数 z を出力してください。

制約

  • 1 \leq K \leq N \leq 40
  • 入力中の全ての値は整数である。

入力

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

N K

出力

N 行出力せよ。 i 行目には、番号 i の人がいずれかの商品を獲得する確率を \bmod 998,244,353 で出力すること。


入力例 1

3 2

出力例 1

1
249561089
748683265
  • まず、番号 1 の人が商品を 1 個選んで獲得します。ここで商品 p が選ばれたとします。
    • そして、1/2 の確率で、番号 2 の人がもう一方の商品を選んで獲得し、ゲームが終了します。
    • 1/2 の確率で、番号 2 の人も商品 p を選んでしまって獲得できず、番号 3 の人のターンとなります。
      • 1/4 の確率で、番号 3 の人がもう一方の商品を選んで獲得し、ゲームが終了します。
      • 1/4 の確率で、番号 3 の人も商品 p を選んでしまいます。その次は番号 1 の人のターンですが、商品を獲得済みのため何もしません。その次は番号 2 の人のターンであり、商品 p は前回選んだため今回は必ずもう一方の商品を選んで獲得し、ゲームが終了します。

以上より、番号 1, 2, 3 の人がいずれかの商品を獲得する確率はそれぞれ 1, \frac{3}{4}, \frac{1}{4} です。


入力例 2

4 3

出力例 2

1
314262112
767169272
915057324

商品獲得確率はそれぞれ 1, \frac{47}{54}, \frac{77}{108}, \frac{5}{12} です。


入力例 3

40 10

出力例 3

1
868517173
27621563
837064957
222682471
512462123
662169358
927654899
421237429
47896491
462367772
888812171
300869511
63754652
144548024
358216674
895724239
274552277
722622637
946769993
579325471
777654313
142897955
607284898
8038340
863909530
63295741
862961672
335905745
944425523
358698956
299986928
847582651
197657467
180361665
412489246
762713624
410322243
646538576
79047758

Score : 1300 points

Problem Statement

There are N people numbered 1 through N, and K items numbered 1 through K. They play a turn-based game. Person 1 takes the first turn, Person 2 takes the next turn, then Person 3, \ldots, Person N, then Person 1 again, \ldots, Person N, Person 1 again, \ldots, and so on, until all items are taken.

In each turn, the following happens:

  • If the person already wins an item, nothing happens.
  • Otherwise, he chooses one of the items he hasn't chosen yet uniformly at random, and secretly tells it to Snuke, the judge of the game. If the item is already taken by someone else, nothing happens; otherwise he wins the item.

For each i, compute the probability that Person i wins an item, modulo 998,244,353 (as described in the Notes section).

Notes

  • All random choices are made independently.
  • We can prove that the game always ends in finite number of steps.
  • We can also prove that, whenever a player is asked to choose an item, he has at least one item he hasn't chosen yet.
  • We can also prove that the probabilities are rational numbers. When you print a probability, first write it as a fraction \frac{y}{x}, where x, y are integers and x is not divisible by P = 998,244,353 (under the constraints of the problem, such representation is always possible). Then, you need to print the only integer z between 0 and P - 1, inclusive, that satisfies xz \equiv y \pmod{P}.

Constraints

  • 1 \leq K \leq N \leq 40
  • All values in the input are integers.

Input

Input is given from Standard Input in the following format:

N K

Output

Print N lines. On the i-th line, print the probability that the i-th person wins an item, modulo 998,244,353.


Sample Input 1

3 2

Sample Output 1

1
249561089
748683265
  • First, Person 1 chooses an item (call it Item p), and wins it.
    • Then, with 1/2 probability, Person 2 chooses the other item in the next turn and wins it, and the game ends.
    • With 1/2 probability, Person 2 chooses p, he doesn't win it, and Person 3 takes the next turn.
      • With 1/4 probability, Person 3 chooses the other item, wins it, and the game ends.
      • With 1/4 probability, Person 3 chooses p again. Then, next turn is Person 1's and nothing happens because he has already won an item. Then, in the next turn, Person 2 chooses the other item for sure because he has already chosen p in his previous turn, so he wins an item this time, and the game ends.

To summarize, Person 1, 2, 3 will get an item with probability 1, \frac{3}{4}, \frac{1}{4}, respectively.


Sample Input 2

4 3

Sample Output 2

1
314262112
767169272
915057324

The probabilities are 1, \frac{47}{54}, \frac{77}{108}, \frac{5}{12}.


Sample Input 3

40 10

Sample Output 3

1
868517173
27621563
837064957
222682471
512462123
662169358
927654899
421237429
47896491
462367772
888812171
300869511
63754652
144548024
358216674
895724239
274552277
722622637
946769993
579325471
777654313
142897955
607284898
8038340
863909530
63295741
862961672
335905745
944425523
358698956
299986928
847582651
197657467
180361665
412489246
762713624
410322243
646538576
79047758
E - Three Traffic Lights

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 1800

問題文

3 機の信号機があり、1, 2, 3 と番号が振られています。 信号機 i は、「g_i 秒間青、r_i 秒間赤、g_i 秒間青、r_i 秒間赤、\ldots」というパターンを永久に繰り返します。

いま、3 機の信号機が一斉に青に変わりました。 続く (g_1 + r_1)(g_2 + r_2)(g_3 + r_3) 秒間のうち、全ての信号機が青く点灯している時間帯は合計で何秒あるでしょうか。 この答えを 998,244,353 で割った余りを計算してください。

制約

  • 1 \leq g_1, r_1, g_2, r_2, g_3, r_3 \leq 10^{12}
  • 入力中の全ての値は整数である。

入力

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

g_1 r_1 g_2 r_2 g_3 r_3

出力

答えを出力せよ。


入力例 1

1 1 2 1 3 1

出力例 1

8

続く 24 秒間のうち、

  • 信号機 1 が青く点灯している時間帯は [0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10, 11], [12, 13], [14, 15], [16, 17], [18, 19], [20, 21], [22, 23] です。
  • 信号機 2 が青く点灯している時間帯は [0, 2], [3, 5], [6, 8], [9, 11], [12, 14], [15, 17], [18, 20], [21, 23] です。
  • 信号機 3 が青く点灯している時間帯は [0, 3], [4, 7], [8, 11], [12, 15], [16, 19], [20, 23] です。

よって、全ての信号機が青く点灯している時間帯は [0, 1], [4, 5], [6, 7], [10, 11], [12, 13], [16, 17], [18, 19], [22, 23] であり、合計で 8 秒あります。


入力例 2

7 3 5 7 11 4

出力例 2

420

入力例 3

999999999991 999999999992 999999999993 999999999994 999999999995 999999999996

出力例 3

120938286

Score : 1800 points

Problem Statement

There are three traffic lights numbered 1, 2, 3. Traffic Light i eternally repeats the following pattern: green for g_i seconds, red for r_i seconds, green for g_i seconds, red for r_i seconds, and so on.

All three lights have turned green just now. During the next (g_1 + r_1)(g_2 + r_2)(g_3 + r_3) seconds, what is the total duration of the time when all lights are green? Compute the answer modulo 998,244,353.

Constraints

  • 1 \leq g_1, r_1, g_2, r_2, g_3, r_3 \leq 10^{12}
  • All values in the input are integers.

Input

Input is given from Standard Input in the following format:

g_1 r_1 g_2 r_2 g_3 r_3

Output

Print the answer.


Sample Input 1

1 1 2 1 3 1

Sample Output 1

8

During the next 24 seconds,

  • Light 1 is green during time intervals [0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10, 11], [12, 13], [14, 15], [16, 17], [18, 19], [20, 21], [22, 23].
  • Light 2 is green during time intervals [0, 2], [3, 5], [6, 8], [9, 11], [12, 14], [15, 17], [18, 20], [21, 23].
  • Light 3 is green during time intervals [0, 3], [4, 7], [8, 11], [12, 15], [16, 19], [20, 23].

Thus, all lights are green during time intervals [0, 1], [4, 5], [6, 7], [10, 11], [12, 13], [16, 17], [18, 19], [22, 23].

The total duration is 8 seconds.


Sample Input 2

7 3 5 7 11 4

Sample Output 2

420

Sample Input 3

999999999991 999999999992 999999999993 999999999994 999999999995 999999999996

Sample Output 3

120938286
F - NAND Tree

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 2000

問題文

各頂点に 0 または 1 が書かれた木があります。 この木は N 個の頂点を持ち、それらには 1 から N までの番号が振られています。 各 i について、頂点 a_i と頂点 b_i を結ぶ辺が存在します。 頂点 i に書かれた数は c_i です。

すぬけ君は、この木に以下の操作を繰り返します。

  • 辺を 1 本選んで縮約し、消された 2 個の頂点に書かれていた数の NAND を新たな頂点に書き込む。

N - 1 回の操作後、木は 1 個の頂点となります。 このような操作の行い方は (N-1)! 通りありますが、そのうち最後の頂点に 1 が書き込まれるものは何通りあるでしょうか。 この答えを 2 で割った余りを計算してください。

注記

  • 演算 NAND の定義は次の通りです: NAND(0, 0) = NAND(0, 1) = NAND(1, 0) = 1, NAND(1, 1) = 0.
  • 頂点 s と頂点 t を結ぶ辺を縮約する際は、その辺を取り除くと同時に 2 頂点を併合します。 縮約後の木において、併合により生まれた頂点と頂点 u を結ぶ辺が存在するのは、縮約前の木において su を結ぶ辺または tu を結ぶ辺が存在するときであり、またそのときに限られます。

制約

  • 2 \leq N \leq 300
  • 1 \leq a_i < b_i \leq N
  • 入力が表すグラフは木である。
  • 0 \leq c_i \leq 1
  • 入力中の全ての値は整数である。

入力

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

N
a_1 b_1
:
a_{N-1} b_{N-1}
c_1 c_2 \cdots c_N

出力

答えを出力せよ。


入力例 1

4
1 2
2 3
2 4
0 1 1 0

出力例 1

0

6 通りの操作順のうち 4 通りで最後の頂点に 1 が書き込まれることがわかります。よって、答えは 4 \ mod \ 2 = 0 です。


入力例 2

4
1 2
2 3
3 4
1 1 0 1

出力例 2

1

入力例 3

20
3 15
1 12
10 16
3 19
5 20
1 9
6 13
14 19
2 4
8 11
12 16
6 20
2 17
16 18
17 19
7 10
16 20
2 20
8 20
1 0 0 1 1 0 1 1 1 0 0 1 0 1 0 1 1 1 0 0

出力例 3

0

Score : 2000 points

Problem Statement

There is a tree whose vertices are labelled with either 0 or 1. The tree has N vertices numbered 1 through N. For each i, there is an edge connecting Vertex a_i and Vertex b_i. The label of Vertex i is c_i.

Snuke wants to repeat performing the following operation on the tree:

  • Choose an edge, contract it, and label the new vertex with the NAND of the labels of two old vertices.

After performing N - 1 operations, the tree ends up with a single vertex. Among (N-1)! ways to do so, how many will result in a vertex labelled with 1? Compute the answer modulo 2.

Notes

  • NAND operation is defined as follows: NAND(0, 0) = NAND(0, 1) = NAND(1, 0) = 1, NAND(1, 1) = 0.
  • When we contract an edge between Vertex s and Vertex t, we remove the edge, and simultaneously merge the two vertices. There is an edge between the merged vertex and Vertex u in the new tree iff there is an edge between s and u, or an edge between t and u, in the old tree.

Constraints

  • 2 \leq N \leq 300
  • 1 \leq a_i < b_i \leq N
  • The input represents a valid tree.
  • 0 \leq c_i \leq 1
  • All values in the input are integers.

Input

Input is given from Standard Input in the following format:

N
a_1 b_1
:
a_{N-1} b_{N-1}
c_1 c_2 \cdots c_N

Output

Print the answer.


Sample Input 1

4
1 2
2 3
2 4
0 1 1 0

Sample Output 1

0

It turns out that in 4 of all 6 ways the final label will be 1, so the answer is 4 \ mod \ 2 = 0.


Sample Input 2

4
1 2
2 3
3 4
1 1 0 1

Sample Output 2

1

Sample Input 3

20
3 15
1 12
10 16
3 19
5 20
1 9
6 13
14 19
2 4
8 11
12 16
6 20
2 17
16 18
17 19
7 10
16 20
2 20
8 20
1 0 0 1 1 0 1 1 1 0 0 1 0 1 0 1 1 1 0 0

Sample Output 3

0