#include <bits/stdc++.h>
using namespace std;
vector<long long> adj[200005];
vector<long long> vis(200005);
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long i, j, k = 0, n, t = 1, m, l = 0;
  for (i = 0; i < 200005; i++) vis[i] = 0;
  while (t--) {
    cin >> n;
    for (i = 0; i < n; i++) {
      cin >> l >> m;
      adj[m].push_back(l);
      adj[l].push_back(m);
    }
    long long d[n + 1];
    for (i = 0; i <= n; i++) d[i] = 100000000000;
    queue<long long> q;
    d[1] = 0;
    q.push(1);
    vis[1] = 1;
    long long farthest = -1;
    while (!q.empty()) {
      long long s = q.front();
      q.pop();
      for (auto u : adj[s]) {
        if (vis[u]) continue;
        vis[u] = 1;
        d[u] = d[s] + 1;
        farthest = u;
        q.push(u);
      }
    }
    long long par[n + 1];
    for (i = 0; i <= n; i++) par[i] = -1;
    for (i = 0; i <= n; i++) {
      d[i] = 100000000000;
      vis[i] = 0;
    }
    d[farthest] = 0;
    q.push(farthest);
    vis[farthest] = 1;
    long long farthest1 = -1;
    while (!q.empty()) {
      long long s = q.front();
      q.pop();
      for (auto u : adj[s]) {
        if (vis[u]) continue;
        vis[u] = 1;
        d[u] = d[s] + 1;
        par[u] = s;
        farthest1 = u;
        q.push(u);
      }
    }
    for (i = 0; i <= n; i++) vis[i] = 0;
    long long node = farthest1;
    while (node != farthest) {
      vis[node] = 1;
      node = par[node];
    }
    vis[node] = 1;
    long long ans = d[farthest1];
    if (ans == n - 1) {
      cout << ans << "\n";
      for (i = 1; i <= n; i++) {
        if (i != farthest && i != farthest1) break;
      }
      cout << farthest << " " << farthest1 << " " << i << "\n";
      continue;
    }
    for (i = 1; i <= n; i++) {
      d[i] = 0;
      if (vis[i] == 1) {
        q.push(i);
      }
    }
    long long farthest2 = -1;
    while (!q.empty()) {
      long long s = q.front();
      q.pop();
      for (auto u : adj[s]) {
        if (vis[u]) continue;
        vis[u] = 1;
        d[u] = d[s] + 1;
        par[u] = s;
        farthest2 = u;
        q.push(u);
      }
    }
    ans += d[farthest2];
    cout << ans << "\n";
    cout << farthest2 << " " << farthest1 << " " << farthest << "\n";
  }
  return 0;
}
