#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
const int MAXN = 2e5;
vector<int> g[MAXN];
pair<int, int> val[MAXN];
array<int, 4> ans;
pair<int, int> inc(pair<int, int> p) {
  return make_pair(p.first + 1, p.second);
}
void dfs1(int v, int p) {
  val[v] = {0, v};
  for (int u : g[v]) {
    if (u != p) {
      dfs1(u, v);
      if (inc(val[u]) > val[v]) val[v] = inc(val[u]);
    }
  }
}
void dfs2(int v, int p, pair<int, int> up_val) {
  vector<pair<int, int>> vals = {up_val};
  for (int u : g[v]) {
    if (u != p) {
      vals.push_back(inc(val[u]));
    }
  }
  if (int((vals).size()) == 1) {
    return;
  }
  sort(begin(vals), end(vals));
  reverse(begin(vals), end(vals));
  if (int((vals).size()) == 2) {
    array<int, 4> cur = {vals[0].first + vals[1].first, v, vals[0].second,
                         vals[1].second};
    ans = max(ans, cur);
  } else {
    array<int, 4> cur = {vals[0].first + vals[1].first + vals[2].first,
                         vals[0].second, vals[1].second, vals[2].second};
    ans = max(ans, cur);
  }
  for (int u : g[v]) {
    if (u != p) {
      pair<int, int> u_val =
          (vals[0].second != val[u].second ? inc(vals[0]) : inc(vals[1]));
      dfs2(u, v, u_val);
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int n;
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int v, u;
    cin >> v >> u;
    v--, u--;
    g[v].push_back(u);
    g[u].push_back(v);
  }
  dfs1(0, -1);
  dfs2(0, -1, {0, 0});
  cout << ans[0] << endl;
  cout << (ans[1] + 1) << ' ' << (ans[2] + 1) << ' ' << (ans[3] + 1) << endl;
}
