#include #include using namespace std; using namespace atcoder; typedef long long ll; typedef modint998244353 mint; //typedef modint1000000007 mint; void chmin(ll& a, ll b) { a = min(a, b); } void chmax(ll& a, ll b) { a = max(a, b); } int N, M; void dfs(vector& S, vector& R, vector& Hands, int battle){ if(battle == M && R.size() == 0){ for(int i = 0; i < Hands.size(); i++){ cout << Hands[i]; } cout << endl; exit(0); } if(battle == M){ return; } for(int k = 0; k < 3; k++){ vector nextR; bool lose = false; for(int i = 0; i < R.size(); i++){ char RivalHand = S[R[i]][battle]; // G if(k == 0){ if(RivalHand == 'G'){ nextR.push_back(R[i]); }else if(RivalHand == 'C'){ // 勝ち. }else if(RivalHand == 'P'){ lose = true; break; } } // C if(k == 1){ if(RivalHand == 'C'){ nextR.push_back(R[i]); }else if(RivalHand == 'P'){ // 勝ち. }else if(RivalHand == 'G'){ lose = true; break; } } // P if(k == 2){ if(RivalHand == 'P'){ nextR.push_back(R[i]); }else if(RivalHand == 'G'){ // 勝ち. }else if(RivalHand == 'C'){ lose = true; break; } } } string HandKind = "GCP"; if(!lose){ Hands.push_back(HandKind[k]); dfs(S, nextR, Hands, battle + 1); Hands.pop_back(); } } } int main() { cin >> N >> M; vector S(N); for(int i = 0; i < N; i++) cin >> S[i]; vector Hands; vector R(N); for(int i = 0; i < N; i++){ R[i] = i; } dfs(S, R, Hands, 0); cout << -1 << endl; }