Не могу двинуться дальше, разжуйте пожалуйста решение способом комбинаторики, число перестановок без повторений. Третий день сижу, видел готовые решения, но не могу их понять, сам только смог создать
String array[] = {"Мама",  "Мыла",  "Раму"};
           int res = 1;
for(int i = 0; i <= array.lenght; i++)
res = res*i;
Вот решение которое мне сделали, но его как и те которые решили студенты тут не могу разобрать.
public static void main(String[] args) {

  String array[] = new String[3];
  array[0] = "Мама";
  array[1] = "Мыла";
  array[2] = "Раму";
  prmt(array, 0);
}

private static void prmt(String[] pa, int i) {
  if (i == pa.length - 1) {
    arraout(pa);
  } else {
    for (int j = i; j < pa.length; j++) {
      aswap(pa, i, j);
      prmt(pa, i + 1);
      aswap(pa, i, j);
    }
  }
}


static void aswap(String[] array, int index1, int index2) {
     String tmp = array[index1];
     array[index1]= array[index2];
     array[index2] = tmp;
}

private static void arraout(String[] pa) {
  String s = "[";

  for (String a : pa) {
    s += a + ", ";
  }

  s = s.substring(0, s.length() - 2);

  s += "]";

  System.out.println(s);
}
}
Видимо я не могу осознать алгоритм действий почему то... или еще что то Я ни как не могу понять каким образом генерируется данная последовательность цифр (123 - 132 - 213 - 231), : 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1