#include <bits/stdc++.h>
using namespace std;
uint64_t rnd_data = 0xDEADBEEFDULL;
inline void my_srand(int seed) { rnd_data = ((uint64_t)seed << 16) | 0x330E; }
inline int my_rand() {
  rnd_data = rnd_data * 0x5DEECE66DULL + 0xB;
  return (rnd_data >> 17) & 0x7FFFFFFF;
}
template <class _T>
inline _T sqr(const _T &x) {
  return x * x;
}
const long double PI = 3.1415926535897932384626433832795L;
const long double EPS = 1e-11;
int n;
long long a[510][512];
int main() {
  scanf("%d", &n);
  for (int i = 0; i < (int)(n); i++) {
    for (int j = 0; j < (int)(n); j++) {
      scanf("%lld", &a[i][j]);
    }
  }
  if (n == 1) {
    puts("1");
    return 0;
  }
  int x = 0, y = 0;
  for (int i = 0; i < (int)(n); i++) {
    for (int j = 0; j < (int)(n); j++) {
      if (!a[i][j]) {
        x = i;
        y = j;
      }
    }
  }
  for (int i = 0; i < (int)(n); i++) {
    if (i == x) continue;
    long long sum = 0;
    for (int j = 0; j < (int)(n); j++) {
      sum += a[i][j];
      sum -= a[x][j];
    }
    if (sum <= 0) {
      puts("-1");
      return 0;
    }
    a[x][y] = sum;
    break;
  }
  long long sum = 0;
  for (int i = 0; i < (int)(n); i++) {
    sum += a[0][i];
  }
  for (int i = 0; i < (int)(n); i++) {
    long long cur = 0;
    for (int j = 0; j < (int)(n); j++) {
      cur += a[i][j];
    }
    if (cur != sum) {
      puts("-1");
      return 0;
    }
  }
  for (int i = 0; i < (int)(n); i++) {
    long long cur = 0;
    for (int j = 0; j < (int)(n); j++) {
      cur += a[j][i];
    }
    if (cur != sum) {
      puts("-1");
      return 0;
    }
  }
  {
    long long cur = 0;
    for (int j = 0; j < (int)(n); j++) {
      cur += a[j][j];
    }
    if (cur != sum) {
      puts("-1");
      return 0;
    }
  }
  {
    long long cur = 0;
    for (int j = 0; j < (int)(n); j++) {
      cur += a[n - j - 1][j];
    }
    if (cur != sum) {
      puts("-1");
      return 0;
    }
  }
  printf("%lld\n", a[x][y]);
  return 0;
}
