#include using namespace std; int main(){ map mp; mp['G']=0; mp['C']=1; mp['P']=2; int n,m; cin>>n>>m; vector s(n); for (int i=0;i>s[i]; string ans(m,'#'); auto dfs=[&](auto dfs,vector idx,int now)-> bool { vector> next(3); for (int i:idx) next[mp[s[i][now]]].push_back(i); vector v; for (int i=0;i<3;i++) if (next[i].size()>0) v.push_back(i); int c=v.size(); if (c==0){ return true; } if (now==m) return false; if (c==1){ ans[now]="GCP"[(v[0]+2)%3]; return true; } if (c==2){ int u1=(v[1]+2)%3,u0=(v[0]+2)%3; if ((v[0]+1)%3!=u1&&dfs(dfs,next[v[0]],now+1)){ ans[now]="GCP"[u1]; return true; } if ((v[1]+1)%3!=u0&&dfs(dfs,next[v[1]],now+1)){ ans[now]="GCP"[u0]; return true; } return false; } if (c==3){ return false; } }; vector all(n); iota(all.begin(),all.end(),0); if (dfs(dfs,all,0)){ for (int i=0;i