Problem:
Score : 200 points

Problem 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.

Constraints

1 \leq H, W \leq 100

a_{i, j} is . or #.

There is at least one black square in the whole grid.

Input

Input is given from Standard Input in the following format:

H W
a_{1, 1}...a_{1, W}
:
a_{H, 1}...a_{H, W}

Output

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.

Sample Input 1

4 4
##.#
....
##.#
.#.#

Sample Output 1

###
###
.##

The second row and the third column in the original grid will be removed.

Sample Input 2

3 3
#..
.#.
..#

Sample Output 2

#..
.#.
..#

As there is no row or column that consists only of white squares, no operation will be performed.

Sample Input 3

4 5
.....
.....
..#..
.....

Sample Output 3

#

Sample Input 4

7 6
......
....#.
.#....
..#...
..#...
......
.#..#.

Sample Output 4

..#
#..
.#.
.#.
#.#

Solution in C# (Mono 4.6.2.0) (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using static System.Console;
using static System.Math;

namespace Atcoder
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Solve.Answer();
            }
            catch (Exception ex)
            {
                WriteLine(ex.ToString());
            }
        }
    }

    public class Solve
    {
        public static void Answer()
        {
            var hw = IO.ReadSplitInt;
            string[,] table = new string[hw[0], hw[1]];
            for (int i = 0; i < hw[0]; i++)
            {
                var line = ReadLine();
                for (int j = 0; j < hw[1]; j++)
                {
                    table[i, j] = line[j].ToString();
                }
            }
            for (int i = 0; i < hw[0]; i++)
            {
                bool isAllWhite = true;
                for (int j = 0; j < hw[1]; j++)
                {
                    if (table[i, j] == "#")
                    {
                        isAllWhite = false;
                    }
                }
                if (isAllWhite)
                {
                    for (int j = 0; j < hw[1]; j++)
                    {
                        table[i, j] = "";
                    }
                }
            }
            for (int i = 0; i < hw[1]; i++)
            {
                bool isAllWhite = true;
                for (int j = 0; j < hw[0]; j++)
                {
                    if (table[j, i] == "#")
                    {
                        isAllWhite = false;
                    }
                }
                if (isAllWhite)
                {
                    for (int j = 0; j < hw[0]; j++)
                    {
                        table[j, i] = "";
                    }
                }
            }
            for (int i = 0; i < hw[0]; i++)
            {
                int cnt = 0;
                for (int j = 0; j < hw[1]; j++)
                {
                    if (!string.IsNullOrEmpty(table[i, j]))
                    {
                        Write(table[i, j]);
                        cnt++;
                    }
                }
                if (cnt != 0 && i != hw[0] - 1) WriteLine();
            }
        }

        public class IO
        {
            #region Input
            public static string ReadString => ReadLine();
            public static int ReadInt => int.Parse(ReadLine());
            public static long ReadLong => long.Parse(ReadLine());
            public static double ReadDouble => double.Parse(ReadLine());

            public static List<string> ReadSplitString => ReadLine().Split().ToList();
            public static List<int> ReadSplitInt => ReadLine().Split().Select(s => int.Parse(s)).ToList();
            public static List<long> ReadSplitLong => ReadLine().Split().Select(s => long.Parse(s)).ToList();
            public static List<double> ReadSplitdouble => ReadLine().Split().Select(s => double.Parse(s)).ToList();
            #endregion

            #region Output
            public static void OutJoinSpace<T>(IEnumerable<T> list) => WriteLine(string.Join(" ", list));
            public static void WriteLineYes_or_No(bool flag) => WriteLine(flag ? "Yes" : "No");

            #endregion
        }

        public class Mod
        {
            #region
            // 割る数の定義
            private readonly static long M = 1000000007;

            // 足し算
            public static long Add(long a, long b) => (a * b) % M;
            // 引き算
            public static long Sub(long a, long b) => (a - b) % M >= 0 ? (a - b) % M : (a - b) % M + M;
            // 掛け算
            public static long Multi(long a, long b) => (a * b) % M;
            #endregion
        }

        public class Scanner
        {
            #region
            public string Str => Console.ReadLine().Trim();
            public int Int => int.Parse(Str);
            public long Long => long.Parse(Str);
            public double Double => double.Parse(Str);
            public int[] ArrInt => Str.Split(' ').Select(int.Parse).ToArray();
            public long[] ArrLong => Str.Split(' ').Select(long.Parse).ToArray();
            //public char[][] Grid(int n) => Create(n, () => Str.ToCharArray());
            //public int[] ArrInt1D(int n) => Create(n, () => Int);
            //public long[] ArrLong1D(int n) => Create(n, () => Long);
            //public int[][] ArrInt2D(int n) => Create(n, () => ArrInt);
            //public long[][] ArrLong2D(int n) => Create(n, () => ArrLong);
            private Queue<string> q = new Queue<string>();
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            // インライン化を推奨する
            public T Next<T>()
            {
                if (q.Count == 0) foreach (var item in Str.Split(' ')) q.Enqueue(item);
                return (T)Convert.ChangeType(q.Dequeue(), typeof(T));
            }
            public void Make<T1>(out T1 v1) => v1 = Next<T1>();
            public void Make<T1, T2>(out T1 v1, out T2 v2) { v1 = Next<T1>(); v2 = Next<T2>(); }
            public void Make<T1, T2, T3>(out T1 v1, out T2 v2, out T3 v3) { Make(out v1, out v2); v3 = Next<T3>(); }
            public void Make<T1, T2, T3, T4>(out T1 v1, out T2 v2, out T3 v3, out T4 v4) { Make(out v1, out v2, out v3); v4 = Next<T4>(); }
            public void Make<T1, T2, T3, T4, T5>(out T1 v1, out T2 v2, out T3 v3, out T4 v4, out T5 v5) { Make(out v1, out v2, out v3, out v4); v5 = Next<T5>(); }
            public void Make<T1, T2, T3, T4, T5, T6>(out T1 v1, out T2 v2, out T3 v3, out T4 v4, out T5 v5, out T6 v6) { Make(out v1, out v2, out v3, out v4, out v5); v6 = Next<T6>(); }
            #endregion
        }

        public static long GCD(long x, long y)
        {
            #region
            if (x < y)
            {
                var tmp = x;
                x = y;
                y = tmp;
            }
            while (true)

            {
                if (x % y == 0)
                {
                    return y;
                }
                else
                {
                    var tmp = x;
                    x = y;
                    y = tmp % y;
                }
            }
            #endregion
        }

        public static long Choice2(long n)
        {
            #region
            if (n <= 1)
                return 0;
            if (n == 2)
                return 1;
            else
                return n * (n - 1) / 2;
            #endregion
        }
    }
}