#include <bits/stdc++.h>
using namespace std;
const int N = 1000010, M = N * 2, mod = 1e9 + 7, INF = 0x3f3f3f3f;
const double eps = 1e-6;
int n, root;
map<pair<int, int>, int> mp;
vector<int> v[N];
int ans[N], d[N], dis[N];
int e[M], ne[M], h[N], w[M], idx;
int depth[N], res;
bool st[N];
int ed, flag, pre[N];
void add(int a, int b, int c) {
  e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}
void dfs_dep(int u, int fa) {
  depth[u] = depth[fa] + 1;
  for (auto x : v[u]) {
    int ver = x;
    if (ver == fa) continue;
    dfs_dep(ver, u);
  }
}
void dfs(int u, int fa) {
  if (flag) return;
  if (u == ed) {
    flag = 1;
    return;
  }
  for (auto x : v[u]) {
    if (x == fa) continue;
    pre[x] = u;
    dfs(x, u);
    if (flag) return;
    pre[x] = 0;
  }
}
void dfs_add(int u, int fa) {
  for (auto x : v[u]) {
    if (x == fa) continue;
    ans[x] = mp[{x, u}];
    dfs_add(x, u);
  }
}
void dfs_d(int u, int fa) {
  int mx = 0;
  for (auto x : v[u]) {
    if (x == fa) continue;
    dfs_d(x, u);
    mx = max(mx, depth[x] + 1);
  }
  depth[u] = mx;
}
int main() {
  memset(h, -1, sizeof(h));
  scanf("%d", &n);
  for (int i = 1; i <= n - 1; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    v[a].push_back(b), v[b].push_back(a);
  }
  dfs_dep(1, 0);
  int id = 0, mx = -1;
  for (int i = 1; i <= n; i++)
    if (depth[i] > mx) mx = depth[i], root = i;
  memset(depth, 0, sizeof(depth));
  dfs_dep(root, 0);
  mx = -1;
  for (int i = 1; i <= n; i++)
    if (depth[i] > mx) mx = depth[i], ed = i;
  dfs(root, 0);
  vector<int> vv;
  vv.push_back(ed);
  pre[root] = 0;
  while (pre[ed] != 0) vv.push_back(pre[ed]), ed = pre[ed];
  queue<int> q;
  memset(dis, 0x3f, sizeof(dis));
  memset(st, false, sizeof(st));
  for (int i = 0; i < vv.size(); i++) {
    int x = vv[i];
    q.push(x), st[x] = 1, dis[x] = 0;
  }
  while (q.size()) {
    int t = q.front();
    q.pop();
    for (int i = 0; i < v[t].size(); i++) {
      int x = v[t][i];
      if (st[x]) continue;
      dis[x] = dis[t] + 1;
      st[x] = 1;
      q.push(x);
    }
  }
  int x = vv[0], y = vv[vv.size() - 1], z = vv[1];
  int mmx = 0;
  for (int i = 1; i <= n; i++)
    if (dis[i] > mmx && dis[i] != INF) mmx = dis[i], z = i;
  printf("%d\n", mmx + (int)vv.size() - 1);
  printf("%d %d %d\n", x, y, z);
  return 0;
}
