#include<fstream>
#include<iostream>
using namespace std;
ifstream fin("contest.in");
ofstream fout("contest.out");
const int Max=101;
int slen;
int n;
int y[Max][Max];
int x[Max];
int xbak[Max];
void input(){
fin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
fin>>y[i][j];
}
void out(int k){
int s=0;
for(int i=1;i<k;i++)
s+=y[x[i]][x[i+1]];
if(s<slen){
memset(xbak,0,sizeof(xbak));
for(int i=1;i<=k;i++)
xbak[i]=x[i];
slen=s;
}
}
int check(int v,int k){
if(y[k][v-1]==0) return 0;
if(k==n){
x[v]=k;out(v);return 0;
}
for(int i=2;i<v;i++){
if(x[i]==k) return 0;
}
return 1;
}
void search(int k){
if(k>n) return ;
for(int i=2;i<=n;i++)
if(check(k,i)){
x[k]=i;
search(k+1);
}
}
void output(){
fout<<slen<<endl;
for(int i=1;i<=n;i++) if(xbak[i]>0) fout<<xbak[i]<<" ";
fout<<endl;
}
int main(){
input();
slen=10000001;
x[1]=1;
search(2);
output();
return 0;
}
#include<iostream>
using namespace std;
ifstream fin("contest.in");
ofstream fout("contest.out");
const int Max=101;
int slen;
int n;
int y[Max][Max];
int x[Max];
int xbak[Max];
void input(){
fin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
fin>>y[i][j];
}
void out(int k){
int s=0;
for(int i=1;i<k;i++)
s+=y[x[i]][x[i+1]];
if(s<slen){
memset(xbak,0,sizeof(xbak));
for(int i=1;i<=k;i++)
xbak[i]=x[i];
slen=s;
}
}
int check(int v,int k){
if(y[k][v-1]==0) return 0;
if(k==n){
x[v]=k;out(v);return 0;
}
for(int i=2;i<v;i++){
if(x[i]==k) return 0;
}
return 1;
}
void search(int k){
if(k>n) return ;
for(int i=2;i<=n;i++)
if(check(k,i)){
x[k]=i;
search(k+1);
}
}
void output(){
fout<<slen<<endl;
for(int i=1;i<=n;i++) if(xbak[i]>0) fout<<xbak[i]<<" ";
fout<<endl;
}
int main(){
input();
slen=10000001;
x[1]=1;
search(2);
output();
return 0;
}