use itertools::Itertools; use proconio::{input, marker::Chars}; const HAND_KIND: [char; 3] = ['G', 'P', 'C']; fn main() { input! { n: usize, m: usize, s: [Chars; n], } let mut ans = vec![]; let mut is_lose = vec![false; n]; for j in 0..m { let mut kinds: i32 = 0; for i in 0..n { if is_lose[i] { continue; } kinds |= 1 << HAND_KIND.iter().position(|c| *c == s[i][j]).unwrap() } let win_hand = match kinds.count_ones() { 0 => 0, 1 => { let mut res = 0; for i in 0..3 { if 1 << i == kinds { res = (i + 1) % 3; } } res } 2 => { if kinds == (1 << 0) | (1 << 1) { 1 } else if kinds == (1 << 1) | (1 << 2) { 2 } else { 0 } } 3 => { println!("-1"); return; } _ => unreachable!(), }; ans.push(HAND_KIND[win_hand]); for i in 0..n { if is_lose[i] { continue; } let kind = HAND_KIND.iter().position(|c| *c == s[i][j]).unwrap(); if (kind + 1) % 3 == win_hand { is_lose[i] = true; } } } println!("{}", ans.iter().join("")); }