왕국

아직 제출이 없습니다시간 제한1초메모리 제한256 MB

문제

바이트리아에는 도시가 nn개 있고, 도시를 잇는 양방향 도로가 짝수 개 있다. 도로망은 왕국의 아무 두 도시 사이든 오갈 수 있게 이어져 있다.

왕 바이트는 짝수를 좋아한다. 어떤 도시에서 나가는 도로가 홀수 개라는 사실을 알고는 곧바로 도로망을 늘리라고 명했다.

참모는 왕국 재정을 잘 안다. 그 공사를 강행하면 백성이 고대하는 동계 올림픽을 열 수 없다. 그래서 바이트리아에 짝수인 성질이 이미 충분하다고 왕을 설득하고, 공사는 내년으로 미뤄 달라고 청할 생각이다.

먼저, 나가는 도로가 홀수 개인 도시가 짝수 개라는 사실로 왕을 놀라게 한다. 그다음 그 도시들을 둘씩 짝 짓고, 각 쌍 (u,v)(u, v)마다 uu에서 vv로 가며 도로를 짝수 개 쓰는 경로를 잡는다. 한 경로에서 같은 도로를 두 번 쓰지 않는다. 서로 다른 경로가 같은 도로를 나누어 쓰지도 않는다. 같은 도시는 여러 번 지나도 된다.

참모는 이 설명이면 왕이 납득하리라 본다. 다만 경로를 직접 고르지 못해 당신에게 도움을 청했다.

입력

첫 줄에 정수 nnmm이 주어진다 (2n,m2500002 \le n, m \le 250000). 각각 도시 수와 도로 수이다. mm은 짝수이다.

다음 mm줄에 정수 aa, bb가 주어진다 (1a,bn1 \le a, b \le n, aba \ne b). 도시 aabb를 잇는 양방향 도로를 뜻한다. 같은 두 도시를 잇는 도로는 하나뿐이다.

나가는 도로가 홀수 개인 도시가 적어도 하나 있다고 가정해도 된다.

출력

나가는 도로가 홀수 개인 도시 개수를 kk라 하자. kk는 짝수이다.

참모의 계획대로 경로를 잡을 수 없으면 한 줄에 NIE를 출력한다.

잡을 수 있으면 k/2k/2개 경로를 아래 규칙으로 유일하게 정해 출력한다.

도시 11에서 깊이 우선 탐색으로 신장 나무를 만든다. 아직 보지 않은 이웃 도시 중 번호가 가장 작은 도시부터 방문한다. 각 도시 xx를 복사본 x0x_0, x1x_1 둘로 나누고, 더미 도시 00을 둔다. 원래 도로 각각을 다음처럼 복사본 사이 도로로 옮긴다.

탐색이 도시 xx에서, 이미 방문했고 방문 시각이 xx보다 작은 도시 yy로 가는 도로를 보면 그 도로를 x1x_1y0y_0 사이에 둔다. 나무에서 부모 pp의 자식 cc의 부분나무를 끝낸 뒤, 그때까지 c1c_1에 붙은 도로 개수가 홀수이면 나무 도로를 c1c_1p0p_0 사이에 두고, 짝수이면 c0c_0p1p_1 사이에 둔다.

홀수 차수 도시 uu마다 도시 00u0u_0을 잇는 더미 도로를 추가한다. 이 새 그래프에서 00에서 시작하는 오일러 회로를 찾는다. 쓰지 않은 인접 도로가 여러 개이면 원래 번호가 가장 작은 도로를 택한다. 더미 도로의 번호는 1-1로 보고, 번호가 같으면 반대쪽 도시 번호가 더 작은 쪽을 택한다.

더미 도로를 회로에서 빼면 짝수 길이 경로 k/2k/2개가 남는다. 회로에 나온 순서대로 출력한다.

각 경로 설명은 두 줄이다. 첫째 줄에 시작 도시 uiu_i, 끝 도시 viv_i, 도로 수 lil_i를 출력한다. lil_i는 짝수이다. 둘째 줄에 그 경로가 지나는 도로 번호 lil_i개를 순서대로 출력한다. 도로는 입력에 나온 순서대로 11부터 mm까지 번호가 매겨진다.