public int[] getNext () {

		if (numLeft.equals (total)) {
			numLeft = numLeft.subtract (BigInteger.ONE);
			return a;
		}

		int temp;

		// Find largest index j with a[j] < a[j+1]

		int j = a.length - 2;
		while (a[j] > a[j+1]) {
			j--;
		}

		// Find index k such that a[k] is smallest integer
		// greater than a[j] to the right of a[j]

		int k = a.length - 1;
		while (a[j] > a[k]) {
			k--;
		}

		// Interchange a[j] and a[k]

		temp = a[k];
		a[k] = a[j];
		a[j] = temp;

		// Put tail end of permutation after jth position in increasing order

		int r = a.length - 1;
		int s = j + 1;

		while (r > s) {
			temp = a[s];
			a[s] = a[r];
			a[r] = temp;
			r--;
			s++;
		}

		numLeft = numLeft.subtract (BigInteger.ONE);
		return a;

	}
public int [ ] getNext ( ) { if ( numLeft . equals ( total ) ) { numLeft = numLeft . subtract ( BigInteger . ONE ) ; return a ; } int temp ; int j = a . length - 2 ; while ( a [ j ] > a [ j + 1 ] ) { j -- ; } int k = a . length - 1 ; while ( a [ j ] > a [ k ] ) { k -- ; } temp = a [ k ] ; a [ k ] = a [ j ] ; a [ j ] = temp ; int r = a . length - 1 ; int s = j + 1 ; while ( r > s ) { temp = a [ s ] ; a [ s ] = a [ r ] ; a [ r ] = temp ; r -- ; s ++ ; } numLeft = numLeft . subtract ( BigInteger . ONE ) ; return a ; }
--------------------------------------------------------