n = int(input())
ll=list(map(int,input().split()))
ll.insert(0,"x")
kk=[]
i=n-1
while ll[i]!="x":
kk.append(i+1)
i=ll[i]-1
kk.append(1)
kk.reverse()
print(*kk)
#include <iostream>
#include <algorithm>
using namespace std;
const int mn = 2e5 + 10;
int p[mn];
int sol[mn];
int main()
{
// numero de enrutadores (o nodos)
int n;
scanf("%d", &n);
// p_i es igual al indice del enrutador al que se conecto el i-esimo enrutador
// despues de comprarlo
// el primer enrutador va a tener p_i = 0
p[0] = 0;
for (int i = 1; i < n; i++)
{
cin >> p[i];
p[i]--;
}
int k = n - 1, cnt = 0;
// recorremos el grafo desde el nodo n -1 hacia arriba, hasta llegar a la raiz
while (p[k] != k)
{
sol[cnt++] = k;
// ponemos k igual a p_k
k = p[k];
}
sol[cnt++] = 0;
// ahora, imprimimos el arreglo sol en orden reverso
reverse(sol, sol + cnt);
for (int i = 0; i < cnt; i++)
{
printf("%d ", sol[i] + 1);
}
printf("\n");
return 0;
}
1520A - Do Not Be Distracted | 352A - Jeff and Digits |
1327A - Sum of Odd Integers | 1276A - As Simple as One and Two |
812C - Sagheer and Nubian Market | 272A - Dima and Friends |
1352C - K-th Not Divisible by n | 545C - Woodcutters |
1528B - Kavi on Pairing Duty | 339B - Xenia and Ringroad |
189A - Cut Ribbon | 1182A - Filling Shapes |
82A - Double Cola | 45A - Codecraft III |
1242A - Tile Painting | 1663E - Are You Safe |
1663D - Is it rated - 3 | 1311A - Add Odd or Subtract Even |
977F - Consecutive Subsequence | 939A - Love Triangle |
755A - PolandBall and Hypothesis | 760B - Frodo and pillows |
1006A - Adjacent Replacements | 1195C - Basketball Exercise |
1206A - Choose Two Numbers | 1438B - Valerii Against Everyone |
822A - I'm bored with life | 9A - Die Roll |
1430B - Barrels | 279B - Books |