#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), todo = g[0]; std::vector done(2*m); for (int i : todo) done[i] = true; 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; } for (int j : g[to]){ if (es[j].second != from && !done[j]){ todo.push_back(j); done[j] = true; prev[j] = ei; } } } std::cout << "impossible" << std::endl; return 0; }