// No.43 野球の試合 #include #include #include using namespace std; int main() { int N; cin >> N; vector> s(N, vector(N)); for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) cin >> s[i][j]; } vector> unknown; vector win(N); for (int i = 0; i < N; ++i) { for (int j = i + 1; j < N; ++j) { if (s[i][j] == '-') unknown.emplace_back(i, j); if (s[i][j] == 'o') win[i]++; if (s[i][j] == 'x') win[j]++; } } auto calc = [](int t, vector &win) { sort(win.begin(), win.end()); win.erase(unique(win.begin(), win.end()), win.end()); auto itr = lower_bound(win.begin(), win.end(), t); return (int)(win.end() - itr); }; int res = 1 << 30; if (unknown.size()) { for (int bit = 0; bit < (1 << unknown.size()); ++bit) { auto tmp = win; for (int i = 0; i < unknown.size(); ++i) { if (bit >> i & 1) { tmp[unknown[i].first]++; } else { tmp[unknown[i].second]++; } } res = min(res, calc(tmp[0], tmp)); } } else { res = calc(win[0], win); } cout << res << endl; }