#include <bits/stdc++.h>
using namespace std;
vector<int, int> &getVector(const unordered_map<long long, int> &trad,
                            vector<map<int, int>> &g, int dst, int &prox,
                            long long res, int v, int i);
template <class C>
void mini(C &a, C b) {
  a = min(a, b);
}
template <class C>
void maxi(C &a, C b) {
  a = max(a, b);
}
void a() {
  vector<int> a(6);
  for (int i = 0; i < 6; i++) cin >> a[i];
  sort(a.begin(), a.end());
  reverse(a.begin(), a.end());
  int n;
  cin >> n;
  vector<int> b(n);
  for (int i = 0; i < n; i++) cin >> b[i];
  int res = 1e9;
  set<pair<int, pair<int, int>>> s;
  for (int i = 0; i < n; i++) s.insert({b[i] - a[0], {i, 0}});
  auto it = s.begin();
  while (it->second.second != 5) {
    int i = it->second.first;
    int j = it->second.second;
    pair<int, pair<int, int>> nuevo = {b[i] - a[j + 1], {i, j + 1}};
    s.erase(it);
    s.insert(nuevo);
    it = s.begin();
    mini(res, (--s.end())->first - it->first);
  }
  cout << res << '\n';
}
void b() {
  int n;
  cin >> n;
  vector<int> a(2 * n);
  char c;
  int j;
  for (int i = 0; i < 2 * n; i++) {
    cin >> c;
    if (c == '+') continue;
    cin >> j;
    a[i] = j;
  }
  set<int> s;
  for (int i = 0; i < 2 * n; i++) s.insert(i);
  vector<int> pos(n + 1);
  for (int i = 0; i < 2 * n; i++) {
    if (a[i] == 0) continue;
    pos[a[i]] = i;
  }
  for (int(i) = 1; i <= n; i++) {
    auto it = s.find(pos[i]);
    if (it == s.begin()) {
      cout << "NO\n";
      return;
    }
    it--;
    if (a[*it] != 0) {
      cout << "NO\n";
      return;
    }
    a[*it] = i;
    s.erase(it);
    s.erase(pos[i]);
  }
  cout << "YES\n";
  for (int i = 0; i < 2 * n; i++) {
    if (s.count(a[i])) continue;
    cout << a[i] << ' ';
    s.insert(a[i]);
  }
  cout << '\n';
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  b();
  return 0;
}
