#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <stack>
#include <string.h>
#include <map>
#include <math.h>
#include <queue>
#include <set>
#include <algorithm>
#define MAX 0x3f3f3f3f
typedef long long ll;
using namespace std;
int n,m,k;
int visi[11];//判断该列是否有#
int cnt_a[11];//遍历时当前#上的苹果数
int cnt[11];//每一列的a综述
char ans[50001][11];//结果输出
char a[50001][11]; //输入的数组
int main()
{
cin>>n>>m;
for(int i = 0 ;i < n;i++){
for(int j = 0 ; j < m ; j++){
cin>>a[i][j];
if(a[i][j] == '#')
visi[j] = 1;
if(a[i][j] == 'a')
cnt[j]++;
}
}
for(int j = 0 ; j < m ; j++)
{
if(visi[j] == 0) //没有# 直接全部落下苹果
for(int i = n - 1 ; i >= n - cnt[j];i--)
ans[i][j] = 'a';
else{ //有#
for(int i = 0 ; i < n ; i++)
{
if(a[i][j] == '#'){ //把当前#上的苹果都落下
ans[i][j] = '#';
for(int k = i - 1 ;k >=i - cnt_a[j];k--)
ans[k][j] = 'a';
cnt_a[j] = 0;
}
else if(a[i][j] == 'a')
cnt_a[j]++;
}
if(cnt_a[j] != 0)//把剩余的苹果都落下
for(int i = n - 1 ; i >= n-cnt_a[j];i--)
ans[i][j] = 'a';
}
}
for(int i = 0 ; i < n ; i++)
{
for(int j = 0 ; j < m ;j++)
{
if(ans[i][j] != 'a' && ans[i][j] !='#')
cout<<".";
else
cout<<ans[i][j];
}
cout<<endl;
}
return 0;
}