/PERMS - Liệt kê chuỗi hoán vị

<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;
        }