atcoder#ABC217F. [ABC217F] Make Pair
[ABC217F] Make Pair
配点 : 点
問題文
人の生徒が一列に並んでおり、左から順に生徒 , 生徒 , , 生徒 と番号が付いています。 人の生徒はどの 人も互いに仲が良いか悪いかのどちらかであり、 具体的には について生徒 と生徒 の仲が良く、これら以外のどの 人も仲が悪いです。
先生は以下の操作を 回繰り返して、 人組のペアを 組作ることにしました。
- 隣り合う 人であって仲が良いような 人をペアとして選び、列から抜く。
- 抜けた 人が列の端でなかったならば、その後、列を詰める。すなわち、抜けた 人の左右にいた 人が新しく隣り合う。
このとき、 回の操作方法としてあり得るものの数を で割った余りを求めてください。 ただし 回の操作方法が異なるとは、ある が存在して、 回目の操作で 選ばれた 人組がペアとして異なることをいいます。
制約
- はすべて異なる。
- 入力は全て整数である。
入力
入力は以下の形式で標準入力から与えられる。
出力
操作方法としてあり得るものの数を で割った余りを出力せよ。
2 3
1 2
1 4
2 3
1
度目の操作で生徒 と生徒 を選び、 度目の操作で生徒 と生徒 を選ぶのが 唯一の操作方法です。 度目の操作で生徒 と生徒 を選ぶと、 生徒 と生徒 が残りますが、この 人は仲が悪いため 度目の操作でペアにすることができません。 よって、 を出力します。
2 2
1 2
3 4
2
度目の操作で生徒 と生徒 を選び、 度目の操作で生徒 と生徒 を選ぶのが 通り、 度目の操作で生徒 と生徒 を選び、 度目の操作で生徒 と生徒 を選ぶのが 通りであわせて 通りあります。 この つが区別されることに注意してください。
2 2
1 3
2 4
0
度目の操作で選べるペアが無いため条件をみたす操作方法は無く、 を出力します。