#include<bits/stdc++.h>
using namespace std ;
const int N = 1005 ;
int n , vis[N] ;
vector<int> nei[N] , path ;
bool flag ;
void dfs(int node){
path.push_back(node) ; vis[node]=1 ;
if(path.size()==n){
flag = true ; return ;
}
for(int i:nei[node]){
if(!vis[i]) dfs(i) ;
if(flag) return ;
}
path.pop_back() ; vis[node]=0 ;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) ;
cin >> n ;
for(int i=1 ; i<n ; i++){
for(int j=0 ; j<i ; j++){
int p ; cin >> p ;
if(j<=(i-1)/2) nei[i].push_back(p) , nei[p].push_back(i) ;
}
}
int root = -1 ;
for(int i=0 ; i<n ; i++){
sort(nei[i].begin(),nei[i].end()) , nei[i].resize(unique(nei[i].begin(),nei[i].end())-nei[i].begin()) ;
if(nei[i].size()==1) root=i ;
}
if(root!=-1) dfs(root) ;
for(int i=0 ; i<n && !flag ; i++){
flag = false ; memset(vis,0,sizeof(vis)) ;
dfs(i) ;
if(flag) break ;
}
for(int i:path) cout << i << ' ' ;
cout << '\n' ;
return 0 ;
}