import java.util.HashMap;

public class Fibo {
    public static void main(String[] args) {
	Fib o  = new Fib();
	Fib om = new FibMem(1024);
	o.fib(24);
	om.fib(24);
	o.print();
	om.print();
    }
}

class Fib {
    public int c;
    Fib() { this.c = 0; }
    void print() {
	System.out.println(this.c);
    }
    int fib(int n) {
	c++;
	if (n<=1) { return n; }
	return fib(n-2) + fib(n-1);
    }
}

class FibMem extends Fib {
    HashMap<Integer, Integer> memo;
    FibMem(int n) {
	super();
	memo = new HashMap<>();
    }
    int fib(int n) {
	if (!memo.containsKey(n)) { memo.put(n, super.fib(n)); }
	return memo.get(n);
    }
}
