use proconio::{input, marker::Chars}; fn main() { input! { n: usize, m: usize, s: [Chars; n], } let mut flag = vec![false; n]; let mut ans = vec![]; for j in 0..m { let mut ng = true; let mut max_wins = (0, '_'); 'outer: for hand in ['G', 'C', 'P'] { let mut wins = 0; for i in 0..n { if flag[i] { continue; } match (hand, s[i][j]) { ('G', 'P') | ('P', 'C') | ('C', 'G') => { continue 'outer; } ('G', 'C') | ('P', 'G') | ('C', 'P') => wins += 1, _ => continue, } } ng = false; if max_wins.0 <= wins { max_wins = (wins, hand); } } if ng { println!("-1"); return; } let (_, hand) = max_wins; ans.push(hand); for i in 0..n { match (hand, s[i][j]) { ('G', 'C') | ('P', 'G') | ('C', 'P') => flag[i] = true, _ => continue, } } } if flag.iter().any(|&x| !x) { println!("-1"); return; } for i in ans { print!("{}", i); } println!(""); }