#include <bits/stdc++.h>
#define fast ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define ll long long
#define ld long double
#define pb push_back
using namespace std;
int mx=-1,to;
vector<vector<int>>v;
const int m=2e5+1;
int vis[m],src,dist;
vector<int>dia;
bool in_path[m];
void dfs(int node,int cost)
{
if(cost>mx)
{
mx=cost;
to=node;
}
vis[node]=1;
for(auto child:v[node])
{
if(!vis[child])
{
dfs(child,cost+1);
}
}
}
int ans=0;
void dfs2(int node)
{
vis[node]=1;
dia.pb(node);
if(node==dist)
{
for(auto i:dia) in_path[i]=1;
ans=dia.size();
return;
}
for(auto child:v[node])
{
if(!vis[child])
{dfs2(child);
dia.erase(dia.end()-1);
}
}
}
int mxdepth=0,mxind=-1;
void dfs3(int node,int depth)
{
vis[node]=1;
if(v[node].size()==1&&node!=dist&&node!=src)
{
if(depth>mxdepth)
{
mxdepth=depth;
mxind=node;
}
}
for(auto child:v[node])
{
if(!vis[child])
{
if(in_path[child])
{
dfs3(child,0);
}
else dfs3(child,depth+1);
}
}
}
int main(){
fast;
int n;
cin>>n;
v.resize(n+1);
for(int i=0;i<n-1;i++)
{
int a,b;
cin>>a>>b;
v[a].pb(b);
v[b].pb(a);
}
dfs(1,0);
src=to;
memset(vis,0,sizeof vis);
mx=-1;
dfs(to,0);
dist=to;
memset(vis,0,sizeof vis);
dfs2(src);
memset(vis,0,sizeof vis);
dfs3(src,0);
ans--;
if(mxdepth==0)
{
for(int i=1; i<=n; i++)
{
if(in_path[i]&&i!=dist&&i!=src)
{
mxind=i;
break;
}
}
}
ans+=mxdepth;
cout<<ans<<endl;
cout<<src<<" "<<dist<<" "<<mxind<<endl;
return 0 ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgZmFzdCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApLGNpbi50aWUoMCksY291dC50aWUoMCk7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBwYiBwdXNoX2JhY2sKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IG14PS0xLHRvOwp2ZWN0b3I8dmVjdG9yPGludD4+djsKY29uc3QgaW50IG09MmU1KzE7CmludCB2aXNbbV0sc3JjLGRpc3Q7CnZlY3RvcjxpbnQ+ZGlhOwpib29sIGluX3BhdGhbbV07CnZvaWQgZGZzKGludCBub2RlLGludCBjb3N0KQp7CiAgICBpZihjb3N0Pm14KQogICAgewogICAgICAgIG14PWNvc3Q7CiAgICAgICAgdG89bm9kZTsKICAgIH0KICAgIHZpc1tub2RlXT0xOwogICAgZm9yKGF1dG8gY2hpbGQ6dltub2RlXSkKICAgIHsKICAgICAgICBpZighdmlzW2NoaWxkXSkKICAgICAgICB7CiAgICAgICAgICAgIGRmcyhjaGlsZCxjb3N0KzEpOwogICAgICAgIH0KICAgIH0KfQppbnQgYW5zPTA7CnZvaWQgZGZzMihpbnQgbm9kZSkKewogICAgdmlzW25vZGVdPTE7CiAgICBkaWEucGIobm9kZSk7CiAgICBpZihub2RlPT1kaXN0KQogICAgewogICAgICAgIGZvcihhdXRvIGk6ZGlhKSBpbl9wYXRoW2ldPTE7CiAgICAgICAgYW5zPWRpYS5zaXplKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgZm9yKGF1dG8gY2hpbGQ6dltub2RlXSkKICAgIHsKICAgICAgICBpZighdmlzW2NoaWxkXSkKICAgICAgICAgICAge2RmczIoY2hpbGQpOwogICAgICAgICAgICBkaWEuZXJhc2UoZGlhLmVuZCgpLTEpOwogICAgICAgICAgICB9CiAgICB9Cn0KaW50IG14ZGVwdGg9MCxteGluZD0tMTsKdm9pZCBkZnMzKGludCBub2RlLGludCBkZXB0aCkKewogICAgdmlzW25vZGVdPTE7CiAgICBpZih2W25vZGVdLnNpemUoKT09MSYmbm9kZSE9ZGlzdCYmbm9kZSE9c3JjKQogICAgewogICAgICAgICBpZihkZXB0aD5teGRlcHRoKQogICAgICAgICB7CiAgICAgICAgICBteGRlcHRoPWRlcHRoOwogICAgICAgICAgbXhpbmQ9bm9kZTsKICAgICAgICAgfQogICAgfQogICAgZm9yKGF1dG8gY2hpbGQ6dltub2RlXSkKICAgIHsKICAgICAgICBpZighdmlzW2NoaWxkXSkKICAgICAgICB7CiAgICAgICAgICAgIGlmKGluX3BhdGhbY2hpbGRdKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkZnMzKGNoaWxkLDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgZGZzMyhjaGlsZCxkZXB0aCsxKTsKICAgICAgICB9CiAgICB9Cn0KaW50IG1haW4oKXsKZmFzdDsKaW50IG47CmNpbj4+bjsKdi5yZXNpemUobisxKTsKZm9yKGludCBpPTA7aTxuLTE7aSsrKQp7CiAgICBpbnQgYSxiOwogICAgY2luPj5hPj5iOwogICAgdlthXS5wYihiKTsKICAgIHZbYl0ucGIoYSk7Cn0KZGZzKDEsMCk7CiBzcmM9dG87Cm1lbXNldCh2aXMsMCxzaXplb2YgdmlzKTsKbXg9LTE7CmRmcyh0bywwKTsKZGlzdD10bzsKbWVtc2V0KHZpcywwLHNpemVvZiB2aXMpOwpkZnMyKHNyYyk7Cm1lbXNldCh2aXMsMCxzaXplb2YgdmlzKTsKZGZzMyhzcmMsMCk7CmFucy0tOwppZihteGRlcHRoPT0wKQp7CiAgICAgICAgZm9yKGludCBpPTE7IGk8PW47IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGlmKGluX3BhdGhbaV0mJmkhPWRpc3QmJmkhPXNyYykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbXhpbmQ9aTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQp9CmFucys9bXhkZXB0aDsKY291dDw8YW5zPDxlbmRsOwpjb3V0PDxzcmM8PCIgIjw8ZGlzdDw8IiAiPDxteGluZDw8ZW5kbDsKICAgIHJldHVybiAwIDsKfQ==