#include <bits/stdc++.h>
using namespace std;
const long long int mod = 1000000007;
const long long int maxn = 2e5 + 5;
vector<long long int> g[maxn];
set<long long int> g0;
long long int par[maxn];
long long int n;
long long int depth[maxn];
pair<long long int, long long int> find_dia(long long int root) {
  vector<long long int> dist(n + 1, 0), vis(n + 1, 0);
  queue<long long int> Q;
  Q.push(root);
  vis[root] = 1;
  while (!Q.empty()) {
    long long int u = Q.front();
    Q.pop();
    for (auto it : g[u]) {
      if (vis[it]) continue;
      vis[it] = 1;
      dist[it] = dist[u] + 1;
      Q.push(it);
    }
  }
  long long int mx = -1, tv = -1;
  for (long long int i = 1; i <= n; i++) {
    if (mx < dist[i]) {
      mx = dist[i];
      tv = i;
    }
  }
  return {mx, tv};
}
void dfs(long long int v, long long int p) {
  for (auto to : g[v]) {
    if (to == p) continue;
    par[to] = v;
    dfs(to, v);
  }
}
void dfs1(long long int v, long long int p) {
  for (auto to : g[v]) {
    if (to == p) continue;
    if (g0.find(to) == g0.end()) {
      depth[to] = depth[v] + 1;
    }
    dfs1(to, v);
  }
}
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (long long int i = 0; i < n - 1; i++) {
    long long int u, v;
    cin >> u >> v;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  pair<long long int, long long int> p1 = find_dia(1), p2;
  p2 = find_dia(p1.second);
  long long int a = p1.second;
  long long int b = p2.second;
  long long int c = -1;
  dfs(a, a);
  long long int dia = p2.first;
  long long int v1 = a, v2 = b;
  while (v2 != v1) {
    if (v2 != b) c = v2;
    g0.insert(v2);
    v2 = par[v2];
  }
  g0.insert(v1);
  dfs1(a, a);
  long long int best = 0;
  for (long long int i = 1; i <= n; i++) {
    if (depth[i] > best) {
      best = depth[i];
      c = i;
    }
  }
  cout << dia + best << '\n';
  cout << a << ' ' << b << ' ' << c;
}
