public List<List<String>> partition(String s) {
        if(s == null) return null;
        List<List<String>> res = new ArrayList<List<String>>();
        if(s.length() == 1) {
            List<String> oneMethod = new ArrayList<String>();
            oneMethod.add(s);
            res.add(oneMethod);
            return res;
        }
        for(int i = 1;i <= s.length();i++)
        {
            String str = s.substring(0,i);
            if(isPalindrome(str)) {
                List<List<String>> mm = null;
                if((mm = partition(s.substring(i))).size() > 0)
                    for(List<String> tt : mm)
                    {
                        tt.add(0,str);
                        res.add(tt);
                    }
                else  {
                    List<String> ll = new ArrayList<String>();
                    ll.add(str);
                    res.add(ll);
                }
            }
        };
        return res;
    }