#include #include #include #include using namespace std; int N, M, used[100001]; struct set_graph{ vector v; }sg[100001]; vectorres; void Input() { int a, b; FILE*in = fopen("maxpath.in", "r"); fscanf(in, "%i %i\n", &N, &M); for (int i = 1; i <= M; i++) { fscanf(in, "%i %i\n", &a, &b); sg[a].v.push_back(b); sg[b].v.push_back(a); } } void Solve(){ int V = N, kon = 0; used[V]++; for (int i = 1; i <= N; i++) { sort(sg[i].v.begin(), sg[i].v.end(), greater()); } res.push_back(V); while (kon == 0) { for (int i = 0; i < 100001; i++) { if (used[sg[V].v[sg[V].v.size() - 1]]) { kon++; break; } if (used[sg[V].v[i]] > 0)continue; used[sg[V].v[i]]++; V = sg[V].v[i]; res.push_back(V); break; } } } void Output(){ FILE *out = fopen("maxpath.out", "w"); fprintf(out, "%i\n", res.size()); for (int i = res.size() - 1; i >= 0; i--) { fprintf(out, "%i\n", res[i]); } } int main(){ Input(); Solve(); Output(); return 0; }