import java.util.ArrayList;

public class Memoize_Fact
{
    //private static ArrayList<Long> old_values = new ArrayList<Long>();
    private static ArrayList<Integer> old_values = new ArrayList<Integer>();

    static
    {
        old_values.add((int)1);
        old_values.add((int)1);
    }

    static public int factorial(short n)
    {
        if (n >= old_values.size())
        {
            System.err.println("New calculation for "+n+"!...");
            old_values.add(n*factorial((short)(n-1)));
        }
        return old_values.get(n);
    }

    public static void main(String[] args)
    {
        System.out.println("5! is "+factorial((short)5)+".");
        System.out.println("12! is "+factorial((short)12)+".");
        System.out.println("13! is "+factorial((short)13)+".");
    }
}
