import sys sys.setrecursionlimit(5*10**7) import math import bisect import heapq from collections import deque, defaultdict import random import itertools #from decimal import Decimal #from copy import copy, deepcopy #from sortedcontainers import SortedList # ------------------------------------------------- pin = sys.stdin.readline def ST(): return pin().rstrip() def IN(): return int(pin()) def IM(): return map(int, pin().split()) def IL(): return list(IM()) def SR(n:int)->list: return [pin().rstrip() for _ in range(n)] def IMatrix(n:int)->list: return [IL() for _ in range(n)] INF = 2*10**18+1 mod = 998244353 # ------------------------------------------------- #import pypyjit #pypyjit.set_param("max_unroll_recursion=-1") N, M = IM() S = SR(N) ans = [] win = [0]*N for j in range(M): s = set() for i in range(N): if win[i]: continue s.add(S[i][j]) #print(ans , s) if len(s) == 3: print(-1) exit() elif len(s) == 1: if "G" in s: ans.append("P") elif "C" in s: ans.append("G") else: ans.append("C") for _ in range(M-j-1): ans.append("G") print("".join(ans)) exit() else: if not 'G' in s: ans.append("C") for i in range(N): if not win[i] and S[i][j] == "P": win[i] = 1 elif not "C" in s: ans.append("P") for i in range(N): if not win[i] and S[i][j] == "G": win[i] = 1 else: ans.append("G") for i in range(N): if not win[i] and S[i][j] == "C": win[i] = 1 if not all(win): print(-1) else: print("".join(ans))