#include <stdio.h>
#include <unordered_map>
 
int fib(int n)
{
  static std::unordered_map<int, int> db;
  if(n < 2) return 1;
  if(db.count(n)) return db[n];
  return db[n] = fib(n - 1) + fib(n - 2);
}
 
int main(int ac, char **av)
{
  for(int n = 0; n < 38; ++n)
    printf("fib(%d) = %d\n", n, fib(n));
  return 0;
}