output_description: Print the final state of the grid in the same format as input (without the
  numbers of rows and columns); see the samples for clarity.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      H W
      a_{1, 1}...a_{1, W}
      :
      a_{H, 1}...a_{H, W}
attempt: # abc107_b.py
  # https://atcoder.jp/contests/abc107/tasks/abc107_b
  
  # B - Grid Compression /
  # 実行時間制限: 2 sec / メモリ制限: 1024 MB
  # 配点 : 200点
  
  # 問題文
  # 縦 H行、横 W 列のマス目があります。 上から i 行目、左から j 列目のマスを (i,j) と表します。
  # 各マスは白または黒です。 マス目の配色は、H 行 W 列の行列 (ai,j) によって与えられます。
  # ai,j が . ならばマス (i,j) は白であり、ai,j が # ならばマス (i,j)は黒です。
  # すぬけ君はこのマス目を圧縮しようとしています。 そのために、白いマスのみからなる行または列が存在する間、次の操作を繰り返し行います。
  
  #     操作: 白いマスのみからなる行または列をひとつ任意に選び、その行または列を取り除いて空白を詰める。
  
  # 各操作でどの行または列を選ぶかによらず、最終的なマス目は一意に定まることが示せます。 最終的なマス目を求めてください。
  
  # 制約
  #     1≤H,W≤100
  #     ai,jは . または # である。
  #     マス目全体で少なくともひとつは黒いマスが存在する。
  
  # 入力
  # 入力は以下の形式で標準入力から与えられる。
  # H W
  # a1,1...a1,W
  # :
  # aH,1...aH,W
  
  # 出力
  # 最終的なマス目を、入力と同様のフォーマットで出力せよ。 ただし、行数および列数は省くこと。 詳しくはサンプルを参照せよ。
  
  # 入力例 1
  # 4 4
  # ##.#
  # ....
  # ##.#
  # .#.#
  
  # 出力例 1
  # ###
  # ###
  # .##
  
  # 元のマス目における第 2行および第 3列がそれぞれ取り除かれます。
  
  # 入力例 2
  # 3 3
  # #..
  # .#.
  # ..#
  
  # 出力例 2
  # #..
  # .#.
  # ..#
  
  # 白いマスのみからなる行または列が存在しないので、操作は行われません。
  
  # 入力例 3
  # 4 5
  # .....
  # .....
  # ..#..
  # .....
  
  # 出力例 3
  # #
  
  # 入力例 4
  # 7 6
  # ......
  # ....#.
  # .#....
  # ..#...
  # ..#...
  # ......
  # .#..#.
  
  # 出力例 4
  # ..#
  # #..
  # .#.
  # .#.
  # #.#
  
  
  def calculation(lines):
      N, W = list(map(int, lines[0].split()))
      masus = list()
      for i in range(N):
          line = lines[i + 1]
          if line != "." * W:
              masus.append(line)
      for w in range(W):
          flag = True
          for masu in masus:
              if masu[w] == "#":
                  flag = False
          if flag:
              for i in range(len(masus)):
                  masus[i] = masus[i][:w] + " " + masus[i][w + 1 :]
      for i in range(len(masus)):
          masus[i] = masus[i].replace(" ", "")
      return masus
  
  
  # 引数を取得
  def get_input_lines():
      line = input()
      H, W = list(map(int, line.split()))
      lines = list()
      lines.append(line)
      for _ in range(H):
          lines.append(input())
      return lines
  
  
  # テストデータ
  def get_testdata(pattern):
      if pattern == 1:
          lines_input = ["4 4", "##.#", "....", "##.#", ".#.#"]
          lines_export = ["###", "###", ".##"]
      if pattern == 2:
          lines_input = ["3 3", "#..", ".#.", "..#"]
          lines_export = ["#..", ".#.", "..#"]
      if pattern == 3:
          lines_input = ["4 5", ".....", ".....", "..#..", "....."]
          lines_export = ["#"]
      if pattern == 4:
          lines_input = [
              "7 6",
              "......",
              "....#.",
              ".#....",
              "..#...",
              "..#...",
              "......",
              ".#..#.",
          ]
          lines_export = ["..#", "#..", ".#.", ".#.", "#.#"]
      return lines_input, lines_export
  
  
  # 動作モード判別
  def get_mode():
      import sys
  
      args = sys.argv
      if len(args) == 1:
          mode = 0
      else:
          mode = int(args[1])
      return mode
  
  
  # 主処理
  def main():
      mode = get_mode()
      if mode == 0:
          lines_input = get_input_lines()
      else:
          lines_input, lines_export = get_testdata(mode)
  
      lines_result = calculation(lines_input)
  
      for line_result in lines_result:
          print(line_result)
  
      # if mode > 0:
      #     print(f'lines_input=[{lines_input}]')
      #     print(f'lines_export=[{lines_export}]')
      #     print(f'lines_result=[{lines_result}]')
      #     if lines_result == lines_export:
      #         print('OK')
      #     else:
      #         print('NG')
  
  
  # 起動処理
  if __name__ == "__main__":
      main()
  
problem_description: Statement
  
  There is a grid of squares with H horizontal rows and W vertical columns. The
  square at the i-th row from the top and the j-th column from the left is
  represented as (i, j). Each square is black or white. The color of the square
  is given as an H-by-W matrix (a_{i, j}). If a_{i, j} is `.`, the square (i, j)
  is white; if a_{i, j} is `#`, the square (i, j) is black.
  
  Snuke is compressing this grid. He will do so by repeatedly performing the
  following operation while there is a row or column that consists only of white
  squares:
  
    * Operation: choose any one row or column that consists only of white squares, remove it and delete the space between the rows or columns.
  
  It can be shown that the final state of the grid is uniquely determined
  regardless of what row or column is chosen in each operation. Find the final
  state of the grid.
samples: [{"input": "4 4\n    ##.#\n    ....\n    ##.#\n    .#.#", "output": "###\n    ###\n    .##\n    \n\nThe second row and the third column in the original grid will be removed.\n\n* * *"}, {"input": "3 3\n    #..\n    .#.\n    ..#", "output": "#..\n    .#.\n    ..#\n    \n\nAs there is no row or column that consists only of white squares, no operation\nwill be performed.\n\n* * *"}, {"input": "4 5\n    .....\n    .....\n    ..#..\n    .....", "output": "#\n    \n\n* * *"}, {"input": "7 6\n    ......\n    ....#.\n    .#....\n    ..#...\n    ..#...\n    ......\n    .#..#.", "output": "..#\n    #..\n    .#.\n    .#.\n    #.#"}]