#include <iostream>
#include <bits/stdc++.h>
using namespace std;
void print(unordered_set<int> const &us) {
copy(us.begin(), us.end(), ostream_iterator<int>(cout, " "));
}
unordered_set<int> fibonacci_numbers(int arr[], int len) {
int max = *max_element(arr, arr + len);
int a = 0, b = 1;
unordered_set<int> fib, arr_fib;
fib.insert(a);
do {
fib.insert(b);
int c = a + b;
a = b;
b = c;
} while (b <= max);
for (int i = 0; i < len; i++)
if (fib.find(arr[i]) != fib.end())
arr_fib.insert(arr[i]);
return arr_fib;
}
int main()
{
// 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765
int arr[] = {9, 1, 31, 12, 13, 3, 89, 100, 233, 4, 144, 99};
int len = sizeof(arr) / sizeof(arr[0]);
unordered_set<int> arr_fib = fibonacci_numbers(arr, len);
print(arr_fib);
return 0;
}
/*
run:
144 233 89 3 1 13
*/