#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串vector
     */
    set<string> s_s;

    // 判断回文字符串
    bool check(string str)
    {
        int left = 0;
        int right = str.size()-1;
        
        while(left<right)
        {
            if(str[left++]!=str[right--])
                return false;
        }

        return true;
    }

    vector<string> ans;
    void dfs(string s,int start)
    {
        if(start>=s.size())
            return;
        
        for(int i=start; i<s.size(); ++i)
        {
            string str = s.substr(start,i-start+1);

            if(check(str) && str.size()>1 && s_s.count(str)==0)
            {
                ans.emplace_back(str);
                s_s.emplace(str);
                dfs(s,start+1);
            }
        }
    }

    vector<string> partitionII(string s) {
        // write code here
        dfs(s,0);
        return ans;
    }
};