/*************************************************************************
 * Name:
 * Login:
 * Precept:
 *
 * Description: Factorial reads in a command-line argument N, and prints
 * N! = 1 * 2 * ... * N to System output.
 *
 * Dependencies: None.
 *
 * Examples:
 * % java Factorial 0
 * 1
 * % java Factorial 1
 * 1
 * % java Factorial 5
 * 120
 * % java Factorial 12
 * 479001600
 * % java Factorial 20
 * 2432902008176640000
 *
 * Remarks:
 * - Would overflow a long if N > 20
 * - Need to use extended precision arithmetic to handle bigger factorials
 *************************************************************************/

public class Factorial {
    
    // recursive method to find factorial
    // assumes n >= 0 and n <= 20
    public static _______ factorial(_________________________) {

         // base case
         if (________________)
              return _________;

         // reduction step
         return ______ * factorial(________);
    }

    public static void main(String[] args) {
        int N = Integer.parseInt(args[0]);
        System.out.println(factorial(N));
    }
}