fn read() -> T { let mut s = String::new(); std::io::stdin().read_line(&mut s).ok(); s.trim().parse().ok().unwrap() } fn read_vec() -> Vec { let mut s = String::new(); std::io::stdin().read_line(&mut s).ok(); s.trim().split_whitespace() .map(|e| e.parse().ok().unwrap()).collect() } fn main() { let nm: Vec = read_vec(); let (n, m) = (nm[0], nm[1]); let line: Vec = read_vec(); let (opr, cols) = (&line[0], &line[1..].iter().map(|x| x.parse::().unwrap()).collect::>()); let mut rows: Vec = Vec::new(); for _ in 0..n { rows.push(read()); } for r in 0..n { for c in 0..m { let x = if opr == "+" { rows[r] + cols[c] } else { rows[r] * cols[c] }; if c == m - 1 { print!("{}", x); } else { print!("{} ", x); } } println!(""); } }