use std::collections::HashSet; use std::io::BufRead; fn main() { let stdin = std::io::stdin(); let mut lines = stdin.lock().lines(); for _t in 0..lines.next().unwrap().unwrap().trim().parse::().unwrap() { let _n = lines.next().unwrap(); let line = lines.next().unwrap().unwrap(); let words: Vec<&str> = line.split(' ').collect(); let mut graph: [HashSet; 26] = Default::default(); for word in &words { let i = word.chars().next().unwrap() as usize; graph[i - 97].insert(word[1..].to_string()); } println!("{}", (0..26).fold(0, |r, i| r + (0..26).fold(0, |s, j| { if i == j { s } else { let intersect = graph[i].iter() .fold(0, |c, d| c + graph[j].contains(d) as usize); s + (graph[i].len() - intersect) * (graph[j].len() - intersect) } }))) } }