만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

강아지 Пёсик

시간 제한3초메모리 제한1024 MB

요약
연결된 그래프에서 단순 사이클이 최대 세 개일 때, 가장 긴 단순 사이클을 찾아 정점 번호를 순서대로 출력합니다.
난이도

어려움10점 중 8점

유형
그래프, DFS, 구현
정답자
아직 제출이 없습니다

문제

앨릭스가 키우는 강아지 Пёсик은 다른 강아지들처럼 공을 가지고 노는 것을 좋아한다. 이번에는 공 대신 금속 고리를 이어 만든 구조물이 생겼다. 각 고리는 다른 고리 몇 개와 연결될 수 있다. Пёсик은 당장 이걸로 놀고 싶어 한다. 그래서 고리 몇 개를 제거하고(0개일 수도 있음), 고리 사이의 연결 몇 개를 끊는다(0개일 수도 있음). 그 결과 각 고리가 정확히 이웃한 두 고리와만 연결된 닫힌 사슬이 남아야 한다. 사슬의 각 고리는 정확히 한 번씩 사용되어야 한다.

Пёсик은 만들어진 사슬이 최대한 길기를 바란다. 원래 구조에서 닫힌 사슬을 만드는 방법은 몇 가지뿐이며, 많아야 세 가지이다.

입력

첫 줄에 두 정수 nn과 mm (1≤n≤200 0001 \le n \le 200{\,}000, 1≤m≤500 0001 \le m \le 500{\,}000)이 주어진다. 각각 고리의 개수와 고리 사이 연결의 개수이다. 이어지는 mm개의 줄에는 두 정수 uu와 vv (1≤u,v≤n1 \le u, v \le n)가 주어지며, 고리 uu와 고리 vv가 연결되어 있음을 뜻한다.

자기 자신과 연결된 고리는 없고, 같은 두 고리가 두 번 이상 연결되는 경우도 없다. 구조에서 닫힌 사슬을 최소 하나 얻을 수 있음이 보장되며, 고리와 연결을 제거해서 닫힌 사슬이 남는 방법은 많아야 세 가지이다. 원래 구조는 연결되어 있다.

출력

첫 줄에 Пёсик이 얻을 수 있는 가장 긴 닫힌 사슬의 길이 kk를 출력한다. 둘째 줄에는 사슬에 있는 고리의 번호 a1,a2,…,aka_1, a_2, \dots, a_k를 kk개 출력한다.

모든 aia_i는 서로 달라야 한다. 고리 a1a_1과 a2a_2, a2a_2와 a3a_3, …\dots, ak−1a_{k-1}과 aka_k, 그리고 aka_k와 a1a_1은 원래 구조에서 연결되어 있어야 한다.

예제1

  1. 예제 1

    입력
    4 5
    3 2
    2 4
    4 3
    2 1
    1 3
    
    예상 출력
    4
    3 1 2 4