//Solution by lukasP (Lukáš Poláček) #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define rep(i,a,b) for(__typeof(b) i=(a); (i)<(b); ++(i)) int main() { int n; scanf("%d", &n); std::vector> orig(n); std::vector> op(n); rep(i,1,n) { std::string s; std::cin >> s; rep(j,0,i) { if (s[j] == '1') { orig[i].push_back(j); op[j].insert(i); } else { orig[j].push_back(i); op[i].insert(j); } } } std::vector g(n); std::vector winners(n, false); int current = 0, worst = 0; rep(i,0,n) { int best = -1; rep(j,0,n) if (!winners[j]) { if (best == -1 || g[j] + op[best].size() > g[best] + op[j].size()) { best = j; } } winners[best] = true; current -= g[best]; for (int x : op[best]) if (!winners[x]) { ++g[x]; ++current; } for (int x : orig[best]) if (!winners[x]) { op[x].erase(best); } worst = std::max(current, worst); } std::cout << worst << std::endl; }