package jp.funnything.competition.util;

import java.math.BigInteger;

/**
 * Utility for BigInteger
 */
public class BI {
    public static BigInteger ZERO = BigInteger.ZERO;
    public static BigInteger ONE = BigInteger.ONE;

    public static BigInteger add( final BigInteger x , final BigInteger y ) {
        return x.add( y );
    }

    public static BigInteger add( final BigInteger x , final long y ) {
        return add( x , v( y ) );
    }

    public static BigInteger add( final long x , final BigInteger y ) {
        return add( v( x ) , y );
    }

    public static int cmp( final BigInteger x , final BigInteger y ) {
        return x.compareTo( y );
    }

    public static int cmp( final BigInteger x , final long y ) {
        return cmp( x , v( y ) );
    }

    public static int cmp( final long x , final BigInteger y ) {
        return cmp( v( x ) , y );
    }

    public static BigInteger div( final BigInteger x , final BigInteger y ) {
        return x.divide( y );
    }

    public static BigInteger div( final BigInteger x , final long y ) {
        return div( x , v( y ) );
    }

    public static BigInteger div( final long x , final BigInteger y ) {
        return div( v( x ) , y );
    }

    public static BigInteger mod( final BigInteger x , final BigInteger y ) {
        return x.mod( y );
    }

    public static BigInteger mod( final BigInteger x , final long y ) {
        return mod( x , v( y ) );
    }

    public static BigInteger mod( final long x , final BigInteger y ) {
        return mod( v( x ) , y );
    }

    public static BigInteger mul( final BigInteger x , final BigInteger y ) {
        return x.multiply( y );
    }

    public static BigInteger mul( final BigInteger x , final long y ) {
        return mul( x , v( y ) );
    }

    public static BigInteger mul( final long x , final BigInteger y ) {
        return mul( v( x ) , y );
    }

    public static BigInteger sub( final BigInteger x , final BigInteger y ) {
        return x.subtract( y );
    }

    public static BigInteger sub( final BigInteger x , final long y ) {
        return sub( x , v( y ) );
    }

    public static BigInteger sub( final long x , final BigInteger y ) {
        return sub( v( x ) , y );
    }

    public static BigInteger v( final long value ) {
        return BigInteger.valueOf( value );
    }
}

package info.m3o.gcj2012.recyclednumber;

public class TestMainRecycledNumber {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int inA, inB;
		int caseCount = 0;
		// System.out.println("T=" + inT);

		ResultUtil resultUtil = new ResultUtil();

		// inA = Integer.valueOf(s[0]);
		// inB = Integer.valueOf(s[1]);
		inA = 1000000;
		// inB = 2000000;
		inB = 2000000;
		// System.out.println("A=" + inA + "B=" + inB );
		caseCount++;

		/*
		 * Start the actual Job
		 */
		resultUtil.clearSets();
		int n, numRecycledNumber;
		RecycledNumber recycledNumber;
		for (n = inA; n <= inB; n++) {
			recycledNumber = new RecycledNumber(n, inA, inB);
			recycledNumber.addRecycledNumbers(resultUtil.recycledNumberSet,
					resultUtil.testedNumberSet);
			for (String s : RecycledNumber.getCycledNumber(recycledNumber
					.getNumStr())) {
				recycledNumber.addRecycledNumbers(resultUtil.recycledNumberSet,
						resultUtil.testedNumberSet, s);
				
			}

			// recycledNumber.addRecycledNumbers(resultUtil.recycledNumberSet,
			// resultUtil.testedNumberSet);
		}
		numRecycledNumber = resultUtil.recycledNumberSet.size();

		System.out.print("Case #" + caseCount + ": ");
		System.out.println(numRecycledNumber);
//		for (MyNumberStringPair mnsp : resultUtil.recycledNumberSet) {
//			System.out.println("(" + mnsp.getS1() + ", " + mnsp.getS2() + ") ");
//		}
//		 System.out.println("END");

		// System.out.println("TestRecycleat = " +
		// RecycledNumber.testrecycleAt());

		// System.out.println("caseCount="+caseCount);
		// assert (inT == caseCount) : "CaseCount mismatch";

	}

}
