class Solution {
private:
vector<vector<string>>ans;
public:
bool isOk(string s)
{
string t = s;
reverse(s.begin(),s.end());
return t == s;
}
vector<vector<string>> partition(string s) {
dfs(0,s,vector<string>(0));
return ans;
}
void dfs(int start,string s,vector<string>v)
{
if(start == s.size())
{
ans.push_back(v);
return;
}
for(int i = start;i<s.size();i++)
{
if(isOk(s.substr(start,i-start+1)))
{
v.push_back(s.substr(start,i-start+1));
dfs(i+1,s,v);
v.pop_back();
}
}
}
};