#!/usr/bin/perl

use Algorithm::FastPermute;
# which is avaible in CPAN sites

open IN, "<".$ARGV[0] or die "Cannot open $1";
while (<IN>){
    $linea++;
    chomp;
    if ($linea ==1){
	if (/MAX/ || /max/ || /Max/){
	    $tipo = 1;
	}
    }else{
	@lin = split / / ;
	$num=0;
	for $i (@lin){
	    $num++;
	    $costes[$linea-1][$num] = $i;
	}
	$N = $num;
    }
}
close IN;
if ($N != $linea-1) { die "Not a square matrix"; }
print "$N\n";
for $i (1..$N) {
    for $j (1..$N) {
	print "$costes[$i][$j] ";
    }
    print "\n";
}
print "\n";
my @order = (1..$N);

$ZMIN=1.0e14;
permute {
#    print "@order\n";
    $Z=0;
    for $i (1..$N) {
	$Z+=$costes[$i][$order[$i-1]];
    }
    if ($Z<=$ZMIN){
	$ZMIN=$Z;
	print "@order\t$Z\n";
    }
} @order;

__END__
