#nullable enable #region var (_input, _iter) = (Array.Empty(), 0); T I() where T : IParsable { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Split(' '), 0); return T.Parse(_input[_iter++], null); } #endregion static T[] Range(int n, Func F) => Enumerable.Range(0, n).Select(_ => F()).ToArray(); var n = I(); var m = I(); var sz = Range(n, I); var ans = new char[m].AsSpan(); ans.Fill('G'); var won = new bool[n]; for (var j = 0; j < m; j++) { var hz = new int[3]; for (var i = 0; i < n; i++) { if (won[i]) continue; var h = sz[i][j]; if (h == 'G') hz[0] = 1; if (h == 'C') hz[1] = 1; if (h == 'P') hz[2] = 1; } var sum = hz.Sum(); if (sum == 3) { Console.WriteLine(-1); return; } if (sum == 1) { if (hz[0] == 1) ans[j] = 'P'; if (hz[1] == 1) ans[j] = 'G'; if (hz[2] == 1) ans[j] = 'C'; break; } if (sum == 2) { if (hz[0] == 0) { ans[j] = 'C'; for (var i = 0; i < n; i++) if (sz[i][j] == 'P') won[i] = true; } if (hz[1] == 0) { ans[j] = 'P'; for (var i = 0; i < n; i++) if (sz[i][j] == 'G') won[i] = true; } if (hz[2] == 0) { ans[j] = 'G'; for (var i = 0; i < n; i++) if (sz[i][j] == 'C') won[i] = true; } } } Console.WriteLine(new string(ans));