#include <iostream>
#include <utility>
template <typename T>
inline std::pair<T, T> fib_step(const std::pair<T, T>& n) {
return std::make_pair(n.first + n.second, n.first);
}
template <typename T>
T find_largest_factor(T target) {
auto divisor = T(1);
auto fibs = std::make_pair(T(2), T(1));
while (fibs.first < target) {
fibs = fib_step(fibs);
if (target % fibs.first == 0) divisor = fibs.first;
}
return target / divisor;
}
template <typename T>
void print_fibonacciish(T target) {
if (target == T(0)) { // special case
std::cout << "0\n";
return;
}
auto start = find_largest_factor(target);
auto fibs = std::make_pair(start, T(0));
std::cout << "0 " << start;
while (fibs.first < target) {
fibs = fib_step(fibs);
std::cout << ' ' << fibs.first;
}
std::cout << '\n';
}
int main() {
// regular inputs
print_fibonacciish(21);
print_fibonacciish(84);
// challenge inputs
print_fibonacciish(0);
print_fibonacciish(578);
print_fibonacciish(123456789);
// /u/Blackshell's input
print_fibonacciish(38695577906193299L);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgppbmxpbmUgc3RkOjpwYWlyPFQsIFQ+IGZpYl9zdGVwKGNvbnN0IHN0ZDo6cGFpcjxULCBUPiYgbikgewoJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG4uZmlyc3QgKyBuLnNlY29uZCwgbi5maXJzdCk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpUIGZpbmRfbGFyZ2VzdF9mYWN0b3IoVCB0YXJnZXQpIHsKCWF1dG8gZGl2aXNvciA9IFQoMSk7CglhdXRvIGZpYnMgPSBzdGQ6Om1ha2VfcGFpcihUKDIpLCBUKDEpKTsKCXdoaWxlIChmaWJzLmZpcnN0IDwgdGFyZ2V0KSB7CgkJZmlicyA9IGZpYl9zdGVwKGZpYnMpOwoJCWlmICh0YXJnZXQgJSBmaWJzLmZpcnN0ID09IDApIGRpdmlzb3IgPSBmaWJzLmZpcnN0OwoJfQoJcmV0dXJuIHRhcmdldCAvIGRpdmlzb3I7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp2b2lkIHByaW50X2ZpYm9uYWNjaWlzaChUIHRhcmdldCkgewoJaWYgKHRhcmdldCA9PSBUKDApKSB7IC8vIHNwZWNpYWwgY2FzZQoJCXN0ZDo6Y291dCA8PCAiMFxuIjsKCQlyZXR1cm47Cgl9CglhdXRvIHN0YXJ0ID0gZmluZF9sYXJnZXN0X2ZhY3Rvcih0YXJnZXQpOwoJYXV0byBmaWJzID0gc3RkOjptYWtlX3BhaXIoc3RhcnQsIFQoMCkpOwoJc3RkOjpjb3V0IDw8ICIwICIgPDwgc3RhcnQ7Cgl3aGlsZSAoZmlicy5maXJzdCA8IHRhcmdldCkgewoJCWZpYnMgPSBmaWJfc3RlcChmaWJzKTsKCQlzdGQ6OmNvdXQgPDwgJyAnIDw8IGZpYnMuZmlyc3Q7Cgl9CglzdGQ6OmNvdXQgPDwgJ1xuJzsKfQoKaW50IG1haW4oKSB7CgkvLyByZWd1bGFyIGlucHV0cwoJcHJpbnRfZmlib25hY2NpaXNoKDIxKTsKCXByaW50X2ZpYm9uYWNjaWlzaCg4NCk7CgkKCS8vIGNoYWxsZW5nZSBpbnB1dHMKCXByaW50X2ZpYm9uYWNjaWlzaCgwKTsKCXByaW50X2ZpYm9uYWNjaWlzaCg1NzgpOwoJcHJpbnRfZmlib25hY2NpaXNoKDEyMzQ1Njc4OSk7CgkKCS8vIC91L0JsYWNrc2hlbGwncyBpbnB1dAoJcHJpbnRfZmlib25hY2NpaXNoKDM4Njk1NTc3OTA2MTkzMjk5TCk7CgkKCXJldHVybiAwOwp9