#include #include #include int main(){ int n, m; std::cin >> n >> m; std::vector> g(n); std::vector> es(2*m); for (int i = 0; i < 2*m; i += 2){ std::cin >> es[i].first >> es[i].second; es[i+1].second = --es[i].first; es[i+1].first = --es[i].second; g[es[i].first].push_back(i); g[es[i].second].push_back(i+1); } std::vector prev(2*m, -1), done(n, -1), todo = g[0]; for (int i = 0; i < todo.size(); ++i){ int ei = todo[i]; int from = es[ei].first, to = es[ei].second; if (to == 0){ std::vector solution; for (int j = ei; ; j = prev[j]){ solution.push_back(j); if (es[j].first == 0) break; } std::cout << solution.size() + 1 << std::endl << '1'; for (int j = solution.size() - 1; j >= 0; --j) std::cout << ' ' << es[solution[j]].second + 1; std::cout << std::endl; return 0; } if (done[to] == -1){ for (int j : g[to]){ if (es[j].second != from){ todo.push_back(j); prev[j] = ei; } else done[to] = j; } } else if (done[to] >= 0){ todo.push_back(done[to]); prev[done[to]] = ei; done[to] = -2; } } std::cout << "impossible" << std::endl; return 0; }