fn main() { let mut input = String::new(); std::io::stdin().read_line(&mut input).ok(); let input = input .split_whitespace() .map(|x| x.parse::().unwrap()) .collect::>(); let (f0, f1, n) = (input[0], input[1], input[2]); let fk = Fk { f0: f0, f1: f1 }; println!("{}", fk.fk(n)); } struct Fk { f0: u64, f1: u64, } impl Fk { fn fk(&self, n: u64) -> u64 { match n { 0 => self.f0, 1 => self.f1, _ => { let mut f_k1 = self.f0; let mut f_k2 = self.f1; let mut tmp = 0; for _ in 2..n + 1 { tmp = f_k1 ^ f_k2; f_k1 = f_k2; f_k2 = tmp; } tmp } } } }