use proconio::{input, marker::Chars}; fn main() { input! { _n: usize, s: Chars, } println!( "{}", if recursion(&s) != 0 { "First" } else { "Second" } ); } fn recursion(s: &[char]) -> usize { if s.is_empty() { return 0; } let mut grundy_numbers = vec![]; let mut left = 0_usize; while left < s.len() { let mut right = left; let mut level = 0_usize; loop { if s[right] == '(' { level += 1; } else { level -= 1; } right += 1; if level == 0 { break; } } if left == 0 && right == s.len() { let grundy = recursion(&s[1..s.len() - 1]); return (grundy == 0) as usize; } grundy_numbers.push(recursion(&s[left..right])); left = right; } grundy_numbers.sort_unstable(); grundy_numbers.dedup(); (0..grundy_numbers.len()) .find(|&i| i != grundy_numbers[i]) .unwrap_or(grundy_numbers.len()) }