#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <stack>
#include <set>
using namespace std;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[1 << 21], *p1 = buf, *p2 = buf;
inline int qread() {
register char c = getchar();
register int x = 0, f = 1;
while (c < '0' || c > '9') {
if (c == '-') f = -1;
c = getchar();
}
while (c >= '0' && c <= '9') {
x = (x << 3) + (x << 1) + c - 48;
c = getchar();
}
return x * f;
}
inline int Abs(const int& x) {return (x > 0 ? x : -x);}
inline int Max(const int& x, const int& y) {return (x > y ? x : y);}
inline int Min(const int& x, const int& y) {return (x < y ? x : y);}
stack <pair <int, int> > stk;
set <int> st;
int n, ans[100005], anstop;
bool book[100005];
inline char readchar() {
char c = getchar();
while (c != '+' && c != '-') c = getchar();
return c;
}
inline void Solve() {
n = qread();
for (register int i = 1;i <= n;i++) st.insert(i);
for (register int i = 1;i <= (n << 1);i++) {
char opt = readchar();
if (opt == '+') {
int x = *(--st.end());
st.erase(x);
ans[++anstop] = x;
//printf("%d %d\n", anstop, x);
stk.push(make_pair(x, anstop));
} else {
register int p = qread();
if (stk.empty() || stk.top().first < p) {
puts("NO");
return;
}
pair <int, int> cur = stk.top();
stk.pop();
st.insert(ans[cur.second]);
ans[cur.second] = p;
st.erase(p);
}
}
puts("YES");
for (register int i = 1;i <= n;i++) printf("%d ", ans[i]);
}
int main() {
Solve();
#ifndef ONLINE_JUDGE
while (1);
#endif
return 0;
}
WA on pretest 10,求助