AT_kupc2020_k Deleting Edges
Description
[problemUrl]: https://atcoder.jp/contests/kupc2020/tasks/kupc2020_k
$ N_1\ +\ N_2 $ 頂点 $ M $ 辺からなる単純無向 $ 2 $ 部グラフがあります。
このグラフの頂点には $ 1 $ から $ N_1\ +\ N_2 $ までの番号がついていて、辺には $ 1 $ から $ M $ までの番号がついています。
辺 $ i $ は頂点 $ a_i $ と頂点 $ b_i $ を結んでいます。
ここで $ a_i,\ b_i $ は、$ 1\ \le\ a_i\ \le\ N_1 $ および $ N_1\ +\ 1\ \le\ b_i\ \le\ N_1\ +\ N_2 $ を満たします。
$ M $ 本すべての辺がある状態での、頂点 $ i $ の次数を $ C_i $ とおきます。
あなたは次の操作をできるだけ多くの回数行おうとしています。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ N_1 $ $ N_2 $ $ M $ $ a_1 $ $ b_1 $ $ a_2 $ $ b_2 $ $ \vdots $ $ a_M $ $ b_M $
Output Format
行える操作の回数の最大値と、それを達成する操作列を $ 1 $ つ求め、以下の形式で出力せよ。
$ 1 $ 行目には、行える操作の回数の最大値 $ K $ を出力せよ。
$ i\ +\ 1 $ 行目 $ (1\ \le\ i\ \le\ K) $ には、$ i $ 回目の操作で選ぶ辺の番号 $ x_i $ を出力せよ。
操作回数が最大となるような操作列は複数存在するかもしれないが、そのうちのどれを出力しても正答となる。
> $ K $ $ x_1 $ $ x_2 $ $ \ldots $ $ x_K $
Explanation/Hint
### 操作
- 頂点 $ i $ の現在の次数を $ D_i $ とおく。
- まだ消していない辺を $ 1 $ つ選んで消す。
- ただし、選ぶ辺の番号を $ x $ としたとき、次の条件をすべて満たさなければならない。
- $ D_{a_x} $ を $ 2 $ で割った余りは $ C_{b_x} $ を $ 2 $ で割った余りと一致しなければならない。
- $ D_{b_x} $ を $ 2 $ で割った余りは $ C_{a_x} $ を $ 2 $ で割った余りと一致しなければならない。
行える操作の回数の最大値を求め、さらにそれを達成する操作列を $ 1 $ つ求めてください。
### 制約
- $ 1\ \le\ N_1\ \le\ 3000 $
- $ 1\ \le\ N_2\ \le\ 3000 $
- $ 1\ \le\ M\ \le\ \min(3000,\ N_1\ N_2) $
- $ 1\ \le\ a_i\ \le\ N_1\ (1\ \le\ i\ \le\ M) $
- $ N_1\ +\ 1\ \le\ b_i\ \le\ N_1\ +\ N_2\ (1\ \le\ i\ \le\ M) $
- $ 1\ \le\ i\