#include <bits/stdc++.h>
using namespace std;
int ans[100010], maiorOuIgual[100010];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  set<int> naoColocadas;
  stack<pair<int, int> > colocadas;
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) naoColocadas.insert(-i);
  int tot = 1;
  for (int i = 1; i <= 2 * n; i++) {
    char op;
    int x;
    cin >> op;
    if (op == '+') {
      if (naoColocadas.size() == 0) {
        cout << "NO\n";
        return 0;
      }
      int davez = -*(naoColocadas.begin());
      naoColocadas.erase(naoColocadas.begin());
      colocadas.push({davez, tot});
      tot++;
    } else {
      cin >> x;
      int ind;
      if (colocadas.empty() || x > colocadas.top().first) {
        cout << "NO\n";
        return 0;
      } else if (x == colocadas.top().first) {
        ind = colocadas.top().second;
        if (maiorOuIgual[ind] > x) {
          cout << "NO\n";
          return 0;
        }
        ans[ind] = x;
        colocadas.pop();
      } else {
        ind = colocadas.top().second;
        if (maiorOuIgual[ind] > x) {
          cout << "NO\n";
          return 0;
        }
        naoColocadas.erase(-x);
        ans[ind] = x;
        naoColocadas.insert(-colocadas.top().first);
        colocadas.pop();
      }
      maiorOuIgual[ind] = x;
      if (colocadas.size()) {
        maiorOuIgual[colocadas.top().second] =
            max(maiorOuIgual[colocadas.top().second], maiorOuIgual[ind]);
      }
    }
  }
  if (colocadas.size()) {
    cout << "NO\n";
    return 0;
  }
  cout << "YES\n";
  for (int i = 1; i <= n; i++) cout << ans[i] << " ";
  cout << endl;
}
