package main

func isScramble(s1 string, s2 string) bool {
	if s1 == s2 {
		return true
	}
	cnt := make([]int, 26)
	for i := range s1 {
		cnt[s1[i]-'a']++
	}
	for i := range s2 {
		cnt[s2[i]-'a']--
	}
	for i := range cnt {
		if cnt[i] != 0 {
			return false
		}
	}
	n := len(s1)
	for i := 1; i < n; i++ { // Can be spilt at any position!!!
		if isScramble(s1[:i], s2[:i]) && isScramble(s1[i:], s2[i:]) {
			return true
		}
		// Swap sub tree
		if isScramble(s1[:i], s2[n-i:]) && isScramble(s1[i:], s2[:n-i]) {
			return true
		}
	}
	return false
}

// func main() {
// 	println(isScramble("great", "rgeat"))
// 	println(isScramble("abcde", "caebd"))
// }