use itertools::{Itertools, enumerate}; use proconio::{input, marker::Chars}; fn main() { input! { aa: Chars, ddd: [[u64; aa.len()]; aa.len()], (n, m): (usize, usize), ss: [Chars; n], } let char_to_int = |ch: char| aa.iter().position(|&a| ch == a).unwrap(); let uuu = ss .iter() .map(|s| s.iter().map(|&ch| char_to_int(ch)).collect_vec()) .collect_vec(); let mut lookup = vec![vec![0_u64; aa.len()]; m]; for pos in 0..m { for from in 0..aa.len() { for uu in &uuu { let to = uu[pos]; lookup[pos][from] += ddd[from][to]; } } } let solve = |uu: &[usize]| enumerate(uu).map(|(i, &u)| lookup[i][u]).sum::(); let output = uuu.iter().map(|uu| solve(uu)).join("\n"); println!("{output}"); }