import java.util.Scanner;

public class Factorial_Recursive_debug
{
	private static final boolean debug=true;
	private static final int MAX=5;
	
	public static int calculateFactorial(int num)
	{
		if(debug)
		{
			for(int j=MAX-num; j>0; j--)
				System.out.print("\t");
			System.out.println("[num=" + num + "]: called");
		}

		int result;
		
		if(num==1)
			result=1;
		else
			result = num * calculateFactorial(num-1);

		if(debug)
		{
			for(int j=MAX-num; j>0; j--)
				System.out.print("\t");
			System.out.println("[num=" + num + "]: returning " + result);
		}
		
		return result;
	}
	
	public static void main(String[] args)
	{
		Scanner scan = new Scanner(System.in);
		System.out.print("Enter a number: ");
		int n= scan.nextInt();
		
		int res = calculateFactorial(n);
		
		System.out.println( n + "! = " + res);
	}
}