var
a:array[0..10000,1..50]of longint;
f:array[0..10000,1..2]of longint;
l,n,i,j,k:longint;
c:char;
procedure dg(l,r:longint);//快排
var
i,t,j,m,n:longint;
begin
i:=l;
j:=r;
m:=f[i,1];
n:=f[i,2];
repeat
while (f[i,1]<m) or (f[i,1]=m) and (f[i,2]<n) do
inc(i);
while (f[j,1]>m) or (f[j,1]=m) and (f[j,2]>n) do
dec(j);
if i<=j then
begin
f[0]:=f[i];
f[i]:=f[j];
f[j]:=f[0];
inc(i);
dec(j);
end;
until i>j;
if(j>l) then
dg(l,j);
if(i<r) then
dg(i,r);
end;
begin
assign(input,'dna.in');//文件输入输出
assign(output,'dna.out');
reset(input);
rewrite(output);
readln(l,n);
for i:=1 to n do
begin
for j:=1 to l do
begin
read(c);//把读入的换为字符
if c='A' then
a[i,j]:=1;
if c='C' then
a[i,j]:=2;
if c='G' then
a[i,j]:=3;
if c='T' then
a[i,j]:=4;
end;
readln;
end;
for i:=1 to n do
f[i,2]:=i;//存原来的位置
for i:=1 to n do
begin
for j:=2 to l do
begin
for k:=1 to j-1 do
begin
if a[i,j]<a[i,k] then//看每行有多少逆序对
inc(f[i,1]);
end;
end;
end;
dg(1,n);//快排一遍逆序对
for i:=1 to n do
begin
for j:=1 to l do
begin
if a[f[i,2],j]=1 then//把原来转成数字的转回字符并输出
write('A');
if a[f[i,2],j]=2 then
write('C');
if a[f[i,2],j]=3 then
write('G');
if a[f[i,2],j]=4 then
write('T');
end;
writeln;
end;
close(input);
close(output);
end.