#include <bits/stdc++.h>
using namespace std;
void Max(int &x, int y) { x = max(x, y); }
void Min(int &x, int y) { x = min(x, y); }
const int N = 1e5 + 5;
template <class T1, class T2>
ostream &operator<<(ostream &os, const pair<T1, T2> &a) {
  return os << '(' << a.first << ", " << a.second << ')';
}
template <class T>
ostream &operator<<(ostream &os, const vector<T> &a) {
  os << '[';
  for (unsigned int i = 0; i < a.size(); i++)
    os << a[i] << (i < a.size() - 1 ? ", " : "");
  os << ']';
  return os;
}
int n;
vector<vector<int> > a(N);
int par[N];
int numChild[N];
int ori[N];
int depth[N];
vector<pair<int, int> > order;
pair<int, int> dfs(int u, pair<int, int> out) {
  if (a[u].size() == 0) {
    if (out.first == -1)
      return make_pair(u, u);
    else
      return make_pair(u, out.second);
  }
  for (auto v : a[u]) {
    if (out.first != -1) {
      order.push_back(make_pair(out.first, v));
      par[out.first] = v;
    }
    out = dfs(v, out);
  }
  return make_pair(u, out.second);
}
class CheckerX {
 public:
  int cpar[N];
  void verify(vector<int> bamboo) {
    int p = -1;
    for (auto it : bamboo) {
      if (p != -1) cpar[it] = p;
      p = it;
    }
    for (auto it : order) cpar[it.first] = cpar[cpar[it.first]];
    for (signed i = (1); i <= (n - 1); i++) assert(ori[i] == cpar[i]);
  }
} Long;
void pdfs(int u) {
  for (auto v : a[u]) {
    pdfs(v);
    depth[u] = max(depth[u], depth[v] + 1);
  }
  sort(a[u].begin(), a[u].end(),
       [&](int X, int Y) { return depth[X] > depth[Y]; });
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  for (signed i = (1); i <= (n - 1); i++) {
    int t;
    cin >> t;
    par[i] = t;
    ori[i] = t;
    a[t].push_back(i);
  }
  pdfs(0);
  par[0] = -1;
  auto rec = dfs(0, make_pair(-1, -1));
  reverse(order.begin(), order.end());
  vector<int> bamboo;
  while (true) {
    bamboo.push_back(rec.second);
    if (rec.second == 0) break;
    rec.second = par[rec.second];
  }
  reverse(bamboo.begin(), bamboo.end());
  for (auto it : bamboo) cout << it << ' ';
  cout << '\n';
  cout << order.size() << '\n';
  for (auto it : order) cout << it.first << ' ';
  cout << '\n';
  Long.verify(bamboo);
}
