#include <bits/stdc++.h>
#define MAXN 300010
#define fr(i,n) for(int i=0; i<n; ++i)
using namespace std;
string s[MAXN], b[MAXN], ans[MAXN];
string sol;
int n,m,p, mini=MAXN+10;
bitset<MAXN> taj;
//this is main function which solves on basis of using pat string
//logic of implementation is same as editorial at "https://c...content-available-to-author-only...s.com/blog/entry/64331"
void solve(string& pat,bool f){
bitset<MAXN> te; //for storing which pat caused optimal soln reversed of pat or same as pat 1 for reversed
int br=0;
fr(i,n){
int br1=0, br2=0;
fr(j,m){
br1 += (s[i][j] != pat[((i&1)*2 + (j&1))]); //CACACA..
br2 += (s[i][j] != pat[((i&1)*2 + (j&1)^1)]); //ACACAC..
}
if(br2 < br1) te[i]=1;
br += min(br1,br2);
}
if(br<mini){
//i found another optimal solution so update :
mini=br; //cost
sol=pat; //pattern
taj=te; //which one rev or normal ACACA.. or CACA.. for string pat passed as parameter
p=f; //what was status of matrix rotated or not for this optimal one
}
}
//generate all pattern of string ACGT and call solve for each string
void solvepart(bool f){
//this string must lexicographicaly first in sorted order
//you can't use pat=AGCT , GCAT becoz next_permutation works by sorting
//this pattern and then next in lexicographically increasing order
string pat="ACGT";
int i=0;
do{
//cout<<pat<<endl;
solve(pat,f);
}while(next_permutation(pat.begin(),pat.end()));
//cout<<i<<endl;
}
//matrix is n * m
//this function rotates matrix as well as sets proper values of n,m values
void rotatematrix(string (&a)[MAXN]){
fr(i,m) b[i].clear();
fr(i,m) fr(j,n) b[i] += a[j][i];
swap(n,m);
fr(i,n) a[i]=b[i];
}
int main() {
cin>>n>>m;
fr(i,n) cin>>s[i];
p=0;
solvepart(0);
rotatematrix(s);
solvepart(1);
// if the original matrix gives optimal solution
// re-swap n,m as they are swapped by rotatematrix(s) called before solvepart(1);
if(!p) swap(n,m);
fr(i,n){
fr(j,m){
ans[i] += sol[(i&1)*2 + (j&1)^taj[i]];
}
}
//if rotated matrix gave optimal solution, rotate ans matrix too
if(p) rotatematrix(ans);
fr(i,n) cout<<ans[i]<<endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgTUFYTiAzMDAwMTAgCiNkZWZpbmUgZnIoaSxuKSBmb3IoaW50IGk9MDsgaTxuOyArK2kpCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJpbmcgc1tNQVhOXSwgYltNQVhOXSwgYW5zW01BWE5dOwpzdHJpbmcgc29sOwppbnQgbixtLHAsIG1pbmk9TUFYTisxMDsKYml0c2V0PE1BWE4+IHRhajsKCi8vdGhpcyBpcyBtYWluIGZ1bmN0aW9uIHdoaWNoIHNvbHZlcyBvbiBiYXNpcyBvZiB1c2luZyBwYXQgc3RyaW5nIAovL2xvZ2ljIG9mIGltcGxlbWVudGF0aW9uIGlzIHNhbWUgYXMgZWRpdG9yaWFsIGF0ICJodHRwczovL2MuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnMuY29tL2Jsb2cvZW50cnkvNjQzMzEiCnZvaWQgc29sdmUoc3RyaW5nJiBwYXQsYm9vbCBmKXsKICAgIAogICAgYml0c2V0PE1BWE4+IHRlOyAvL2ZvciBzdG9yaW5nIHdoaWNoIHBhdCBjYXVzZWQgb3B0aW1hbCBzb2xuIHJldmVyc2VkIG9mIHBhdCBvciBzYW1lIGFzIHBhdCAxIGZvciByZXZlcnNlZAogICAgaW50IGJyPTA7CiAgICBmcihpLG4pewogICAgICAgIGludCBicjE9MCwgYnIyPTA7CiAgICAgICAgZnIoaixtKXsKICAgICAgICAgICAgYnIxICs9IChzW2ldW2pdICE9IHBhdFsoKGkmMSkqMiArIChqJjEpKV0pOyAvL0NBQ0FDQS4uCiAgICAgICAgICAgIGJyMiArPSAoc1tpXVtqXSAhPSBwYXRbKChpJjEpKjIgKyAoaiYxKV4xKV0pOyAvL0FDQUNBQy4uCiAgICAgICAgfQogICAgICAgIGlmKGJyMiA8IGJyMSkgdGVbaV09MTsKICAgICAgICBiciArPSBtaW4oYnIxLGJyMik7CiAgICB9CiAgICAKICAgIGlmKGJyPG1pbmkpewogICAgICAgIC8vaSBmb3VuZCBhbm90aGVyIG9wdGltYWwgc29sdXRpb24gc28gdXBkYXRlIDoKICAgICAgICBtaW5pPWJyOyAvL2Nvc3QKICAgICAgICBzb2w9cGF0OyAvL3BhdHRlcm4KICAgICAgICB0YWo9dGU7IC8vd2hpY2ggb25lIHJldiBvciBub3JtYWwgQUNBQ0EuLiBvciBDQUNBLi4gZm9yIHN0cmluZyBwYXQgcGFzc2VkIGFzIHBhcmFtZXRlcgogICAgICAgIHA9ZjsgLy93aGF0IHdhcyBzdGF0dXMgb2YgbWF0cml4IHJvdGF0ZWQgb3Igbm90IGZvciB0aGlzIG9wdGltYWwgb25lIAogICAgfQp9CgovL2dlbmVyYXRlIGFsbCBwYXR0ZXJuIG9mIHN0cmluZyBBQ0dUIGFuZCBjYWxsIHNvbHZlIGZvciBlYWNoIHN0cmluZwp2b2lkIHNvbHZlcGFydChib29sIGYpewogICAgLy90aGlzIHN0cmluZyBtdXN0IGxleGljb2dyYXBoaWNhbHkgZmlyc3QgaW4gc29ydGVkIG9yZGVyCiAgICAvL3lvdSBjYW4ndCB1c2UgcGF0PUFHQ1QgLCBHQ0FUIGJlY296IG5leHRfcGVybXV0YXRpb24gd29ya3MgYnkgc29ydGluZyAKICAgIC8vdGhpcyBwYXR0ZXJuIGFuZCB0aGVuIG5leHQgaW4gbGV4aWNvZ3JhcGhpY2FsbHkgaW5jcmVhc2luZyBvcmRlcgogICAgc3RyaW5nIHBhdD0iQUNHVCI7CiAgICBpbnQgaT0wOwogICAgZG97CiAgICAgICAgLy9jb3V0PDxwYXQ8PGVuZGw7CiAgICAgICAgc29sdmUocGF0LGYpOwogICAgfXdoaWxlKG5leHRfcGVybXV0YXRpb24ocGF0LmJlZ2luKCkscGF0LmVuZCgpKSk7CiAgICAvL2NvdXQ8PGk8PGVuZGw7Cn0KCi8vbWF0cml4IGlzIG4gKiBtCi8vdGhpcyBmdW5jdGlvbiByb3RhdGVzIG1hdHJpeCBhcyB3ZWxsIGFzIHNldHMgcHJvcGVyIHZhbHVlcyBvZiBuLG0gdmFsdWVzCnZvaWQgcm90YXRlbWF0cml4KHN0cmluZyAoJmEpW01BWE5dKXsKICAgIGZyKGksbSkgYltpXS5jbGVhcigpOwogICAgZnIoaSxtKSBmcihqLG4pIGJbaV0gKz0gYVtqXVtpXTsKICAgIHN3YXAobixtKTsKICAgIAogICAgZnIoaSxuKSBhW2ldPWJbaV07Cn0KCmludCBtYWluKCkgewoJY2luPj5uPj5tOwoJZnIoaSxuKSBjaW4+PnNbaV07CglwPTA7CgkKCXNvbHZlcGFydCgwKTsKCXJvdGF0ZW1hdHJpeChzKTsKCXNvbHZlcGFydCgxKTsKCQoJLy8gaWYgdGhlIG9yaWdpbmFsIG1hdHJpeCBnaXZlcyBvcHRpbWFsIHNvbHV0aW9uCiAgICAvLyByZS1zd2FwIG4sbSBhcyB0aGV5IGFyZSBzd2FwcGVkIGJ5IHJvdGF0ZW1hdHJpeChzKSBjYWxsZWQgYmVmb3JlIHNvbHZlcGFydCgxKTsKCWlmKCFwKSBzd2FwKG4sbSk7CgkKCWZyKGksbil7CgkgICAgZnIoaixtKXsgCgkgICAgICAgIGFuc1tpXSArPSBzb2xbKGkmMSkqMiArIChqJjEpXnRhaltpXV07CgkgICAgfQoJfQoJCgkvL2lmIHJvdGF0ZWQgbWF0cml4IGdhdmUgb3B0aW1hbCBzb2x1dGlvbiwgcm90YXRlIGFucyBtYXRyaXggdG9vCglpZihwKSByb3RhdGVtYXRyaXgoYW5zKTsKCQoJZnIoaSxuKSBjb3V0PDxhbnNbaV08PGVuZGw7CgkKCXJldHVybiAwOwp9Cg==