#include <bits/stdc++.h>
#pragma GCC optimize "-O3"
#pragma GCC target "tune=native"
int dx[] = {0, 0, 1, -1, 1, 1, -1, -1};
int dy[] = {1, -1, 0, 0, 1, -1, 1, -1};
using namespace std;
vector<pair<int, int> > arbre[100100];
int rs[100100];
vector<int> res;
int parcours(int s) {
  int r = 1;
  for (int i = 0; i < arbre[s].size(); i++) {
    r *= parcours(arbre[s][i].first);
  }
  if (r && rs[s]) {
    res.push_back(s + 1);
    return 1;
  } else {
    return rs[s];
  }
}
int main() {
  int n, r;
  int u, v;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d %d", &u, &v);
    rs[i] = v;
    if (u == -1) {
      r = i;
      continue;
    }
    u--;
    arbre[u].push_back(make_pair(i, v));
  }
  int t = parcours(r);
  sort(res.begin(), res.end());
  if (res.size() == 0) {
    printf("%d\n", -1);
  } else {
    for (int rz = 0; rz < res.size(); rz++) {
      printf("%d ", res[rz]);
    }
    printf("\n");
  }
  return 0;
}
