fn main() { let mut s = String::new(); std::io::stdin().read_line(&mut s).ok(); let n: u64 = s.trim().parse().unwrap(); let cond = |p: u64| -> bool { if p <= 1 { return false; } let v = n % p; let mut n = n; while n > 0 { if n % p != v { return false; } n /= p; } true }; let mut ans = n + 1; for p in (1..).take_while(|p| p * p <= n) { if cond(p) { ans = ans.min(p); } if n % p == 0 { let p = n / p - 1; if cond(p) { ans = ans.min(p); } } } println!("{}", ans); }