#include <bits/stdc++.h>
using namespace std;
const int maxn = 4e5 + 7;
const int mod = 1e9 + 7;
int fa[maxn], a, b, c, ans, n;
int dis[maxn];
vector<int> ve[maxn];
int bfs(int x) {
  for (int i = 1; i <= n; i++) dis[i] = -1;
  dis[x] = 0;
  queue<int> que;
  que.push(x);
  int res = x;
  while (que.size()) {
    int now = que.front();
    que.pop();
    for (int i = 0; i < ve[now].size(); i++) {
      int v = ve[now][i];
      if (dis[v] == -1) {
        que.push(v);
        dis[v] = dis[now] + 1;
        fa[v] = now;
        res = v;
      }
    }
  }
  return res;
}
int bfs2() {
  int res;
  if (a != 1 && b != 1)
    res = 1;
  else if (a != 2 && b != 2)
    res = 2;
  else
    res = 3;
  for (int i = 1; i <= n; i++) dis[i] = -1;
  queue<int> que;
  int now = b;
  while (1) {
    que.push(now);
    dis[now] = 0;
    if (now == a) break;
    now = fa[now];
  }
  while (que.size()) {
    int now = que.front();
    que.pop();
    for (int i = 0; i < ve[now].size(); i++) {
      int v = ve[now][i];
      if (dis[v] == -1) {
        que.push(v);
        dis[v] = dis[now] + 1;
        fa[v] = now;
        res = v;
      }
    }
  }
  return res;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n - 1; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    ve[a].push_back(b);
    ve[b].push_back(a);
  }
  a = bfs(1);
  b = bfs(a);
  ans = dis[b];
  c = bfs2();
  ans += dis[c];
  printf("%d\n", ans);
  printf("%d %d %d\n", a, b, c);
  return 0;
}
