#include <iostream>
#include <cmath>
using namespace std;

const int MAX_N = 20;
int n;
double dist[MAX_N][MAX_N];
int prev[MAX_N];

double optval = INFINITY;
int optsol[MAX_N];

void solve(int u = 0) {
  bool end = true;
  for (int v = 0; v < n; ++v) {
    if (prev[v] == -1) {
      end = false;
      prev[v] = u;
      solve(v);
      prev[v] = -1;
    }
  }
  if (end) {
    double length = dist[u][0];
    for (int v = u; v != 0; v = prev[v]) 
      length += dist[prev[v]][v];
    if (length < optval) {
      optval = length;
      for (int i = 0; i < n; ++i)
        optsol[i] = prev[i];
      optsol[0] = u;
    }
  }
}

int main() {
  // get input
  cin >> n;
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < n; ++j)
      cin >> dist[i][j];

  for (int i = 0; i < n; ++i)
    prev[i] = -1;
  prev[0] = 0;

  solve();

  for (int u = optsol[0]; u != 0; u = optsol[u]) 
    cout << u+1 << " <- ";
  cout << 1 << "  :  " << optval << endl;
}