Module c

Expand description

ยงABC 370 C - Word Ladder

refs: https://atcoder.jp/contests/abc370/tasks/abc370_c

use proconio::{input, marker::Chars};

fn main() {
    input! {
        mut s: Chars,
        t: Chars,
    }

    let mut diff = Vec::new();
    for (i, (si, ti)) in s.clone().into_iter().zip(t.clone().into_iter()).enumerate() {
        if si != ti {
            diff.push((i, si, ti));
        }
    }

    let mut change = Vec::new();
    while s != t {
        let mut changed = false;
        for &(idx, si, ti) in &diff {
            if changed {
                break;
            }
            if s[idx] != ti && ti < si {
                s[idx] = ti;
                change.push(s.clone());
                changed = true;
            }
        }

        for &(idx, _, ti) in diff.iter().rev() {
            if changed {
                break;
            }
            if s[idx] != ti {
                s[idx] = ti;
                change.push(s.clone());
                changed = true;
            }
        }
    }

    println!("{}", change.len());
    for c in change {
        println!("{}", c.iter().collect::<String>());
    }
}