You are given a tree (a graph with n vertices and n - 1 edges in which it's possible to reach any vertex from any other vertex using only its edges).

A vertex can be destroyed if this vertex has even degree. If you destroy a vertex, all edges connected to it are also deleted.

Destroy all vertices in the given tree or determine that it is impossible.

Input

The first line contains integer n (1 ≤ n ≤ 2·105) — number of vertices in a tree.

The second line contains n integers p1, p2, ..., pn (0 ≤ pi ≤ n). If pi ≠ 0 there is an edge between vertices i and pi. It is guaranteed that the given graph is a tree.

Output

If it's possible to destroy all vertices, print "YES" (without quotes), otherwise print "NO" (without quotes).

If it's possible to destroy all vertices, in the next n lines print the indices of the vertices in order you destroy them. If there are multiple correct answers, print any.

Examples

Input

5
0 1 2 1 2


Output

YES
1
2
3
5
4


Input

4
0 1 2 3


Output

NO

Note

In the first example at first you have to remove the vertex with index 1 (after that, the edges (1, 2) and (1, 4) are removed), then the vertex with index 2 (and edges (2, 3) and (2, 5) are removed). After that there are no edges in the tree, so you can remove remaining vertices in any order.

<image>
from collections import defaultdict,deque
import sys
import bisect
import math
input=sys.stdin.readline
mod=1000000007

def bfs(root,count):
    q=deque([root])
    vis.add(root)
    while q:
        vertex=q.popleft()
        for child in graph[vertex]:
            if ans[child]==0:
                ans[child]=count+1
                count+=1
            if child not in vis:
                q.append(child)
                vis.add(child)
                
graph=defaultdict(list)
n=int(input())
p=[int(i) for i in input().split() if i!='\n']
if n&1:
    for i in range(n):
        if p[i]!=0:
            graph[p[i]].append(i+1)
            graph[i+1].append(p[i])
    length=[0]*(n+1)
    for i in graph:
        length[i]=len(graph[i])
    CHECK,OBSERVE=1,0
    stack=[(OBSERVE,1,0)]
    ans=[0]*(n+1)
    count=0
    while stack:
        state,vertex,parent=stack.pop()
        if state==OBSERVE:
            stack.append((CHECK,vertex,parent))
            for child in graph[vertex]:
                if child != parent:
                    stack.append((OBSERVE,child,vertex))
        else:
            if length[vertex]%2==0:
                count+=1
                ans[vertex]=count
                length[parent]-=1
    vis=set()
    bfs(1,count)
    out=[0]*(n)
    for i in range(1,n+1):
        out[ans[i]-1]=i
    print('YES')
    for i in out:
        sys.stdout.write(str(i)+'\n')
else:
    print('NO')
        
    
            
        
        
        
    
    
