#include <bits/stdc++.h>
long long int power(long long int a, long long int b) {
  long long int z = 1;
  while (b) {
    if (b & 1) {
      z *= a;
      z %= 1000000007;
    }
    a *= a;
    a %= 1000000007;
    b /= 2;
  }
  return z % 1000000007;
}
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
vector<long long int> g[200005], p(200005, -1);
vector<bool> vis(200005, false);
long long int mx = 0, a, b, c, ans = 0;
void dfs1(long long int st, long long int par, long long int cost) {
  if (cost > mx) {
    mx = cost;
    a = st;
  }
  for (auto i : g[st]) {
    if (i == par) continue;
    dfs1(i, st, cost + 1);
  }
}
void dfs(long long int st, long long int par, long long int cost) {
  p[st] = par;
  if (cost > mx) {
    mx = cost;
    b = st;
  }
  for (auto i : g[st]) {
    if (i == par) continue;
    dfs(i, st, cost + 1);
  }
}
void dfs2(long long int st, long long int par, long long int cost) {
  vis[st] = true;
  if (cost >= mx) {
    mx = cost;
    c = st;
  }
  for (auto i : g[st]) {
    if (i == par || vis[i]) continue;
    dfs2(i, st, cost + 1);
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long int n, lf;
  cin >> n;
  for (int i = 1; i < n; ++i) {
    long long int a, b;
    cin >> a >> b;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  dfs1(1, -1, 0);
  mx = 0;
  dfs(a, -1, 0);
  long long int len = mx, k, cc, val = 0;
  vis[a] = vis[b] = true;
  k = p[b];
  while (k != a) {
    vis[k] = true;
    k = p[k];
  }
  k = p[b];
  while (k != a) {
    mx = 0;
    dfs2(k, -1, 0);
    if (mx >= val) {
      val = mx;
      cc = c;
    }
    k = p[k];
  }
  cout << len + val << "\n";
  ;
  cout << a << " " << b << " " << cc << "\n";
  ;
  return 0;
}
