fn main() { let mut n = String::new(); std::io::stdin().read_line(&mut n).ok(); let n: usize = n.trim().parse().unwrap(); let mut cnts = vec![3; n+1]; cnts[n] = 0; let mut availables = vec![false; n+1]; for i in 1.. { let val = i * (i+1) / 2; if val > n { break; } cnts[n-val] = 1; availables[val] = true;; } if cnts[0] == 1 { println!("1"); return; } for i in 1..n { if cnts[i] == 1 && availables[i] { println!("2"); return; } } println!("3"); }