Once upon a time there was only one router in the well-known company Bmail. Years went by and over time new routers were purchased. Every time they bought a new router, they connected it to one of the routers bought before it. You are given the values p_i — the index of the router to which the i-th router was connected after being purchased (p_i < i).

There are n routers in Boogle in total now. Print the sequence of routers on the path from the first to the n-th router.

Input

The first line contains integer number n (2 ≤ n ≤ 200000) — the number of the routers. The following line contains n-1 integers p_2, p_3, ..., p_n (1 ≤ p_i < i), where p_i is equal to index of the router to which the i-th was connected after purchase.

Output

Print the path from the 1-st to the n-th router. It starts with 1 and ends with n. All the elements in the path should be distinct.

Examples

Input

8
1 1 2 2 3 2 5


Output

1 2 5 8 

Input

6
1 2 3 4 5


Output

1 2 3 4 5 6 

Input

7
1 1 2 3 4 3


Output

1 3 7 
#include <bits/stdc++.h>
using namespace std;
vector<pair<long long, long long> > v[200005];
vector<long long> dist;
int n, m;
int par[200005];
void dijk() {
  priority_queue<pair<long long, long long>,
                 vector<pair<long long, long long> >,
                 greater<pair<long long, long long> > >
      pq;
  dist.assign(n + 5, 100000000000000);
  dist[1] = 0;
  pq.push(make_pair(0, 1));
  while (!pq.empty()) {
    int u = pq.top().second;
    pq.pop();
    for (int i = 0; i < v[u].size(); i++) {
      int x = v[u][i].first;
      int w = v[u][i].second;
      if (dist[x] > dist[u] + w) {
        dist[x] = dist[u] + w;
        par[x] = u;
        pq.push(make_pair(dist[x], x));
      }
    }
  }
}
void pfpath(int n) {
  if (n == 1) {
    cout << 1 << " ";
    return;
  }
  pfpath(par[n]);
  cout << n << " ";
  return;
}
int main() {
  cin >> n;
  for (int i = 2; i <= n; i++) {
    cin >> m;
    v[m].push_back(make_pair(i, 1));
    v[i].push_back(make_pair(m, 1));
  }
  dijk();
  pfpath(n);
  return 0;
}
