use proconio::input; fn dfs (n: u128, ans: &mut Vec) -> u128{ //println!("now: {}, {:?}", n, ans); if n <= 1 { return n; } if (n-1) % 2 != 0 && (n-1) % 3 != 0 { return n; } if (n-1)%2 != 0 { ans.push('B'); let m = dfs((n-1)/3, ans); if m == 1 {return m;} ans.pop(); } else if (n-1)%3 != 0 { ans.push('A'); let m = dfs((n-1)/2, ans); if m == 1 {return m;} ans.pop(); } else { ans.push('A'); let m = dfs((n-1)/2, ans); if m == 1 {return m;} //println!("{} {}", m, n); ans.pop(); ans.push('B'); let m = dfs((n-1)/3, ans); if m == 1 {return m;} ans.pop(); } n } fn main () { input! { mut n: u128, } let mut ans: Vec = Vec::new(); dfs(n, &mut ans); let s = ans.iter() .rev() .map(|&c| c.to_string()) .collect::(); println!("{}", s); }