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;
void __print(int x) { cerr << x; }
void __print(long long x) { cerr << x; }
void __print(double x) { cerr << x; }
void __print(char x) { cerr << '\'' << x << '\''; }
void __print(const char* x) { cerr << '\"' << x << '\"'; }
void __print(const string& x) { cerr << '\"' << x << '\"'; }
void __print(bool x) { cerr << (x ? "true" : "false"); }
template <typename T, typename V>
void __print(const pair<T, V>& x) {
  cerr << '{';
  __print(x.first);
  cerr << ',';
  __print(x.second);
  cerr << '}';
}
template <typename T>
void __print(const T& x) {
  int _ = 0;
  cerr << '{';
  for (auto& i : x) cerr << (_++ ? "," : ""), __print(i);
  cerr << "}";
}
void _print() { cerr << "]\n"; }
template <typename T, typename... V>
void _print(T t, V... v) {
  __print(t);
  if (sizeof...(v)) cerr << ", ";
  _print(v...);
}
bool comp1(pair<pair<long long, long long>, pair<long long, long long>> a,
           pair<pair<long long, long long>, pair<long long, long long>> b) {
  return a.second.second < b.second.second;
}
bool comp(pair<long long, long long> a, pair<long long, long long> b) {
  return a.second < b.second;
}
struct myComp {
  constexpr bool operator()(
      pair<pair<long long, long long>, pair<long long, long long>> const& a,
      pair<pair<long long, long long>, pair<long long, long long>> const& b)
      const noexcept {
    return a.second.second < b.second.second;
  }
};
long long digitSum(long long n) {
  long long sum = 0;
  while (n > 0) {
    sum += n % 10;
    n = n / 10;
  }
  return sum;
}
void dfs(long long a[], long long n) {
  if (n > 1) dfs(a, a[n]);
  cout << n << " ";
}
void solve() {
  long long n;
  cin >> n;
  long long arr[n + 1];
  for (long long i = 2; i <= n; i++) cin >> arr[i];
  dfs(arr, n);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long t = 1;
  while (t-- > 0) {
    solve();
  }
  return 0;
}
