def sgets = gets.strip def get_int = Integer(sgets) def get_list = sgets.split def get_int_list = get_list.map { Integer(_1) } def puts_yn(b) = puts(b ? 'Yes' : 'No') n, m = get_int_list s = n.times.map do sgets.chars.map { it == '#' } end def op0(s, n, m, di, dj) r = false (di.abs..n-1).each do |i| (dj.abs..m-1).each do |j| i1 = i + di j1 = j + dj if !s[i1][j1] && s[i][j] r = s[i1][j1] = true s[i][j] = false end end end r end def op1(s, n, m) = op0(s, n, m, -1, 0) def op2(s, n, m) = op0(s, n, m, 0, -1) while op1(s, n, m); end while op2(s, n, m); end out = s.map do |l| l.map do |b| b ? '#' : '.' end.join end.join("\n") puts out