#include using namespace std; #define all(x) x.begin(), x.end() typedef vector vi; typedef pair ii; typedef long long ll; const int mod = 1e9 + 7; const ll inf = 3e18 + 5; vi adj[100500], path; bool bio[100500]; ll res; int I; void dfs(int S, int u, ll sum, int c){ if(sum > res){ res = sum; I = S; } bio[u] = 1; for(int v : adj[u]){ if(bio[v]) continue; dfs(S, v, sum + c * v, c + 1); } } void dfs2(int u, ll sum, int c){ if(sum == res){ cout << path.size() << '\n'; for(int x : path){ cout << x << '\n'; } exit(0); } bio[u] = 1; for(int v : adj[u]){ if(bio[v]) continue; path.push_back(v); dfs2(v, sum + v * c, c + 1); path.pop_back(); } } vi cu; void dfs3(int u, ll sum, int c){ bio[u] = 1; if(sum > res){ res = sum; path = cu; } for(int v : adj[u]){ if(bio[v]) continue; cu.push_back(v); dfs3(v, sum + v * c, c + 1); cu.pop_back(); } } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); freopen ("maxpath.in", "r", stdin); freopen ("maxpath.out", "w", stdout); int n, m; cin >> n >> m; for(int i = 0; i < m; i++){ int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } if(n <= 1000){ for(int i = 1; i <= n; i++){ dfs(i, i, i, 2); memset(bio, 0, sizeof(bio)); } path.push_back(I); dfs2(I, I, 2); } else{ for(int i = 1; i <= n; i++){ if(!bio[i]){ cu.push_back(i); dfs3(i, i, 2); cu.pop_back(); } } cout << path.size() << '\n'; for(auto x : path){ cout << x << '\n'; } } }