#include<cstdio>
class stack{
private:
int data[100001];
int cnt, ansCnt;
bool ansFalse;
char ans[200000];
public:
stack(){
cnt = 0;
ansCnt = 0;
bool ansFalse = true;
}
void push(int i){
data[cnt++] = i;
ans[ansCnt++] = '+';
}
int pop(){
if(!empty()){
ans[ansCnt++] = '-';
//printf("%d ",data[cnt-1]);
return data[--cnt];
}else{
ansFalse = false;
}
}
bool empty(){
if(cnt==0) return true;
return false;
}
bool getAnsFalse(){
return ansFalse;
}
int getAnsCnt(){
return ansCnt;
}
char getAns(int i){
return ans[i];
}
void setAnsFalse(bool i){
ansFalse = i;
}
};
int main(){
stack s;
int t, cnt = 0, num = 1;
int input[100000] = {0};
scanf("%d", &t);
for(int i = 0 ; i < t ; i++){
scanf("%d",&input[i]);
} // input data
while(true){
if(cnt == t){ // 입력한 갯수와 테스트의 크기가 같다면 종료
break;
}// end
if(input[cnt] == num){ // 입력받은 인덱스에 위치한 값과, num가 같다면
s.push(num++); // 넣고
s.pop(); // 꺼냄
cnt++; // 다음 인덱스로
}else if(input[cnt] < num){ // 입력받은 인덱스에 위치한 값보다 num이 더 크다면, 꺼내기
int temp = s.pop(); // 꺼냄
if(temp != input[cnt]){ // 꺼낸 값이 입력받은 인덱스에 위치한 값과 같지 않다면
s.setAnsFalse(false); // NO를 출력하기위해 false 값 설정
break; // end
}
cnt++; // 맞는 경우라면 다음 인덱스 값 진행
}else{ // 입력받은 인덱스에 위치한 값보다 작다면 그대로 푸쉬
s.push(num++); // 푸쉬
}
}
if(s.getAnsFalse()){
int temp = s.getAnsCnt();
for(int i = 0 ; i < temp ; i++){
printf("%c\n",s.getAns(i));
}
}else{
printf("NO\n");
}
return 0;
}
I2luY2x1ZGU8Y3N0ZGlvPgogCmNsYXNzIHN0YWNrewpwcml2YXRlOgogICAgaW50IGRhdGFbMTAwMDAxXTsKICAgIGludCBjbnQsIGFuc0NudDsKICAgIGJvb2wgYW5zRmFsc2U7CiAgICBjaGFyIGFuc1syMDAwMDBdOwpwdWJsaWM6CiAgICBzdGFjaygpewogICAgICAgIGNudCA9IDA7CiAgICAgICAgYW5zQ250ID0gMDsKICAgICAgICBib29sIGFuc0ZhbHNlID0gdHJ1ZTsKICAgIH0KICAgIHZvaWQgcHVzaChpbnQgaSl7CiAgICAgICAgZGF0YVtjbnQrK10gPSBpOwogICAgICAgIGFuc1thbnNDbnQrK10gPSAnKyc7CiAgICB9CiAgICBpbnQgcG9wKCl7CiAgICAgICAgaWYoIWVtcHR5KCkpewogICAgICAgICAgICBhbnNbYW5zQ250KytdID0gJy0nOwogICAgICAgICAgICAvL3ByaW50ZigiJWQgIixkYXRhW2NudC0xXSk7CiAgICAgICAgICAgIHJldHVybiBkYXRhWy0tY250XTsgICAgICAgICAKICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgYW5zRmFsc2UgPSBmYWxzZTsKICAgICAgICB9CiAgICB9CiAgICBib29sIGVtcHR5KCl7CiAgICAgICAgaWYoY250PT0wKSByZXR1cm4gdHJ1ZTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBib29sIGdldEFuc0ZhbHNlKCl7CiAgICAgICAgcmV0dXJuIGFuc0ZhbHNlOwogICAgfQogICAgaW50IGdldEFuc0NudCgpewogICAgICAgIHJldHVybiBhbnNDbnQ7CiAgICB9CiAgICBjaGFyIGdldEFucyhpbnQgaSl7CiAgICAgICAgcmV0dXJuIGFuc1tpXTsKICAgIH0KICAgIHZvaWQgc2V0QW5zRmFsc2UoYm9vbCBpKXsKICAgICAgICBhbnNGYWxzZSA9IGk7CiAgICB9Cn07CiAKaW50IG1haW4oKXsKICAgIHN0YWNrIHM7CiAKICAgIGludCB0LCBjbnQgPSAwLCBudW0gPSAxOwogICAgaW50IGlucHV0WzEwMDAwMF0gPSB7MH07CiAgICBzY2FuZigiJWQiLCAmdCk7CiAgICAgCiAgICBmb3IoaW50IGkgPSAwIDsgaSA8IHQgOyBpKyspewogICAgICAgIHNjYW5mKCIlZCIsJmlucHV0W2ldKTsKICAgIH0gLy8gaW5wdXQgZGF0YQogCiAgICB3aGlsZSh0cnVlKXsKICAgICAgICBpZihjbnQgPT0gdCl7IC8vIOyeheugpe2VnCDqsK/siJjsmYAg7YWM7Iqk7Yq47J2YIO2BrOq4sOqwgCDqsJnri6TrqbQg7KKF66OMCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0vLyBlbmQKICAgICAgICAgCiAgICAgICAgaWYoaW5wdXRbY250XSA9PSBudW0peyAvLyDsnoXroKXrsJvsnYAg7J24642x7Iqk7JeQIOychOy5mO2VnCDqsJLqs7wsIG51beqwgCDqsJnri6TrqbQKICAgICAgICAgICAgIAogICAgICAgICAgICBzLnB1c2gobnVtKyspOyAgICAgIC8vIOuEo+qzoAogICAgICAgICAgICBzLnBvcCgpOyAgICAgICAgICAgICAgICAgICAgLy8g6rq864OECiAgICAgICAgICAgIGNudCsrOyAgICAgICAgICAgICAgICAgIC8vIOuLpOydjCDsnbjrjbHsiqTroZwKICAgICAgICAgICAgIAogICAgICAgIH1lbHNlIGlmKGlucHV0W2NudF0gPCBudW0peyAvLyDsnoXroKXrsJvsnYAg7J24642x7Iqk7JeQIOychOy5mO2VnCDqsJLrs7Tri6QgbnVt7J20IOuNlCDtgazri6TrqbQsIOq6vOuCtOq4sAogCiAgICAgICAgICAgIGludCB0ZW1wID0gcy5wb3AoKTsgLy8g6rq864OEICAgICAgICAgICAKICAgICAgICAgICAgaWYodGVtcCAhPSBpbnB1dFtjbnRdKXsgLy8g6rq864K4IOqwkuydtCDsnoXroKXrsJvsnYAg7J24642x7Iqk7JeQIOychOy5mO2VnCDqsJLqs7wg6rCZ7KeAIOyViuuLpOuptAogICAgICAgICAgICAgICAgcy5zZXRBbnNGYWxzZShmYWxzZSk7ICAgLy8gTk/rpbwg7Lac66Cl7ZWY6riw7JyE7ZW0IGZhbHNlIOqwkiDshKTsoJUKICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5kCiAgICAgICAgICAgIH0KICAgICAgICAgICAgY250Kys7ICAgICAgLy8g66ee64qUIOqyveyasOudvOuptCDri6TsnYwg7J24642x7IqkIOqwkiDsp4TtlokKIAogICAgICAgIH1lbHNleyAvLyDsnoXroKXrsJvsnYAg7J24642x7Iqk7JeQIOychOy5mO2VnCDqsJLrs7Tri6Qg7J6R64uk66m0IOq3uOuMgOuhnCDtkbjsiawKIAogICAgICAgICAgICBzLnB1c2gobnVtKyspOyAvLyDtkbjsiawgICAgICAgICAgICAKICAgICAgICB9ICAgICAgIAogICAgfQogCiAgICBpZihzLmdldEFuc0ZhbHNlKCkpewogICAgICAgIGludCB0ZW1wID0gcy5nZXRBbnNDbnQoKTsKICAgICAgICBmb3IoaW50IGkgPSAwIDsgaSA8IHRlbXAgOyBpKyspewogICAgICAgICAgICBwcmludGYoIiVjXG4iLHMuZ2V0QW5zKGkpKTsgICAgICAgICAKICAgICAgICB9CiAgICB9ZWxzZXsKICAgICAgICBwcmludGYoIk5PXG4iKTsKICAgIH0KICAgIHJldHVybiAwOwp9