#![allow(non_snake_case, unused_imports)] use proconio::{fastout, input, marker::*}; use std::cmp::Reverse; #[fastout] fn main() { input! { N: usize, } let mut q = std::collections::BinaryHeap::new(); q.push((Reverse(N), vec![])); loop { let (rv, log) = q.pop().unwrap(); let v = rv.0; if v == 1 { let mut l = log.clone(); l.reverse(); println!( "{}", l.iter() .map(|x: &char| x.to_string()) .collect::>() .join("") ); return; } if (v - 1) % 2 == 0 { let mut l = log.clone(); l.push('A'); q.push((Reverse((v - 1) / 2), l)); } if (v - 1) % 3 == 0 { let mut l = log.clone(); l.push('B'); q.push((Reverse((v - 1) / 3), l)); } } }