#include <bits/stdc++.h>
using namespace std;
const int N = 200001, M = 18;
vector<int> g[N];
int sm[N][M], dep[N], n;
void build() {
  for (int i = 1; i < M; i++)
    for (int j = 1; j <= n; j++)
      if (sm[j][i - 1]) sm[j][i] = sm[sm[j][i - 1]][i - 1];
}
void dfs(int u, int p) {
  sm[u][0] = p, dep[u] = dep[p] + 1;
  for (int v : g[u])
    if (v != p) dfs(v, u);
}
int lca(int u, int v) {
  if (dep[u] > dep[v]) swap(u, v);
  int d = dep[v] - dep[u];
  for (int i = 0; i < M; i++)
    if ((d >> i) & 1) v = sm[v][i];
  if (u == v) return u;
  for (int i = M - 1; i >= 0; i--)
    if (sm[u][i] != sm[v][i]) u = sm[u][i], v = sm[v][i];
  return sm[u][0];
}
int dist(int u, int v) { return dep[u] + dep[v] - dep[lca(u, v)] * 2; }
int main() {
  ios_base::sync_with_stdio(false), cin.tie(NULL);
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int u, v;
    cin >> u >> v, g[u].push_back(v), g[v].push_back(u);
  }
  dep[0] = -1, dfs(1, 0), build();
  int a = 1, b = 1, c = 1, x = 0, y = 0;
  for (int u = 1; u <= n; u++)
    if (dep[u] > dep[a]) a = u;
  for (int u = 1; u <= n; u++) {
    int z = dist(a, u);
    if (z > x) x = z, b = u;
  }
  for (int u = 1; u <= n; u++)
    if (u != a && u != b) {
      int z = dist(a, u) + dist(b, u);
      if (z > y) y = z, c = u;
    }
  cout << (x + y) / 2 << "\n" << a << " " << b << " " << c << "\n";
}
