#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
const int N = 200005;
int n, deg[N], sz[N];
vector<int> G[N];
void dfs_sz(int u, int fa) {
  ++sz[u];
  for (int to : G[u])
    if (to != fa) {
      dfs_sz(to, u);
      sz[u] += sz[to];
    }
}
vector<int> ans;
bool dfs(int u, int fa) {
  for (int to : G[u])
    if (to != fa && !(sz[to] & 1)) {
      if (!dfs(to, u)) return false;
      --deg[u];
    }
  if (deg[u] & 1) return false;
  ans.push_back(u);
  for (int to : G[u])
    if (to != fa && (sz[to] & 1)) {
      --deg[to];
      if (!dfs(to, u)) return false;
    }
  return true;
}
int main() {
  scanf("%d", &n);
  int pi;
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &pi);
    if (pi != 0) {
      G[i].push_back(pi), G[pi].push_back(i);
      ++deg[i], ++deg[pi];
    }
  }
  dfs_sz(1, -1);
  if (dfs(1, -1)) {
    puts("YES");
    for (int v : ans) printf("%d\n", v);
  } else
    puts("NO");
  return 0;
}
