use std::{collections::VecDeque, io::Stdin, str::FromStr}; struct Scanner { stdin: Stdin, buf: VecDeque<String>, } impl Scanner { fn new() -> Scanner { Scanner { stdin: std::io::stdin(), buf: VecDeque::new(), } } fn read(&mut self) -> String { loop { if let Some(x) = self.buf.pop_front() { break x; } let mut s = String::new(); self.stdin.read_line(&mut s).unwrap(); s.trim() .split_whitespace() .for_each(|x| self.buf.push_back(x.to_string())); } } fn string(&mut self) -> String { self.read() } fn parse<T: FromStr>(&mut self) -> T { self.read().parse().ok().unwrap() } fn u64(&mut self) -> u64 { self.parse() } fn i64(&mut self) -> i64 { self.parse() } fn chars(&mut self) -> Vec<char> { self.string().chars().collect() } } fn main() { let mut scanner = Scanner::new(); let a = scanner.i64(); let b = scanner.i64(); let mut state = [0; 3]; state[2] = a; for i in 0..b { state[0] = state[1]; state[1] = state[2]; state[2] = 0; state[2] -= state[0]; state[1] -= state[0]; state[0] = 0; } println!("{} {}", state[1], state[2]); }