#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

const int MAX = 100;
typedef pair<int,int> P;

int n;
int in[MAX][MAX];
P ans[MAX][MAX];

void row(int m){
  int s = (1<<20);

  for(int i = 0; i < n; i++)
    s = min(s,in[m][i]);

  for(int i = 0; i < n; i++)
    if(s == in[m][i]) ans[m][i].first = true;

    
}
void column(int m){

  int l = -1;

  for(int i = 0; i < n; i++)
    l = max(l,in[i][m]);

  for(int i = 0; i < n; i++)
      if(l == in[i][m]) ans[i][m].second = true;

}

void init(){
  for(int i = 0; i < MAX; i++)
    for(int j = 0; j < MAX; j++)
      ans[i][j] = P(false,false);

}
int main(){
  while(cin >> n && n){
    init();
    for(int i = 0; i < n; i++)
      for(int j = 0; j < n; j++)
	cin >> in[i][j];


    for(int i = 0; i < n; i++){
      row(i);
      column(i);
    }

    vector<int> V;

    for(int i = 0; i < n; i++)
      for(int j = 0; j < n; j++)
	if(ans[i][j] == P(true,true)) V.push_back(in[i][j]);

    if(V.size() == 0) cout << "0" << endl;
    else if(V.size() == 1) cout << V[0] << endl;
    else{
      sort(V.begin(),V.end());
      vector<int> :: iterator ite = V.begin();
      while(ite != V.end()){
	cout << *ite << endl;
	ite = upper_bound(V.begin(),V.end(),*ite);
      }
    }
  }
  return 0;
}