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 input(vector<long long>& v, long n) {
  for (long long i = 0; i < n; i++) {
    long long in;
    cin >> in;
    v.push_back(in);
  }
}
void output(vector<long long> v) {
  for (long long i = 0; i < v.size(); i++) cout << v[i] << " ";
}
long long max_of_three(long long a, long long b, long long c) {
  if (a >= b && a >= c)
    return a;
  else if (b >= a && b >= c)
    return b;
  else
    return c;
}
long long max_of_4(long long a, long long b, long long c, long long d) {
  if (a >= b && a >= c && a >= d)
    return a;
  else if (b >= a && b >= c && b >= d)
    return b;
  else if (c >= a && c >= d && c >= b)
    return c;
  else
    return d;
}
map<long long, long long> frequency(vector<long long> v) {
  map<long long, long long> m;
  for (long long i = 0; i < v.size(); i++) {
    if (m.find(v[i]) != m.end())
      m[v[i]]++;
    else {
      m.insert({v[i], 1});
    }
  }
  return m;
}
long long max_occuring_int(std::map<long long, long long> m) {
  long long max_x = 0;
  long long i = 0, n = m.size();
  std::map<long long, long long>::iterator it = m.begin();
  for (i = 0; i < n; i++) {
    if (it->second > max_x) max_x = it->second;
    it++;
  }
  return max_x;
}
vector<long long> give_unique_in_vector(vector<long long> v) {
  sort((v).begin(), (v).end());
  auto it = unique((v).begin(), (v).end());
  v.resize(std::distance(v.begin(), it));
  vector<long long> x = v;
  return x;
}
bool isVowel(char c) {
  return (c == 'a' | c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'y' ||
          c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U' || c == 'Y');
}
string removeWord(string str, string word) {
  if (str.find(word) != string::npos) {
    size_t p = -1;
    string tempWord = word + " ";
    while ((p = str.find(word)) != string::npos)
      str.replace(p, tempWord.length(), "");
    tempWord = " " + word;
    while ((p = str.find(word)) != string::npos)
      str.replace(p, tempWord.length(), "");
  }
  return str;
}
long long calc(long long i, long long j, long long n) {
  return (i + 1 - 1) * n + j + 1;
}
bool compare_descending(long long a, long long b) { return a > b; }
void solve() {
  long long n;
  cin >> n;
  vector<long long> v;
  input(v, n - 1);
  long long c = n - 2;
  vector<long long> ans;
  ans.push_back(n);
  if (c == 0) {
    ans.push_back(v[0]);
  } else {
    while (c > 0) {
      ans.push_back(v[c]);
      c = v[c] - 2;
      if (c == 0) {
        ans.push_back(v[0]);
        break;
      }
    }
  }
  reverse((ans).begin(), (ans).end());
  output(ans);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  solve();
  return 0;
}
