#include <bits/stdc++.h> using namespace std; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define llong long long int getresult(vector<string> &m) { vector<int> wins(m.size(), 0); rep(i, m.size()) rep(j, m.size()) if(m[i][j] == 'o') wins[i] += 1; int val = wins[0]; sort(wins.begin(), wins.end(), greater<int>()); unique(wins.begin(), wins.end()); int ret = distance(wins.begin(), find(wins.begin(), wins.end(), val)) + 1; return ret; } int main() { int n; cin >> n; vector<string> m(n); rep(i, n) cin >> m[i]; int rests = 0; rep(i, n) rep(j, n) if(m[i][j] == '-') rests += 1; rests /= 2; int result = n; if(rests > 0) { rep(i, 1 << rests) { bitset<20> bits(i); vector<string> base = m; int counter = 0; for(int ii=0; ii<n; ii++) { for(int jj=ii+1; jj<n; jj++) { if(base[ii][jj] == '-') { if(bits.test(counter) == 1) { base[ii][jj] = 'o'; base[jj][ii] = 'x'; } else { base[ii][jj] = 'x'; base[jj][ii] = 'o'; } counter++; } } } result = min(getresult(base), result); } } else { result = min(getresult(m), result); } cout << result << "\n"; }