#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<vector<int>> g;
vector<int> bestPath;
pair<int, vector<int>> bfs_path(int s) {
vector<int> dist(n+1, -1), par(n+1, -1);
queue<int> q;
dist[s] = 0;
q.push(s);
int far = s;
while(!q.empty()) {
int u = q.front(); q.pop();
for(int v : g[u]) if(dist[v] == -1) {
dist[v] = dist[u] + 1;
par[v] = u;
q.push(v);
if(dist[v] > dist[far]) far = v;
}
}
return {far, par};
}
vector<int> build_path(int s, int t, vector<int>& par) {
vector<int> path;
for(int cur = t; cur != -1; cur = par[cur]) path.push_back(cur);
reverse(path.begin(), path.end());
return path;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
g.assign(n+1, {});
for(int i=0;i<m;i++) {
int u,v; cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
vector<bool> vis(n+1,false);
for(int i=1;i<=n;i++) if(!vis[i]) {
vector<int> comp;
queue<int> q;
q.push(i);
vis[i] = true;
while(!q.empty()) {
int u = q.front(); q.pop();
comp.push_back(u);
for(int v : g[u]) if(!vis[v]) {
vis[v] = true;
q.push(v);
}
}
int start = comp[0];
auto [a, _] = bfs_path(start);
auto [b, par] = bfs_path(a);
vector<int> path = build_path(a, b, par);
if(path.size() > bestPath.size()) bestPath = path;
}
cout << bestPath.size() << "\n";
for(int x : bestPath) cout << x << " ";
cout << "\n";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbiwgbTsKdmVjdG9yPHZlY3RvcjxpbnQ+PiBnOwp2ZWN0b3I8aW50PiBiZXN0UGF0aDsKCnBhaXI8aW50LCB2ZWN0b3I8aW50Pj4gYmZzX3BhdGgoaW50IHMpIHsKICAgIHZlY3RvcjxpbnQ+IGRpc3QobisxLCAtMSksIHBhcihuKzEsIC0xKTsKICAgIHF1ZXVlPGludD4gcTsKICAgIGRpc3Rbc10gPSAwOwogICAgcS5wdXNoKHMpOwogICAgaW50IGZhciA9IHM7CiAgICB3aGlsZSghcS5lbXB0eSgpKSB7CiAgICAgICAgaW50IHUgPSBxLmZyb250KCk7IHEucG9wKCk7CiAgICAgICAgZm9yKGludCB2IDogZ1t1XSkgaWYoZGlzdFt2XSA9PSAtMSkgewogICAgICAgICAgICBkaXN0W3ZdID0gZGlzdFt1XSArIDE7CiAgICAgICAgICAgIHBhclt2XSA9IHU7CiAgICAgICAgICAgIHEucHVzaCh2KTsKICAgICAgICAgICAgaWYoZGlzdFt2XSA+IGRpc3RbZmFyXSkgZmFyID0gdjsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4ge2ZhciwgcGFyfTsKfQoKdmVjdG9yPGludD4gYnVpbGRfcGF0aChpbnQgcywgaW50IHQsIHZlY3RvcjxpbnQ+JiBwYXIpIHsKICAgIHZlY3RvcjxpbnQ+IHBhdGg7CiAgICBmb3IoaW50IGN1ciA9IHQ7IGN1ciAhPSAtMTsgY3VyID0gcGFyW2N1cl0pIHBhdGgucHVzaF9iYWNrKGN1cik7CiAgICByZXZlcnNlKHBhdGguYmVnaW4oKSwgcGF0aC5lbmQoKSk7CiAgICByZXR1cm4gcGF0aDsKfQoKaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwoKICAgIGNpbiA+PiBuID4+IG07CiAgICBnLmFzc2lnbihuKzEsIHt9KTsKICAgIGZvcihpbnQgaT0wO2k8bTtpKyspIHsKICAgICAgICBpbnQgdSx2OyBjaW4gPj4gdSA+PiB2OwogICAgICAgIGdbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIGdbdl0ucHVzaF9iYWNrKHUpOwogICAgfQoKICAgIHZlY3Rvcjxib29sPiB2aXMobisxLGZhbHNlKTsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKSBpZighdmlzW2ldKSB7CiAgICAgICAgdmVjdG9yPGludD4gY29tcDsKICAgICAgICBxdWV1ZTxpbnQ+IHE7CiAgICAgICAgcS5wdXNoKGkpOwogICAgICAgIHZpc1tpXSA9IHRydWU7CiAgICAgICAgd2hpbGUoIXEuZW1wdHkoKSkgewogICAgICAgICAgICBpbnQgdSA9IHEuZnJvbnQoKTsgcS5wb3AoKTsKICAgICAgICAgICAgY29tcC5wdXNoX2JhY2sodSk7CiAgICAgICAgICAgIGZvcihpbnQgdiA6IGdbdV0pIGlmKCF2aXNbdl0pIHsKICAgICAgICAgICAgICAgIHZpc1t2XSA9IHRydWU7CiAgICAgICAgICAgICAgICBxLnB1c2godik7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGludCBzdGFydCA9IGNvbXBbMF07CiAgICAgICAgYXV0byBbYSwgX10gPSBiZnNfcGF0aChzdGFydCk7CiAgICAgICAgYXV0byBbYiwgcGFyXSA9IGJmc19wYXRoKGEpOwogICAgICAgIHZlY3RvcjxpbnQ+IHBhdGggPSBidWlsZF9wYXRoKGEsIGIsIHBhcik7CgogICAgICAgIGlmKHBhdGguc2l6ZSgpID4gYmVzdFBhdGguc2l6ZSgpKSBiZXN0UGF0aCA9IHBhdGg7CiAgICB9CgogICAgY291dCA8PCBiZXN0UGF0aC5zaXplKCkgPDwgIlxuIjsKICAgIGZvcihpbnQgeCA6IGJlc3RQYXRoKSBjb3V0IDw8IHggPDwgIiAiOwogICAgY291dCA8PCAiXG4iOwp9Cg==