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;
        }
    }
}