use std::io::{self, *};
fn print(begini: usize, beginj: usize, endi: usize, endj: usize, v: &[Vec<i32>]) {
print!("{}", v[begini][beginj]);
for j in (beginj + 1)..=endj {
print!(",{}", v[begini][j]);
}
for i in (begini + 1)..=endi {
print!(",{}", v[i][endj]);
}
if begini < endi {
for j in (beginj..endj).rev() {
print!(",{}", v[endi][j]);
}
}
if beginj < endj {
for i in ((begini + 1)..endi).rev() {
print!(",{}", v[i][beginj]);
}
}
if endj - beginj <= 1 || endi - begini <= 1 {
return;
}
print!(",");
print(begini + 1, beginj + 1, endi - 1, endj - 1, v);
}
fn main() {
let mut stdin = io::stdin();
let mut input = String::new();
stdin.read_to_string(&mut input).unwrap();
let mut tokens = input.split_whitespace();
loop {
let m = tokens.next().unwrap().parse::<i32>().unwrap();
let n = tokens.next().unwrap().parse::<i32>().unwrap();
if m != -1 && n != -1 {
let m = m as usize;
let n = n as usize;
let mut v = vec![vec![-1; n]; m];
for i in 0..m {
for j in 0..n {
v[i][j] = tokens.next().unwrap().parse::<i32>().unwrap();
}
}
print(0, 0, m - 1, n - 1, &v);
println!("");
} else {
break;
}
}
}