// 再帰的に構築したくない? // AA AB BB BA // AA [AC CB BC CC CA] AB BB BA // AA [AD DD DC CD DB BD DA] AC CB BC CC CA AB BB BA fn main() { const K: u8 = 26; let mut ans = vec![(0, 0)]; for i in (1..K).rev() { ans.push((0, i)); ans.push((i, i)); for j in (1..i).rev() { ans.push((i, j)); ans.push((j, i)); } ans.push((i, 0)); } assert_eq!(ans.len(), K as usize * K as usize); assert!(ans.windows(2).all(|w| w[0].1 == w[1].0)); assert_eq!(ans.last().unwrap().1, ans[0].0); for &(a, b) in &ans { let a = (a + b'A') as char; let b = (b + b'A') as char; println!("{a}{b}"); } }