using System;
public class PermutationsAndCombinations
{
// Swap two characters in an array
static void Swap(char[] arr, int i, int j) {
char tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
// Print array of chars
static void PrintArray(char[] arr, int size) {
for (int i = 0; i < size; i++) {
Console.Write(arr[i] + " ");
}
Console.WriteLine();
}
// Recursive function to generate permutations
static void Permute(char[] arr, int l, int r) {
if (l == r) {
PrintArray(arr, r + 1);
return;
}
for (int i = l; i <= r; i++) {
Swap(arr, l, i);
Permute(arr, l + 1, r);
Swap(arr, l, i); // backtrack
}
}
// Generate all combinations using bitmask
static void GenerateCombinations(char[] arr, int size) {
for (int mask = 1; mask < (1 << size); mask++) {
for (int i = 0; i < size; i++) {
if ((mask & (1 << i)) != 0) {
Console.Write(arr[i] + " ");
}
}
Console.WriteLine();
}
}
public static void Main(string[] args)
{
char[] input = { 'a', 'b', 'c' };
int size = input.Length;
Console.WriteLine("All permutations:");
Permute(input, 0, size - 1);
Console.WriteLine("\nAll combinations:");
GenerateCombinations(input, size);
}
}
/*
run:
All permutations:
a b c
a c b
b a c
b c a
c b a
c a b
All combinations:
a
b
a b
c
a c
b c
a b c
*/