// Arup Guha
// 2/14/2017
// Solution to CS 1 Exam 1 Question 8

#include <stdio.h>
#include <string.h>

void printPerms(int perm[], int used[], int k, int n, char* letters);

int main() {

    // Get a word from teh user.
    char word[11];
    printf("Enter a word (1-10 distinct letters.\n");
    scanf("%s", word);

    // Set up arrays for permutation algorithm.
    int perm[10], used[10];
    int i;
    for (i=0; i<strlen(word); i++)
        used[i] = 0;

    // Run it.
    printPerms(perm, used, 0, strlen(word), word);
    return 0;
}

void printPerms(int perm[], int used[], int k, int n, char* letters) {

    int i;

    // Filled in a permutation, print it!
    if (k == n) {

        // The perm array tells me which letters to print, so use it to index letters.
        for (i=0; i<n; i++)
            printf("%c", letters[perm[i]]);
        printf("\n");
    }

    else {

        // Usual recursion for permutation algorithm.
        for (i=0; i<n; i++) {
            if (!used[i]) {
                used[i] = 1;
                perm[k] = i;
                printPerms(perm, used, k+1, n, letters);
                used[i] = 0;
            }
        }
    }
}
