void main(){
	int h, w;
	readf("%d %d\n", &h, &w);
	char[][] table;
	table.length = h;
	// 入力
	foreach(i; 0..h)table[i] ~= readln().chomp();
	
	int remh;
	int remw;
	// テーブルの各要素のORをとって縦横方向の無視する値を見る
	foreach(i; 0..h){
		foreach(j; 0..w){
			remh = remh | ( (table[i][j]=='#')? (1<<i): 0);
			remw = remw | ( (table[i][j]=='#')? (1<<j): 0);
		}
	}
	// 出力( ビットマスクして0であれば除く )
	foreach(i; 0..h){
		if( (remh&(1<<i)) == 0)continue;
		foreach(j; 0..w){
			if( (remw&(1<<j)) == 0 )continue;
			table[i][j].write();
		}
		writeln();
	}
}

import std.stdio, std.conv, std.algorithm, std.numeric, std.string, std.math;

// 1要素のみの入力
T _scan(T= int)(){
	return to!(T)( readln().chomp() );
}

// 1行に同一型の複数入力
T[] _scanln(T = int)(){
	T[] ln;
	foreach(string elm; readln().chomp().split()){
		ln ~= elm.to!T();
	}
	return ln;
}
