#include <bits/stdc++.h>
using namespace std;
vector<int> adj[2002];
int cnt[2002], c[2002], a[2002], n, z, q;
void dfs1(int u) {
  int i, l = adj[u].size();
  if (a[q] > a[u]) z++;
  for (i = 0; i < l; i++) {
    dfs1(adj[u][i]);
  }
}
void dfs(int u) {
  int i, l = adj[u].size(), x = 0;
  for (i = 1; i < n + 1; i++) {
    if (!cnt[i] && x == c[u]) {
      a[u] = i;
      cnt[i] = 1;
      break;
    }
    if (!cnt[i]) x++;
  }
  for (i = 0; i < l; i++) {
    dfs(adj[u][i]);
  }
}
int main() {
  int i, j, k, x, y, p, chk = 0;
  cin >> n;
  for (i = 1; i < n + 1; i++) {
    cin >> p >> c[i];
    if (p == 0) x = i;
    if (p) adj[p].emplace_back(i);
  }
  dfs(x);
  for (i = 1; i < n + 1; i++) {
    z = 0;
    q = i;
    dfs1(i);
    if (z != c[i]) chk = 1;
  }
  if (chk)
    cout << "NO" << '\n';
  else {
    cout << "YES" << '\n';
    for (i = 1; i < n + 1; i++) cout << a[i] << " ";
    cout << '\n';
  }
}
