#include <bits/stdc++.h>
using namespace std;
template <typename T>
void chkmax(T &x, T y) {
  x = x > y ? x : y;
}
template <typename T>
void chkmin(T &x, T y) {
  x = x > y ? y : x;
}
const int INF = 2139062143;
template <typename T>
void read(T &x) {
  x = 0;
  bool f = 1;
  char ch;
  do {
    ch = getchar();
    if (ch == '-') f = 0;
  } while (ch > '9' || ch < '0');
  do {
    x = x * 10 + ch - '0';
    ch = getchar();
  } while (ch >= '0' && ch <= '9');
  x = f ? x : -x;
}
template <typename T>
void write(T x) {
  if (x < 0) x = ~x + 1, putchar('-');
  if (x > 9) write(x / 10);
  putchar(x % 10 + '0');
}
const int N = 2e5 + 7;
struct EDGE {
  int to, nxt;
} edge[N << 1];
int n, E, l, r, o, p, ans, ret, maxdep, fa[N], dep[N], head[N];
bool tag[N];
inline void addedge(int u, int v) {
  edge[++E].to = v;
  edge[E].nxt = head[u];
  head[u] = E;
}
inline void dfs(int u, int f) {
  fa[u] = f;
  for (int i = head[u]; i; i = edge[i].nxt) {
    int v = edge[i].to;
    if (v == f || tag[v]) continue;
    dep[v] = dep[u] + 1;
    if (dep[v] > maxdep) {
      maxdep = dep[v];
      p = v;
    }
    dfs(v, u);
  }
}
inline void work(int u, int f) {
  for (int i = head[u]; i; i = edge[i].nxt) {
    int v = edge[i].to;
    if (v == f || tag[v]) continue;
    dep[v] = dep[u] + 1;
    if (dep[v] > maxdep) {
      maxdep = dep[v];
      p = v;
    }
    work(v, u);
  }
}
int main() {
  read(n);
  for (int i = 1, u, v; i < n; i++) {
    read(u);
    read(v);
    addedge(u, v);
    addedge(v, u);
  }
  dfs(1, 0);
  l = p;
  maxdep = dep[l] = 0;
  dfs(l, 0);
  r = p;
  ret = maxdep;
  maxdep = dep[r] = 0;
  for (int i = r; i != fa[l]; i = fa[i]) tag[i] = true;
  int ans = 0;
  for (int i = r; i != fa[l]; i = fa[i]) {
    maxdep = dep[i] = 0;
    work(i, 0);
    if (ans < ret + maxdep && p != l && p != r) {
      ans = ret + maxdep;
      o = p;
    }
  }
  if (!o) {
    ans = ret;
    for (int i = r; i != fa[l]; i = fa[i])
      if (i != l && i != r) {
        o = i;
        break;
      }
  }
  printf("%d\n%d %d %d\n", ans, l, r, o);
  return 0;
}
