#include <bits/stdc++.h>
using namespace std;
int ver[100005],nxt[100005],hd[20005],tot=1;
bool vis[100005];
int n,m,d[100005],q[100005],l=1,r,cnt1,cnt2,cnt3;
void find(int x,int y){
ver[++tot]=y;
nxt[tot]=hd[x];
hd[x]=tot;
}
void spfa(){
memset(d,0x3f,sizeof d);
q[r++]=1;
d[1]=0;
while(l<=r){
int x=q[l++];
vis[x]=0;
for(int i=hd[x];i;i=nxt[i]){
int y=ver[i];
if(d[y]>d[x]+1){
d[y]=d[x]+1;
if(!vis[y]){
q[r++]=y;
vis[y]=1;
}
}
}
}
}
int main(){
cin>>n>>m;
while(m--){
int x,y;
cin>>x>>y;
find(x,y);
find(y,x);
}
spfa();
for(int i=1;i<=n;i++){
cnt1=max(cnt1,d[i]);
}
for(int i=1;i<=n;i++){
if(d[i]==cnt1){
if(!cnt2){
cnt2=i;
}
cnt3++;
}
}
cout<<cnt2<<' '<<cnt1<<' '<<cnt3;
return 0;
}