//TODO fn main() { let mut hw = String::new(); std::io::stdin().read_line(&mut hw).ok(); let hw: Vec = hw.trim().split_whitespace().map(|s| s.parse().unwrap()).collect(); let h = hw[0]; let w = hw[1]; let mut mapping: Vec> = vec![]; for _ in 0..h { let mut s = String::new(); std::io::stdin().read_line(&mut s).ok(); mapping.push(s.trim().chars().collect()); } if 0 == mapping.iter().map(|col| col.iter().filter(|&c| *c == '#').count()).sum::() { println!("NO"); return; } for i in 0..h { for j in 0..w { if i == 0 && j == 0 { continue; } for direct in vec![-1, 1].iter() { let mut used: Vec> = vec![vec![false; w]; h]; let mut flg = true; for k in 0..h { for (l, val) in mapping[k].iter().enumerate() { if *val == '#' { let row: usize = k + i; let col: isize = l as isize + j as isize * direct; if !used[k][l] { if row >= h || col >= w as isize || col < 0isize || mapping[row][col as usize] != '#' { flg = false; break; } else { used[row][col as usize] = true; } } } } if !flg { break; } } if flg { println!("YES"); return; } } } } println!("NO"); }