#include <bits/stdc++.h>
using namespace std;
template <class T>
bool ckmin(T& a, const T& b) {
  return b < a ? a = b, 1 : 0;
}
template <class T>
bool ckmax(T& a, const T& b) {
  return a < b ? a = b, 1 : 0;
}
const int MAX_N = (1 << 17) + 10;
int n, k;
vector<int> adj[MAX_N];
int sz[MAX_N];
vector<int> centroids;
void getCentroids(int u, int p) {
  sz[u] = 1;
  bool centroid = true;
  for (int v : adj[u])
    if (v != p) {
      getCentroids(v, u);
      sz[u] += sz[v];
      if (sz[v] > n / 2) centroid = false;
    }
  if (n - sz[u] > n / 2) centroid = false;
  if (centroid) centroids.push_back(u);
}
pair<int, int> getNode(int u, int p) {
  vector<pair<int, int> > ch;
  for (int v : adj[u])
    if (v != p) {
      ch.push_back(getNode(v, u));
      if (ch.back().first == 0) return make_pair(0, -1);
    }
  if ((int)ch.size() == 0) {
    return make_pair(1, 1);
  } else if ((int)ch.size() == 1) {
    if (ch[0].first == 1) {
      if (ch[0].second == 1) return make_pair(2, u);
      return make_pair(0, -1);
    } else {
      return make_pair(0, -1);
    }
  } else if ((int)ch.size() == 2) {
    if (ch[0].first == 2 && ch[1].first == 2) {
      return make_pair(0, -1);
    } else if (ch[0].first == 1 && ch[1].first == 1) {
      if (ch[0].second == ch[1].second) {
        return make_pair(1, ch[0].second + 1);
      } else {
        return make_pair(0, -1);
      }
    } else {
      return max(ch[0], ch[1]);
    }
  } else if ((int)ch.size() == 3) {
    for (int i = 0; i < 3; i++)
      if (ch[i].first != 1) return make_pair(0, -1);
    vector<int> v;
    for (int i = 0; i < 3; i++) v.push_back(ch[i].second);
    sort(v.begin(), v.end());
    if (v[0] != v[1]) return make_pair(0, -1);
    if (v[2] != v[1] + 1) return make_pair(0, -1);
    return make_pair(2, u);
  } else {
    return make_pair(0, -1);
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> k;
  n = (1 << k) - 2;
  for (int i = 0; i < n - 1; i++) {
    int u, v;
    cin >> u >> v;
    u--;
    v--;
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
  getCentroids(0, -1);
  vector<int> res;
  for (int u : centroids) {
    pair<int, int> x = getNode(u, -1);
    if (x.first == 2) res.push_back(x.second);
  }
  sort(res.begin(), res.end());
  cout << (int)res.size() << "\n";
  for (int i = 0; i < (int)res.size(); i++) {
    if (i != 0) cout << " ";
    cout << res[i] + 1;
  }
  cout << "\n";
}
