1. 

/* Angewandte Mathematik, SS09, IFB 2C
* ACM Problem #542 (France '98)
* Link: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=7&page=show_problem&problem=483
*
* @author Dennis Wilfert
* @author Johann Studt
* @version 1.0, 06/09/2009
*
* Status : Accepted
* Runtime: 0.088
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
import java.util.StringTokenizer;

public class Main {

public static void main(String[] args) throws IOException {

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

StringBuilder output = new StringBuilder();
// Array für die Ländernamen
String[] countries = new String[16];

// 2-Dimensionales Array für die Wahrscheinlichkeiten
double[][] probability = new double[16][16];
// Chance berechnen
double[][] chance = new double[16][2];

int i;
int j;

// Ländernamen eintragen
int maxlength = 0;
for(i=0;i<16;i++){
countries[i] = reader.readLine();
// Längsten Ländernamen suchen für die Leerzeichen bei der Ausgabe
if(countries[i].length() > maxlength)maxlength = countries[i].length();
}

StringTokenizer token;
// Wahrscheinlichkeiten eintragen
for(i=0;i<16;i++){
token = new StringTokenizer(reader.readLine());
for(j=0;j<16;j++)
probability[i][j] = Double.parseDouble(token.nextToken());
}

// Jeweilige Wahrscheinlichkeit gegen den ersten Gegner zu gewinnen in [i][1] eintragen
for(i=0; i<16;i+=2){
chance[i][1]=probability[i][i+1];
chance[i+1][1]=probability[i+1][i];
}

// Zweite Runde
// Jedes Team einer Gruppe könnte gegen die zwei restlichen Teams der
// Gruppe spielen
for(i=0; i<16;i+=4){
// 1.Team der Gruppe
chance[i][0]+=chance[i][1]*probability[i][i+2]*chance[i+2][1]/10000;
chance[i][0]+=chance[i][1]*probability[i][i+3]*chance[i+3][1]/10000;
// 2. Team der Gruppe
chance[i+1][0]+=chance[i+1][1]*probability[i+1][i+2]*chance[i+2][1]/10000;
chance[i+1][0]+=chance[i+1][1]*probability[i+1][i+3]*chance[i+3][1]/10000;
// 3.Team der Gruppe
chance[i+2][0]+=chance[i+2][1]*probability[i+2][i]*chance[i][1]/10000;
chance[i+2][0]+=chance[i+2][1]*probability[i+2][i+1]*chance[i+1][1]/10000;
// 4. Team der Gruppe
chance[i+3][0]+=chance[i+3][1]*probability[i+3][i]*chance[i][1]/10000;
chance[i+3][0]+=chance[i+3][1]*probability[i+3][i+1]*chance[i+1][1]/10000;

}

for(j=0; j<16;j++)
chance[j][1] = 0;

// Dritte Runde
// Jedes Team einer Gruppe könnte gegen jedes Team der Nachbargruppe spielen
for(j=4;j<16;j+=8)
for(i=0;i<4;i++){
chance[j-4][1]+=chance[j-4][0]*probability[j-4][j+i]*chance[j+i][0]/10000;
chance[j-3][1]+=chance[j-3][0]*probability[j-3][j+i]*chance[j+i][0]/10000;
chance[j-2][1]+=chance[j-2][0]*probability[j-2][j+i]*chance[j+i][0]/10000;
chance[j-1][1]+=chance[j-1][0]*probability[j-1][j+i]*chance[j+i][0]/10000;

chance[j][1]+=chance[j][0]*probability[j][j-i-1]*chance[j-i-1][0]/10000;
chance[j+1][1]+=chance[j+1][0]*probability[j+1][j-i-1]*chance[j-i-1][0]/10000;
chance[j+2][1]+=chance[j+2][0]*probability[j+2][j-i-1]*chance[j-i-1][0]/10000;
chance[j+3][1]+=chance[j+3][0]*probability[j+3][j-i-1]*chance[j-i-1][0]/10000;
}


for(j=0; j<16;j++)
chance[j][0] = 0;


// Vierte Runde
// Jedes Team der zwei Gruppen könnte gegen jedes Team der zwei anderen Gruppen spielen
for(int h=8;h<16;h++)
for(i=0;i<8;i++)
chance[h][0]+=chance[h][1]*probability[h][i]*chance[i][1]/10000;

for(int h=0;h<8;h++)
for(i=8;i<16;i++)
chance[h][0]+=chance[h][1]*probability[h][i]*chance[i][1]/10000;

// Zahlen richtig runden
DecimalFormat df = new DecimalFormat();
df.applyPattern( "#,###,##0.00" );

// Formatierte Ausgabe
for(i=0;i<16;i++){

output.append(countries[i]);

for(j=0;j<maxlength-countries[i].length()+1;j++)
output.append(" ");

output.append("p=");
output.append(df.format(chance[i][0]));
output.append("%\n");
}

System.out.print(output);

}

}