code: public int[] next()
  	{
  		if (numLeft == total)
  		{
  			numLeft = numLeft - 1;
  			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 - 1;
  		return a;
  	}
docs: --------------------------------------------------------