1.


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

/**
* ACM Training 2009
* ACM Problem #11628 - Another lottery
* Link: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=78&page=show_problem&problem=2675
*
* @author Dennis Wilfert
* @version 1.0, 08/09/2009
*
* Status : Accepted
* Runtime: 0.596
*/
public class Main {

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

BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
StringBuilder output = new StringBuilder();

StringTokenizer token;

int[][] lottery;

int participants, rounds, i, j, ggt;

while (true) {

token = new StringTokenizer(read.readLine());
// Spieler
participants = Integer.parseInt(token.nextToken());
// Runden
rounds = Integer.parseInt(token.nextToken());

if (participants == 0 && rounds == 0) {
break;
}

lottery = new int[participants + 1][rounds];
// Werte in ein 2-Dimensionales array einlesen
for (i = 0; i < participants; i++) {
token = new StringTokenizer(read.readLine());
for (j = 0; j < rounds; j++) {
lottery[i][j] = Integer.parseInt(token.nextToken());
// Summe der Lose in einer Runde
lottery[participants][j] += lottery[i][j];
}
}
// Bei der letzten Runde beginnen und schauen ob in der Runde jemand lose hat,
// wenn ja den ggT finden und ausgeben. Wenn nein dann eine Runde zurück.
for (i = rounds - 1; i >= 0; i--) {
if (lottery[participants][i] != 0) {
for (j = 0; j < participants; j++) {
ggt = smallggT(lottery[j][i], lottery[participants][i]);
output.append(lottery[j][i] / ggt);
output.append(" / ");
output.append(lottery[participants][i] / ggt);
output.append("\n");
}
break;
}
}


}
System.out.print(output);
}
/*
* ggT rekursiv durch den euklidischen Algorithmus bestimmen
*
*/

private static int smallggT(int a, int b) {
if (b == 0) {
return a;
} else {
return smallggT(b, a % b);
}
}
}