use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
for line in stdin.lock().lines() {
if line.is_ok() {
let content = line.unwrap();
let number: u64 = content.parse().unwrap();
let zeckendorf = zeckendorf_repr(number);
print!("{} = ", number);
for (i, fib) in zeckendorf.iter().enumerate() {
if i < zeckendorf.len() - 1 {
print!("{} + ", fib);
} else {
println!("{}", fib);
}
}
}
}
}
pub fn gen_fibs_to(limit: u64) -> Vec<u64> {
let mut fibs: Vec<u64> = vec![1, 2];
while fibs[fibs.len()-1] <= limit {
let next_fib = fibs[fibs.len() - 1] + fibs[fibs.len() - 2];
fibs.push(next_fib);
}
fibs.pop();
fibs
}
pub fn zeckendorf_repr(n: u64) -> Vec<u64> {
let fibs = gen_fibs_to(n);
let mut repr: Vec<u64> = Vec::new();
let mut curr_sum: u64 = 0;
for fib in fibs.iter().rev() {
if fib + curr_sum > n {
continue;
}
repr.push(*fib);
curr_sum = curr_sum + *fib;
if curr_sum == n {
break;
}
}
repr
}
dXNlIHN0ZDo6aW86OntzZWxmLCBCdWZSZWFkfTsKCmZuIG1haW4oKSB7CiAgICBsZXQgc3RkaW4gPSBpbzo6c3RkaW4oKTsKICAgIGZvciBsaW5lIGluIHN0ZGluLmxvY2soKS5saW5lcygpIHsKICAgICAgICBpZiBsaW5lLmlzX29rKCkgewogICAgICAgICAgICBsZXQgY29udGVudCA9IGxpbmUudW53cmFwKCk7CiAgICAgICAgICAgIGxldCBudW1iZXI6IHU2NCA9IGNvbnRlbnQucGFyc2UoKS51bndyYXAoKTsKICAgICAgICAgICAgbGV0IHplY2tlbmRvcmYgPSB6ZWNrZW5kb3JmX3JlcHIobnVtYmVyKTsKCiAgICAgICAgICAgIHByaW50ISgie30gPSAiLCBudW1iZXIpOwogICAgICAgICAgICBmb3IgKGksIGZpYikgaW4gemVja2VuZG9yZi5pdGVyKCkuZW51bWVyYXRlKCkgewogICAgICAgICAgICAgICAgaWYgaSA8IHplY2tlbmRvcmYubGVuKCkgLSAxIHsKICAgICAgICAgICAgICAgICAgICBwcmludCEoInt9ICsgIiwgZmliKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnRsbiEoInt9IiwgZmliKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKcHViIGZuIGdlbl9maWJzX3RvKGxpbWl0OiB1NjQpIC0+IFZlYzx1NjQ+IHsKICAgIGxldCBtdXQgZmliczogVmVjPHU2ND4gPSB2ZWMhWzEsIDJdOwoKICAgIHdoaWxlIGZpYnNbZmlicy5sZW4oKS0xXSA8PSBsaW1pdCB7CiAgICAgICAgbGV0IG5leHRfZmliID0gZmlic1tmaWJzLmxlbigpIC0gMV0gKyBmaWJzW2ZpYnMubGVuKCkgLSAyXTsKICAgICAgICBmaWJzLnB1c2gobmV4dF9maWIpOwogICAgfQogICAgZmlicy5wb3AoKTsKCiAgICBmaWJzCn0KCnB1YiBmbiB6ZWNrZW5kb3JmX3JlcHIobjogdTY0KSAtPiBWZWM8dTY0PiB7CiAgICBsZXQgZmlicyA9IGdlbl9maWJzX3RvKG4pOwogICAgbGV0IG11dCByZXByOiBWZWM8dTY0PiA9IFZlYzo6bmV3KCk7CiAgICBsZXQgbXV0IGN1cnJfc3VtOiB1NjQgPSAwOwoKICAgIGZvciBmaWIgaW4gZmlicy5pdGVyKCkucmV2KCkgewogICAgICAgIGlmIGZpYiArIGN1cnJfc3VtID4gbiB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgcmVwci5wdXNoKCpmaWIpOwogICAgICAgIGN1cnJfc3VtID0gY3Vycl9zdW0gKyAqZmliOwoKICAgICAgICBpZiBjdXJyX3N1bSA9PSBuIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQoKICAgIHJlcHIKfQ==