#!/usr/bin/perl

open IN, "<".$ARGV[0] or die "Cannot open $1";
$_ = <IN>;
if (/MAX/ || /max/ || /Max/){
    $tipo = 1;
}else { $tipo =0; }

while (<IN>){
    next if (/^#/);
    next if (/^$/);
    $linea++;
    chomp;
    s/\s+/ /g;
    @lin = split /\s+/ ;
    $num=0;
    for $i (@lin){
	$num++;
	$costes[$linea][$num] = $i;
    }
}
close IN;

$n = $num;
$m = $linea-1;



for $i (1 .. $m){
    $ofer[$i]=$costes[$i][$n+1];
    $sumof += $ofer[$i];
}
for $j (1..$n){
    $dem[$j]=$costes[$linea][$j];
    $sumde += $dem[$j];
}

print "$m + $extraof, $n + $extrade\n";
for $i (1..$m+$extraof) {
    for $j (1..$n+$extrade) {
	print "$costes[$i][$j] ";
    }
    print " $ofer[$i]\n";
}
print "@dem\n\n";


$extraof = $extrade = 0;
if ($sumof > $sumde){
    print "Problema desequilibrado, sumfil > sumcol\n"; 
    $extrade = 1;
    $dem[$n+1]=$sumof-$sumde;
    for $i (1..$m){
	$temp = $costes[$i][$n+1];
	$costes[$i][$n+1]=0;
	$costes[$i][$n+2]=$temp;
    }
}elsif ($sumof < $sumde){
    print "Problema desequilibrado, sumfil < sumcol\n"; 
    $extraof = 1;
    $ofer[$m+1]=$sumde-$sumof;
    for $j (1 .. $n){
	$costes[$m+1][$j]=0;
    }
}else{
    print "Problema equilibrado, sumfil = sumcol\n";
}


# for $i (1..$m){
#    for $j (1..$n){
#	if ($tipo==1){
#	    $costes[$i][$j]=-$costes[$i][$j];
#	}
#    }
# }

print "$m + $extraof, $n + $extrade\n";
for $i (1..$m+$extraof) {
    for $j (1..$n+$extrade) {
	print "$costes[$i][$j] ";
    }
    print " $ofer[$i]\n";
}
print "@dem\n";

# exit -1;

$d = `date`;
$d =~ s/ //g;
$d =~ s/\://g;
open OUT , ">$d" or die "Cannot open $d";
if ($tipo==1){
    print OUT "max: ";
}else{
    print OUT "min: ";
}
for $i (1.. $m+$extraof){
    for $j (1..$n+$extrade){
	print OUT "+$costes[$i][$j]*X$i"."s$j";
    }
}
print OUT ";\n";
for $i (1.. $m+$extraof){
    for $j (1..$n+$extrade){
	print OUT "+X$i"."s$j";
    }
    print OUT "=$ofer[$i];\n";
}
for $j (1.. $n+$extrade){
    for $i (1..$m+$extraof){
	print OUT "+X$i"."s$j";
    }
    print OUT "=$dem[$j];\n";
}
print OUT "int ";
for $j (1.. $n+$extrade){
    for $i (1..$m+$extraof){
	print OUT "X$i"."s$j";
	if ($j!=$n+$extrade || $i!=$m+$extraof ) { print OUT ","; }
    }
}
print OUT ";\n";

close OUT;

__END__
