$i = $<.read.split while !$i.empty? do r, k, h, w = $i.shift(4).map(&:to_i) raise if r != 90 g = $i.shift(h).map { |l| l.split("") } n = [h, w].max if h < w while g.size < n g << ["*"] * n end h = n else while g[0].size < n h.times do |i| g[i] << "*" end end w = n end (r / 90).times do g = g.transpose n.times do |i| g[i].reverse! end end ans = Array.new(n*k) { Array.new(w*k, '.') } n.times do |i| n.times do |j| k.times do |ii| k.times do |jj| ans[i*k + ii][j*k + jj] = g[i][j] end end end end ans.each do |row| row.delete("*") if row.size > 0 puts row.join end end end