import sys
import math
input = sys.stdin.readline
def inp():
return(int(input()))
def inlt():
return(list(map(int,input().split())))
def insr():
s = input()
return(list(s[:len(s) - 1]))
def invr():
return(map(int,input().split()))
t = inp()
for test in range(t):
n, m = invr()
lst = []
for i in range(n):
s = insr()
lst.append(s)
for c in range(m):
lowest_can_fall = n - 1
for i in range(n-1, -1, -1):
if lst[i][c] == '*':
lst[i][c] = '.'
lst[lowest_can_fall][c] = '*'
lowest_can_fall -= 1
elif lst[i][c] == 'o':
lowest_can_fall = i - 1
for i in range(n):
for j in range(m):
print(lst[i][j], end='')
print('\n')
#include <bits/stdc++.h>
using namespace std;
#define ios \
ios_base::sync_with_stdio(0); \
cin.tie(0); \
cout.tie(0);
#define YY cout<<"YES"<<endl
#define NN cout<<"NO"<<endl
#define yy cout<<"Yes"<<endl
#define nn cout<<"No"<<endl
#define endl "\n"
#define typecast static_cast
#define ll long long
#define ld long double
#define vi vector<int>
#define vll vector<ll>
#define vld vector<ld>
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pld pair<ll,ld>
#define vpii vector<pii>
#define vpll vector<pll>
#define check(statement) cout<<"**************Check: "<<statement<<" **************"<<endl;
#define pi 2*acos(0.0)
#define PQ priority_queue
#define loop(it,init,condition,update) for(auto it=init;condition;update)
#define range(i,start,end,step) loop(i,start,(step>0?i<end:i>=end),i+=step)
#define increment(i,start,end) range(i,start,end,1)
#define decrement(i,start,end) range(i,start,end,-1)
#define for_each(element,container) for(auto &element:container)
#define sort(arr) sort(arr.begin(),arr.end())
#define rsort(arr) sort(arr.begin(),arr.end(),greater<auto>())
#define char_index(c,caps) caps?c-'A':c-'a'
#define Input(A,x) A x; cin>>x
#define Init(B,x,value) B x; x=value
inline ll llmax(ll a,ll b){
return a>b?a:b;
}
inline ll llmin(ll a,ll b){
return a<b?a:b;
}
template<typename tmp>
inline void inputArray(vector<tmp>&arr,int start=0){
increment(i,start,arr.size()){
cin>>arr[i];
}
}
template<typename tmp>
inline void inputMatrix(vector<vector<tmp>>&matrix,int r=0,int c=0){
increment(i,r,matrix.size()){
increment(j,c,matrix[i].size()){
cin>>matrix[i][j];
}
}
}
template<typename tmp>
inline void printArray(vector<tmp>&arr){
for_each(element,arr){
cout<<element<<" ";
}
cout<<endl;
}
template<typename tmp>
inline void printMatrix(vector<vector<tmp>>&matrix){
increment(i,0,matrix.size()){
increment(j,0,matrix[i].size()){
cout<<matrix[i][j]<<" ";
}
cout<<endl;
}
}
const int infinity=1e9+7;
const ll linf=1e18+7;
const ll llzero=typecast<ll>(0);
int main(){
ios;
Input(int,t);
while(t--){
int n,m;
cin>>n>>m;
vector<vector<char>>grid(n,vector<char>(m));
inputMatrix(grid);
decrement(i,n-2,0){
increment(j,0,m){
if(grid[i][j]=='*'){
int curr=i;
while(curr+1<n and grid[curr+1][j]=='.'){
swap(grid[curr+1][j],grid[curr][j]);
curr++;
}
}
}
}
increment(i,0,n){
increment(j,0,m){
cout<<grid[i][j];
}
cout<<endl;
}
}
return 0;
}
380. Insert Delete GetRandom O(1) | 332. Reconstruct Itinerary |
368. Largest Divisible Subset | 377. Combination Sum IV |
322. Coin Change | 307. Range Sum Query - Mutable |
287. Find the Duplicate Number | 279. Perfect Squares |
275. H-Index II | 274. H-Index |
260. Single Number III | 240. Search a 2D Matrix II |
238. Product of Array Except Self | 229. Majority Element II |
222. Count Complete Tree Nodes | 215. Kth Largest Element in an Array |
198. House Robber | 153. Find Minimum in Rotated Sorted Array |
150. Evaluate Reverse Polish Notation | 144. Binary Tree Preorder Traversal |
137. Single Number II | 130. Surrounded Regions |
129. Sum Root to Leaf Numbers | 120. Triangle |
102. Binary Tree Level Order Traversal | 96. Unique Binary Search Trees |
75. Sort Colors | 74. Search a 2D Matrix |
71. Simplify Path | 62. Unique Paths |