class Solution:
    def partition(self, s: str) -> List[List[str]]:
        result = []

        def dfs(index, path):
            if index == len(s):
                result.append(path)
                return

            for i in range(index, len(s)):
                sub = s[index:i + 1]
                if sub == sub[::-1]:
                    dfs(i + 1, path + [sub])
        dfs(0, [])

        return result