#include <cstdio> #include <vector> #include <algorithm> int N; char result[6][6]; int win[6], all[6], rank[6]; int updateRank(){ std::vector<int> v(win, win+N); std::sort(v.begin(), v.end()); v.erase(std::unique(v.begin(), v.end()), v.end()); for(int i=0;i<N;i++){ rank[i] = v.size() - (std::lower_bound(v.begin(), v.end(), win[i]) - v.begin()); } } int main(){ scanf("%d", &N); for(int i=0;i<N;i++){ scanf("%*c"); for(int j=0;j<N;j++){ scanf("%c", &result[i][j]); if(result[i][j] == '#'){continue;} if(result[i][j] == '-'){continue;} if(result[i][j] == 'o'){ win[i] += 1; } all[i] += 1; } } for(int i=0;i<N;i++){ if(result[0][i] == '-'){ win[0] += 1; all[0] += 1; all[i] += 1; result[0][i] = 'o'; result[i][0] = 'x'; } } updateRank(); for(int i=1;i<N;i++){ if(rank[i] >= rank[0]){continue;} for(int j=1;j<N;j++){ if(result[i][j] == '-'){ win[i] += 1; all[i] += 1; all[j] += 1; result[i][j] = 'o'; result[j][i] = 'x'; } } } int rest = 0; for(int i=1;i<N;i++){ for(int j=1;j<N;j++){ if(result[i][j] == '-'){rest += 1;} } } rest /= 2; for(;rest>0;rest--){ int mn = -1; for(int i=0;i<N;i++){ if(all[i] < N-1 && (mn == -1 || win[i] < mn)){ mn = i; } } int mx = -1; for(int i=0;i<N;i++){ if(result[mn][i] == '-' && (mx == -1 || win[i] > mx)){ mx = i; } } win[mn] += 1; all[mn] += 1; all[mx] += 1; result[mn][mx] = 'o'; result[mx][mn] = 'x'; } updateRank(); printf("%d\n", rank[0]); }