#include <bits/stdc++.h>
using namespace std;
struct zero {
  int nxt, to;
} edge[200000 << 1];
int head[200000], tot = 0;
void add_edge(int a, int b) {
  edge[++tot] = (zero){head[a], b};
  head[a] = tot;
}
int n, m, plk, poi, d1, d2, dep[200000], kl[200000], d[200000], op[200000],
    h[200000];
bool flag;
void aux(int x, int fa) {
  if (dep[x] > plk) plk = dep[x], poi = x;
  for (int i = head[x]; i; i = edge[i].nxt) {
    int to = edge[i].to;
    if (to == fa) continue;
    dep[to] = dep[x] + 1;
    kl[to] = x;
    aux(to, x);
  }
}
bool cmp(int a, int b) { return h[a] < h[b]; }
void solve(int x, int fa) {
  vector<int> v;
  for (int i = head[x]; i; i = edge[i].nxt) {
    int to = edge[i].to;
    if (to == fa) continue;
    v.push_back(to);
  }
  op[x] = 0;
  if (v.size() == 0)
    h[x] = op[x] = 0;
  else if (v.size() == 1) {
    int to = v[0];
    solve(to, x);
    if (op[to] || h[to]) flag = 0;
    op[x] = x, h[x] = h[v[0]] + 1;
  } else if (v.size() == 2) {
    solve(v[0], x), solve(v[1], x);
    if ((op[v[0]] && op[v[1]]) || h[v[0]] != h[v[1]])
      flag = 0;
    else if (op[v[0]] || op[v[1]])
      op[x] = op[v[0]] + op[v[1]];
    h[x] = h[v[0]] + 1;
  } else if (v.size() == 3) {
    solve(v[0], x), solve(v[1], x), solve(v[2], x);
    sort(v.begin(), v.end(), cmp);
    if (op[v[0]] || op[v[1]] || op[v[2]]) flag = 0;
    if (!(h[v[1]] == h[v[0]] && h[v[2]] == h[v[0]] + 1)) flag = 0;
    op[x] = x, h[x] = h[v[2]] + 1;
  } else
    flag = 0;
}
int main() {
  scanf("%d", &n);
  m = (1 << n) - 2;
  for (int i = 1; i < m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    add_edge(a, b), add_edge(b, a);
    d[a]++, d[b]++;
  }
  poi = plk = dep[1] = 0;
  aux(1, 0);
  d1 = poi;
  poi = plk = dep[d1] = kl[d1] = 0;
  aux(d1, 0);
  d2 = poi;
  int poss = d2;
  vector<int> syk;
  while (poss) {
    if (abs(2 * dep[poss] - dep[d2]) <= 1) {
      flag = 1;
      solve(poss, 0);
      if (op[poss] && flag && h[poss] == n - 1) syk.push_back(op[poss]);
    }
    poss = kl[poss];
  }
  cout << syk.size() << endl;
  sort(syk.begin(), syk.end());
  for (int i = 0; i < syk.size(); i++) cout << syk[i] << " ";
}
