#include <bits/stdc++.h>
using namespace std;
int n;
int QAQ;
int a[12][12];
bool read(int i, int j) {
  scanf("%d", &a[i][j]);
  j < n&& read(i, j + 1);
  j == n&& i < n&& read(i + 1, 1);
  return 1;
}
bool floyd(int k, int i, int j) {
  k < n&& i == n&& j == n&& floyd(k + 1, 1, 1);
  i < n&& j == n&& floyd(k, i + 1, 1);
  j < n&& floyd(k, i, j + 1);
  a[i][j] = min(a[i][j], a[i][k] + a[k][j]);
  return 1;
}
int ans;
bool update(int i, int j) {
  ans = max(ans, a[i][j]);
  j < n&& update(i, j + 1);
  j == n&& i < n&& update(i + 1, 1);
  return 1;
}
int main() {
  scanf("%d", &n);
  read(1, 1);
  floyd(1, 1, 1);
  ans = 0;
  update(1, 1);
  printf("%d\n", ans);
  return 0;
}
