#include <bits/stdc++.h>
using namespace std ;
const int INF = 1e9 ;
const int N = 30 ;
int n ;
int c[N][N] ;
bool visited[N] ;
int choose[N] ;
int ans[N] ;
int minc =INF ;
int curc = 0 ;
int min_edge[N] ;
int total_min_edge = 0 ;
void dq ( int id ){
int lb = curc + total_min_edge ;
if ( lb >= minc )
return ;
for ( int j = 2 ; j <= n ; j++ ){
if ( !visited[j] ){
if (curc + c[choose[id - 1]][j] + (total_min_edge - min_edge[choose[id - 1]]) < minc ) {
choose[id] = j ;
visited[j] = true ;
curc += c[choose[id-1]][j] ;
total_min_edge -= min_edge[choose[id-1]] ;
if ( id == n ){
if ( curc + c[choose[n]][1] < minc ){
minc = curc + c[choose[n]][1] ;
for ( int i = 1 ; i <= n ; i++ )
ans[i] = choose[i] ;
}
}
else{
dq( id + 1 ) ;
}
total_min_edge += min_edge[choose[id - 1]];
curc -= c[choose[id - 1]][j];
visited[j] = false;
}
}
}
}
int main(){
cin >> n ;
for ( int i = 1 ; i <= n ; i++ ){
min_edge[i] = INF ;
for ( int j = 1 ; j <= n ; j++ ){
cin >> c[i][j] ;
if ( j != i && c[i][j] < min_edge[i] )
min_edge[i] = c[i][j] ;
}
total_min_edge += min_edge[i] ;
}
choose[1] = 1 ;
visited[1] = true ;
dq(2) ;
cout << minc << endl ;
for ( int i = 1 ; i <= n ; i++ )
cout << ans[i] << " " ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQgOwpjb25zdCBpbnQgSU5GID0gMWU5IDsKY29uc3QgaW50IE4gPSAzMCA7CmludCBuIDsKaW50IGNbTl1bTl0gOwpib29sIHZpc2l0ZWRbTl0gOwppbnQgY2hvb3NlW05dIDsKaW50IGFuc1tOXSA7CmludCBtaW5jID1JTkYgOwppbnQgY3VyYyA9IDAgOwppbnQgbWluX2VkZ2VbTl0gOwppbnQgdG90YWxfbWluX2VkZ2UgPSAwIDsKdm9pZCBkcSAoIGludCBpZCApewogICAgaW50IGxiID0gY3VyYyArIHRvdGFsX21pbl9lZGdlIDsKICAgIGlmICggbGIgPj0gbWluYyApCiAgICAgICAgcmV0dXJuIDsKICAgIGZvciAoIGludCBqID0gMiA7IGogPD0gbiA7IGorKyApewogICAgICAgIGlmICggIXZpc2l0ZWRbal0gKXsKICAgICAgICAgICAgaWYgKGN1cmMgKyBjW2Nob29zZVtpZCAtIDFdXVtqXSArICh0b3RhbF9taW5fZWRnZSAtIG1pbl9lZGdlW2Nob29zZVtpZCAtIDFdXSkgPCBtaW5jICkgewogICAgICAgICAgICAgICAgY2hvb3NlW2lkXSA9IGogOwogICAgICAgICAgICAgICAgdmlzaXRlZFtqXSA9IHRydWUgOwogICAgICAgICAgICAgICAgY3VyYyArPSBjW2Nob29zZVtpZC0xXV1bal0gOwogICAgICAgICAgICAgICAgdG90YWxfbWluX2VkZ2UgLT0gbWluX2VkZ2VbY2hvb3NlW2lkLTFdXSA7CiAgICAgICAgICAgICAgICBpZiAoIGlkID09IG4gKXsKICAgICAgICAgICAgICAgICAgICBpZiAoIGN1cmMgKyBjW2Nob29zZVtuXV1bMV0gPCBtaW5jICl7CiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmMgPSBjdXJjICsgY1tjaG9vc2Vbbl1dWzFdIDsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaW50IGkgPSAxIDsgaSA8PSBuIDsgaSsrICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuc1tpXSA9IGNob29zZVtpXSA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICBkcSggaWQgKyAxICkgOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdG90YWxfbWluX2VkZ2UgKz0gbWluX2VkZ2VbY2hvb3NlW2lkIC0gMV1dOwogICAgICAgICAgICAgICAgY3VyYyAtPSBjW2Nob29zZVtpZCAtIDFdXVtqXTsKICAgICAgICAgICAgICAgIHZpc2l0ZWRbal0gPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQppbnQgbWFpbigpewogICAgY2luID4+IG4gOwogICAgZm9yICggaW50IGkgPSAxIDsgaSA8PSBuIDsgaSsrICl7CiAgICAgICAgbWluX2VkZ2VbaV0gPSBJTkYgOwogICAgICAgIGZvciAoIGludCBqID0gMSA7IGogPD0gbiA7IGorKyApewogICAgICAgICAgICBjaW4gPj4gY1tpXVtqXSA7CiAgICAgICAgICAgIGlmICggaiAhPSBpICYmIGNbaV1bal0gPCBtaW5fZWRnZVtpXSApCiAgICAgICAgICAgICAgICBtaW5fZWRnZVtpXSA9IGNbaV1bal0gOwogICAgICAgIH0KICAgICAgICB0b3RhbF9taW5fZWRnZSArPSBtaW5fZWRnZVtpXSA7CiAgICB9CiAgICBjaG9vc2VbMV0gPSAxIDsKICAgIHZpc2l0ZWRbMV0gPSB0cnVlIDsKICAgIGRxKDIpIDsKICAgIGNvdXQgPDwgbWluYyA8PCBlbmRsIDsKICAgIGZvciAoIGludCBpID0gMSA7IGkgPD0gbiA7IGkrKyApCiAgICAgICAgY291dCA8PCBhbnNbaV0gPDwgIiAiIDsKfQoK