#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 0x3f3f3f3ftypedeflonglong ll;usingnamespace std;int n,m,k;int visi[11];//判断该列是否有袋子(#)int cnt_a[11];//遍历时当前袋子(#)往上的苹果数int cnt[11];//每一列的苹果总数char ans[50001][11];//结果输出char a[50001][11];//输入的数组intmain(){
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;}elseif(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;}return0;}