class Square {

 private final static int default_arg = 5;

 private static int rec_square (int n) {
    if (n==0) {
      return 1;
    } else {
      return  2 * rec_square (n-1);
    }
  }

 /* Public entry point, re-directing to any of several versions. */
  public static int square (int n) {
    return rec_square (n);
  }

  /* Public entry, with a default argument. */
  public static int square () {
    return rec_square (default_arg);
  }
}

class StaticSqDemo {

  public static void main (String argv[]) {
    if (argv.length == 0) {
      int result = Square.square();
      System.out.println
	("Square returns " + result);
    } else {
      int arg = Integer.parseInt(argv[0]);
      int result = Square.square(arg);
      System.out.println
	("Square of " + arg + " is " + result);
    }
  }
}
