code: public class PermutationGenerator {
      private int[] array;
      private int firstNum;
      private boolean firstReady = false;
  
      public PermutationGenerator(int n, int firstNum_) {
          if (n < 1) {
              throw new IllegalArgumentException("The n must be min. 1");
          }
          firstNum = firstNum_;
          array = new int[n];
          reset();
      }
  
      public void reset() {
          for (int i = 0; i < array.length; i++) {
              array[i] = i + firstNum;
          }
          firstReady = false;
      }
  
      public boolean hasMore() {
          boolean end = firstReady;
          for (int i = 1; i < array.length; i++) {
              end = end && array[i] < array[i-1];
          }
          return !end;
      }
  
      public int[] getNext() {
  
          if (!firstReady) {
              firstReady = true;
              return array;
          }
  
          int temp;
          int j = array.length - 2;
          int k = array.length - 1;
  
          // Find largest index j with a[j] < a[j+1]
  
          for (;array[j] > array[j+1]; j--);
  
          // Find index k such that a[k] is smallest integer
          // greater than a[j] to the right of a[j]
  
          for (;array[j] > array[k]; k--);
  
          // Interchange a[j] and a[k]
  
          temp = array[k];
          array[k] = array[j];
          array[j] = temp;
  
          // Put tail end of permutation after jth position in increasing order
  
          int r = array.length - 1;
          int s = j + 1;
  
          while (r > s) {
              temp = array[s];
              array[s++] = array[r];
              array[r--] = temp;
          }
  
          return array;
      } // getNext()
  
      // For testing of the PermutationGenerator class
      public static void main(String[] args) {
          PermutationGenerator pg = new PermutationGenerator(3, 1);
  
          while (pg.hasMore()) {
              int[] temp =  pg.getNext();
              for (int i = 0; i < temp.length; i++) {
                  System.out.print(temp[i] + " ");
              }
              System.out.println();
          }
      }
  
  } // class
  