#438. 欧拉回路

欧拉回路

题目描述

原题来自:[UOJ #17]

有一天一位灵魂画师画了一张图,现在要你找出欧拉回路,即在图中找一个环使得每条边都在环上出现恰好一次。

一共两个子任务:

1\red{1}. 这张图是无向图。(50\red{50} 分)

2\red{2}. 这张图是有向图。(50\red{50} 分)

输入格式

第一行一个整数 t\red{t},表示子任务编号。t{1,2}\red{t∈\{1,2\}},如果t=1\red{ t=1} 则表示处理无向图的情况,如果 t=2\red{t=2} 则表示处理有向图的情况。

第二行两个整数 n,m\red{n, m},表示图的结点数和边数。

接下来m\red{ m} 行中,第 i\red{i} 行两个整数 vi,ui​,\red{v_i, u_i​,}表示第 i\red{i }条边(从1\red{ 1 }开始编号)。保证 1vi,uin\red{1 \leq v_i, u_i \leq n}

1.\red{1.} 如果t=1\red{ t=1} 则表示 vi\red{v_i }ui\red{u_i​ }有一条无向边。

2.\red{2. }如果t=2\red{ t=2} 则表示vi\red{ v_i​ }ui\red{u_i }有一条有向边。

图中可能有重边也可能有自环。

输出格式

如果不可以一笔画,输出一行 NO

否则,输出一行 YES,接下来一行输出一组方案。

1\red{1}. 如果 t=1\red{t=1},输出 m\red{m} 个整数 p1,p2,,pm\red{p_1, p_2, \dots, p_m}。令 e=pi\red{e = \lvert p_i|},那么 e\red{e }表示经过的第i\red{ i }条边的编号。如果 pi\red{p_i​ }为正数表示从 ve\red{v_e} 走到 ue\red{u_e}​,否则表示从 ue\red{u_e​ }走到 ve\red{v_e}

2\red{2}. 如果 t=2\red{t=2},输出m\red{ m} 个整数 p1,p2,,pm\red{p_1, p_2, \dots, p_m}。其中pi\red{ p_i }表示经过的第i\red{ i }条边的编号。

样例

输入样例 1

1
3 3
1 2
2 3
1 3

输出样例 1

YES
1 2 -3

输入样例 2

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

输出样例 2

YES
4 1 3 5 2 6

提示

1n105,0m2×105\red{1 \leq n \leq 10^5, 0 \leq m \leq 2 \times 10^5}