#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<vector<int>> g;
vector<int> bestPath;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
vector<int> greedy_path(int start) {
vector<bool> used(n+1,false);
vector<int> path;
int u = start;
used[u] = true;
path.push_back(u);
while(true) {
int nxt = -1, score = -1;
for(int v : g[u]) if(!used[v]) {
int cnt = 0;
for(int w : g[v]) if(!used[w]) cnt++;
if(cnt > score) {
score = cnt;
nxt = v;
}
}
if(nxt == -1) break;
used[nxt] = true;
path.push_back(nxt);
u = nxt;
}
return path;
}
pair<int,int> bfs_far(int s) {
vector<int> dist(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;
q.push(v);
if(dist[v] > dist[far]) far = v;
}
}
return {far, dist[far]};
}
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);
}
}
vector<int> candidates;
candidates.push_back(comp[0]);
auto [a,_] = bfs_far(comp[0]);
auto [b,__] = bfs_far(a);
candidates.push_back(a);
candidates.push_back(b);
shuffle(comp.begin(), comp.end(), rng);
for(int j=0;j<min(5,(int)comp.size());j++) candidates.push_back(comp[j]);
for(int start : candidates) {
auto path = greedy_path(start);
if(path.size() > bestPath.size()) bestPath = path;
}
}
cout << bestPath.size() << "\n";
for(int x : bestPath) cout << x << " ";
cout << "\n";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbiwgbTsKdmVjdG9yPHZlY3RvcjxpbnQ+PiBnOwp2ZWN0b3I8aW50PiBiZXN0UGF0aDsKbXQxOTkzNyBybmcoY2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpLnRpbWVfc2luY2VfZXBvY2goKS5jb3VudCgpKTsKCnZlY3RvcjxpbnQ+IGdyZWVkeV9wYXRoKGludCBzdGFydCkgewogICAgdmVjdG9yPGJvb2w+IHVzZWQobisxLGZhbHNlKTsKICAgIHZlY3RvcjxpbnQ+IHBhdGg7CiAgICBpbnQgdSA9IHN0YXJ0OwogICAgdXNlZFt1XSA9IHRydWU7CiAgICBwYXRoLnB1c2hfYmFjayh1KTsKCiAgICB3aGlsZSh0cnVlKSB7CiAgICAgICAgaW50IG54dCA9IC0xLCBzY29yZSA9IC0xOwogICAgICAgIGZvcihpbnQgdiA6IGdbdV0pIGlmKCF1c2VkW3ZdKSB7CiAgICAgICAgICAgIGludCBjbnQgPSAwOwogICAgICAgICAgICBmb3IoaW50IHcgOiBnW3ZdKSBpZighdXNlZFt3XSkgY250Kys7CiAgICAgICAgICAgIGlmKGNudCA+IHNjb3JlKSB7CiAgICAgICAgICAgICAgICBzY29yZSA9IGNudDsKICAgICAgICAgICAgICAgIG54dCA9IHY7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYobnh0ID09IC0xKSBicmVhazsKICAgICAgICB1c2VkW254dF0gPSB0cnVlOwogICAgICAgIHBhdGgucHVzaF9iYWNrKG54dCk7CiAgICAgICAgdSA9IG54dDsKICAgIH0KICAgIHJldHVybiBwYXRoOwp9CgpwYWlyPGludCxpbnQ+IGJmc19mYXIoaW50IHMpIHsKICAgIHZlY3RvcjxpbnQ+IGRpc3QobisxLCAtMSk7CiAgICBxdWV1ZTxpbnQ+IHE7CiAgICBkaXN0W3NdID0gMDsKICAgIHEucHVzaChzKTsKICAgIGludCBmYXIgPSBzOwogICAgd2hpbGUoIXEuZW1wdHkoKSkgewogICAgICAgIGludCB1ID0gcS5mcm9udCgpOyBxLnBvcCgpOwogICAgICAgIGZvcihpbnQgdiA6IGdbdV0pIGlmKGRpc3Rbdl0gPT0gLTEpIHsKICAgICAgICAgICAgZGlzdFt2XSA9IGRpc3RbdV0gKyAxOwogICAgICAgICAgICBxLnB1c2godik7CiAgICAgICAgICAgIGlmKGRpc3Rbdl0gPiBkaXN0W2Zhcl0pIGZhciA9IHY7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHtmYXIsIGRpc3RbZmFyXX07Cn0KCmludCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKCiAgICBjaW4gPj4gbiA+PiBtOwogICAgZy5hc3NpZ24obisxLCB7fSk7CiAgICBmb3IoaW50IGk9MDtpPG07aSsrKSB7CiAgICAgICAgaW50IHUsdjsgY2luID4+IHUgPj4gdjsKICAgICAgICBnW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICBnW3ZdLnB1c2hfYmFjayh1KTsKICAgIH0KCiAgICB2ZWN0b3I8Ym9vbD4gdmlzKG4rMSxmYWxzZSk7CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykgaWYoIXZpc1tpXSkgewogICAgICAgIHZlY3RvcjxpbnQ+IGNvbXA7CiAgICAgICAgcXVldWU8aW50PiBxOwogICAgICAgIHEucHVzaChpKTsKICAgICAgICB2aXNbaV0gPSB0cnVlOwogICAgICAgIHdoaWxlKCFxLmVtcHR5KCkpIHsKICAgICAgICAgICAgaW50IHUgPSBxLmZyb250KCk7IHEucG9wKCk7CiAgICAgICAgICAgIGNvbXAucHVzaF9iYWNrKHUpOwogICAgICAgICAgICBmb3IoaW50IHYgOiBnW3VdKSBpZighdmlzW3ZdKSB7CiAgICAgICAgICAgICAgICB2aXNbdl0gPSB0cnVlOwogICAgICAgICAgICAgICAgcS5wdXNoKHYpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAKICAgICAgICB2ZWN0b3I8aW50PiBjYW5kaWRhdGVzOwogICAgICAgIGNhbmRpZGF0ZXMucHVzaF9iYWNrKGNvbXBbMF0pOwogICAgICAgIGF1dG8gW2EsX10gPSBiZnNfZmFyKGNvbXBbMF0pOwogICAgICAgIGF1dG8gW2IsX19dID0gYmZzX2ZhcihhKTsKICAgICAgICBjYW5kaWRhdGVzLnB1c2hfYmFjayhhKTsKICAgICAgICBjYW5kaWRhdGVzLnB1c2hfYmFjayhiKTsKCiAgICAgICAgCiAgICAgICAgc2h1ZmZsZShjb21wLmJlZ2luKCksIGNvbXAuZW5kKCksIHJuZyk7CiAgICAgICAgZm9yKGludCBqPTA7ajxtaW4oNSwoaW50KWNvbXAuc2l6ZSgpKTtqKyspIGNhbmRpZGF0ZXMucHVzaF9iYWNrKGNvbXBbal0pOwoKICAgICAgICBmb3IoaW50IHN0YXJ0IDogY2FuZGlkYXRlcykgewogICAgICAgICAgICBhdXRvIHBhdGggPSBncmVlZHlfcGF0aChzdGFydCk7CiAgICAgICAgICAgIGlmKHBhdGguc2l6ZSgpID4gYmVzdFBhdGguc2l6ZSgpKSBiZXN0UGF0aCA9IHBhdGg7CiAgICAgICAgfQogICAgfQoKICAgIGNvdXQgPDwgYmVzdFBhdGguc2l6ZSgpIDw8ICJcbiI7CiAgICBmb3IoaW50IHggOiBiZXN0UGF0aCkgY291dCA8PCB4IDw8ICIgIjsKICAgIGNvdXQgPDwgIlxuIjsKfQo=