#include "soccer.h"
#include <functional>
#include <vector>
using namespace std;
int biggest_stadium(int N, vector<vector<int>> F){
function<int(int, int)> get_at = [&](int x, int y) -> int {
if (x < 0 || x >= N) return 1;
if (y < 0 || y >= N) return 1;
return F[x][y];
};
int ans = 1;
for (int i = 0; i < N; i++){
for (int j = 0; j < N; j++){
// center at (i, j)
if (get_at(i, j))
continue;
int curr = 0;
int y_max;
for (int y = j; ; y++){
y_max = y;
if (get_at(i, y)){
curr += y - j;
break;
}
}
int y_curr = y_max;
for (int x = i+1; ; x++){
if (get_at(x, j)){
break;
}
int k = j;
for (k = j; k < y_curr; k++){
if (get_at(x, k)){
break;
}
}
curr += k - j;
y_curr = k;
}
y_curr = y_max;
for (int x = i-1; ; x--){
if (get_at(x, j)){
break;
}
int k = j;
for (k = j; k < y_curr; k++){
if (get_at(x, k)){
break;
}
}
curr += k - j;
y_curr = k;
}
// down
int y_min;
for (int y = j; ; y--){
y_min = y;
if (get_at(i, y)){
curr += j - y - 1;
break;
}
}
y_curr = y_min;
for (int x = i+1; ; x++){
if (get_at(x, j)){
break;
}
int k = j;
for (k = j; k > y_curr; k--){
if (get_at(x, k)){
break;
}
}
curr += j - k - 1;
y_curr = k;
}
y_curr = y_min;
for (int x = i-1; ; x--){
if (get_at(x, j)){
break;
}
int k = j;
for (k = j; k > y_curr; k--){
if (get_at(x, k)){
break;
}
}
curr += j - k - 1;
y_curr = k;
}
ans = max(ans, curr);
}
}
return ans;
}