use proconio::{fastout, input, marker::Bytes}; #[fastout] fn main() { input! { n: usize, c: [Bytes; n], } println!("{}", output(solve(c))); } fn solve(c: Vec>) -> u32 { fn rec((r, c): (u8, u8), l: &Vec>, s: &mut Vec) -> u32 { s.push(l[r as usize][c as usize]); if (r, c) == ((l.len() - 1) as u8, (l.len() - 1) as u8) { if (0..(s.len() / 2)).all(|i| s[i] == s[s.len() - 1 - i]) { s.pop(); return 1; } } let mut ans = 0; if r != (l.len() - 1) as u8 { ans += rec((r + 1, c), l, s); } if c != (l.len() - 1) as u8 { ans += rec((r, c + 1), l, s); } s.pop(); ans } rec((0, 0), &c, &mut vec![]) } fn output(ans: u32) -> u32 { ans }