<Problem>
http://ntucoder.net/Problem/Details/111
#include <iostream>
using namespace std;
// sinh hoan vi ke tiep
bool nextPermutation(int* arr, int n) {
int i = n - 2;
while (i >= 0 && arr[i] > arr[i + 1]) {
i--;
}
if (i >= 0) {
int k = n - 1;
while (arr[i] > arr[k]) {
k--;
}
swap(arr[i], arr[k]);
int r = i + 1;
int s = n - 1;
while (r < s) {
swap(arr[r], arr[s]);
r++;
s--;
}
return false;
}
else {
return true;
}
}
// hien thi
void output(int* arr, int n) {
for (int i = 0; i < n; i++) {
cout << arr[i];;
}
cout << endl;
}
// thuat toan sinh hoan vi chinh tac
void generatePermutation(int* arr, int n) {
bool isFinalConfig = false;
while (!isFinalConfig) {
output(arr, n);
isFinalConfig = nextPermutation(arr, n);
}
}
int main() {
int* arr;
int n;
cin >> n;
arr = new int[n];
int sum = 1;
for (int i = 0; i < n; i++) {
sum *= (i + 1);
arr[i] = i + 1;
}
cout << sum << endl;
generatePermutation(arr, n);
return 0;
}