>>76
こうすると計算量を減少できる

fn len_of_eq(s: &str, index: usize, even: usize) -> usize {
 let mut len = 0;
 for (p, q) in std::iter::zip(s[(index + even)..].chars(), s[0..=index].chars().rev()) {
  if p != q {
   break;
  }
  len += 1;
 }
 return len;
}

fn print_kaibun(s: &str) {
 for index in 0..s.len() {
  for even in 0..=1 {
   for len in 1..=len_of_eq(s, index, even) {
    let first = index + 1 - len;
    let last = index + len - 1 + even;
    println!("{first}~{last}: {}", &s[first..=last]);
   }
  }
 }
}

fn main() {
 print_kaibun("ABCBAXYZZYX");
}