#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#include<string>
#include<cstring>
#include<set>
#include<cstdlib>
#include<sstream>
using namespace std;
char a[100][100];
int p[1001];
int n;
int checkarray[11];;
long long real = 100000000;
vector <int> temp;
vector<vector<int>> all;
bool check() {
bool flag = true;
for (int i = 0; i < n; i++) {
int sum = 0;
for (int j = i; j < n; j++) {
sum += temp[j];
if (a[i][j] == '-') {
if (sum >= 0) return false;
}
else if (a[i][j] == '+') {
if (sum <= 0) return false;
}
else {
if (sum != 0) return false;
}
}
}
return flag;
}
bool good(int cnt , int num) {
temp[cnt] = num;
bool flag = true;
for (int i = 0; i <= cnt; i++) {
int sum = 0;
for (int j = i; j <=cnt; j++) {
sum += temp[j];
if (a[i][j] == '-') {
if (sum >= 0) return false;
}
else if (a[i][j] == '+') {
if (sum <= 0) return false;
}
else {
if (sum != 0) return false;
}
}
}
return flag;
};
bool solve(int cnt) {
if (cnt == n) {
if (check()) {
return true;
}
else return false;
}
if (cnt >= n) return false;
if (a[cnt][cnt] == '+') {
for (int i = 1; i <= 10; i++) {
if (good(cnt,i) == false) continue;
temp[cnt] = i;
if (solve(cnt + 1)) return true;
}
}
else if (a[cnt][cnt] == '-') {
for (int i = -10; i <= -1; i++) {
if (good(cnt, i) == false) continue;
temp[cnt] = i;
if (solve(cnt + 1)) return true;
}
}
else if (a[cnt][cnt] == '0') {
temp[cnt] = 0;
if (solve(cnt + 1)) return true;
}
return false;
};
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
cin >> a[i][j];
}
}
temp.resize(n);
if (solve(0)) {
for (int i = 0; i < n; i++) {
cout << temp[i] << ' ';
}
cout << '\n';
}
return 0;
}
주의 !! a[i][j] == '0'으로 해야함....a[i][j]== 0으로 조건문 구성해서 해멤.. ㅋㅋ