// file: mult.java

import java.math.BigInteger;
import java.util.*;

public abstract  class mult {

    private static int numBits = 20;  // default # of bits in BigInteger
    private static int maxTrials = 10;

    abstract public static BigInteger multiply(BigInteger n1, BigInteger n2);

    public static void main (String [] args){

	Random rnd = new Random ();       /* Use the starting time as seed for the **
					  ** Random number generation              */
	BigInteger b1, b2, r1, r2;
	int iteration;




	if (args.length == 0) {
	    System.out.println ("Number of bits is " + numBits);
	}
	else if (args.length > 1) {

	    System.err.println("Usage: java mult [numBits]");
	    return;
	}
	else{
	    try{
		numBits = Integer.parseInt(args[0]);
	    }
	    catch(Exception e){
		System.err.println("Usage: java mult [numBits]");
		return;
	    }
	    if(numBits <= 0) {
		System.err.println("Usage: java mult [numBits: positive integer]");
		return;
	    }

	}

	for(iteration = 0; iteration < maxTrials; iteration++){
	    b1 = new BigInteger (numBits, rnd);
	    b2 = new BigInteger (numBits, rnd);
	    r1 = b1.multiply(b2);
	    r2 = multiply(b1, b2);
	    System.out.println("            b1 = " + b1.toString());
	    System.out.println("            b2 = " + b2.toString());
	    System.out.println("normal product = " + r1.toString());
	    System.out.println("    my product = " + r2.toString());

	    System.out.println("----------------------------------------");
	}
    }

}