package main
import (
"fmt"
)
func swap(arr []rune, i, j int) {
arr[i], arr[j] = arr[j], arr[i]
}
func generatePermutation(arr []rune, l, r int) {
if l == r {
fmt.Println(string(arr))
} else {
for i := l; i <= r; i++ {
swap(arr, l, i)
generatePermutation(arr, l + 1, r)
swap(arr, l, i) // backtrack
}
}
}
func main() {
s := "ABC"
runes := []rune(s)
generatePermutation(runes, 0, len(runes)-1)
}
/*
run:
0100100000101000
First set bit at index: 3
All the set bits indexes:
3 5 11 14
*/