#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template < class S, class T> inline S chmax( S & a, T b) {
if ( a< b) {
a= b;
}
return a;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
int solve( string s, set< string> & st, int need = - 1 ) {
int i;
int res = - 1073709056 ;
if ( st.count ( s) == 0 ) {
res = 1 ;
}
chmax( need, res) ;
if ( s.size ( ) < need) {
return res;
}
for ( i= ( 1 ) ; i< ( s.size ( ) ) ; i++ ) {
string x = s.substr ( 0 , i) ;
string y = s.substr ( i) ;
if ( st.count ( x) ) {
continue ;
}
st.insert ( x) ;
chmax( res, solve( y, st, need- 1 ) + 1 ) ;
chmax( need, res) ;
st.erase ( x) ;
}
return res;
}
class Solution{
public :
int maxUniqueSplit( string s) {
set< string> st;
return solve( s, st) ;
}
}
;
// cLay varsion 20200920-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// int solve(string s, set<string> &st, int need = -1){
// int res = -int_inf;
// if(st.count(s) == 0) res = 1;
// need >?= res;
// if(s.size() < need) return res;
//
// rep(i,1,s.size()){
// string x = s.substr(0, i);
// string y = s.substr(i);
// if(st.count(x)) continue;
// st.insert(x);
// res >?= solve(y, st, need-1) + 1;
// need >?= res;
// st.erase(x);
// }
// return res;
// }
//
// class Solution {
// public:
// int maxUniqueSplit(string s) {
// set<string> st;
// return solve(s, st);
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPGNsYXNzIFMsIGNsYXNzIFQ+IGlubGluZSBTIGNobWF4KFMgJmEsIFQgYil7CiAgaWYoYTxiKXsKICAgIGE9YjsKICB9CiAgcmV0dXJuIGE7Cn0KI2RlZmluZSBtYWluIGR1bW15X21haW4KaW50IG1haW4oKXsKICByZXR1cm4gMDsKfQojdW5kZWYgbWFpbgppbnQgc29sdmUoc3RyaW5nIHMsIHNldDxzdHJpbmc+ICZzdCwgaW50IG5lZWQgPSAtMSl7CiAgaW50IGk7CiAgaW50IHJlcyA9IC0xMDczNzA5MDU2OwogIGlmKHN0LmNvdW50KHMpID09IDApewogICAgcmVzID0gMTsKICB9CiAgY2htYXgobmVlZCwgcmVzKTsKICBpZihzLnNpemUoKSA8IG5lZWQpewogICAgcmV0dXJuIHJlczsKICB9CiAgZm9yKGk9KDEpO2k8KHMuc2l6ZSgpKTtpKyspewogICAgc3RyaW5nIHggPSBzLnN1YnN0cigwLCBpKTsKICAgIHN0cmluZyB5ID0gcy5zdWJzdHIoaSk7CiAgICBpZihzdC5jb3VudCh4KSl7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgc3QuaW5zZXJ0KHgpOwogICAgY2htYXgocmVzLCBzb2x2ZSh5LCBzdCwgbmVlZC0xKSArIDEpOwogICAgY2htYXgobmVlZCwgcmVzKTsKICAgIHN0LmVyYXNlKHgpOwogIH0KICByZXR1cm4gcmVzOwp9CmNsYXNzIFNvbHV0aW9uewogIHB1YmxpYzoKICBpbnQgbWF4VW5pcXVlU3BsaXQoc3RyaW5nIHMpewogICAgc2V0PHN0cmluZz4gc3Q7CiAgICByZXR1cm4gc29sdmUocywgc3QpOwogIH0KfQo7Ci8vIGNMYXkgdmFyc2lvbiAyMDIwMDkyMC0xCgovLyAtLS0gb3JpZ2luYWwgY29kZSAtLS0KLy8gI2RlZmluZSBtYWluIGR1bW15X21haW4KLy8ge30KLy8gI3VuZGVmIG1haW4KLy8gCi8vIGludCBzb2x2ZShzdHJpbmcgcywgc2V0PHN0cmluZz4gJnN0LCBpbnQgbmVlZCA9IC0xKXsKLy8gICBpbnQgcmVzID0gLWludF9pbmY7Ci8vICAgaWYoc3QuY291bnQocykgPT0gMCkgcmVzID0gMTsKLy8gICBuZWVkID4/PSByZXM7Ci8vICAgaWYocy5zaXplKCkgPCBuZWVkKSByZXR1cm4gcmVzOwovLyAKLy8gICByZXAoaSwxLHMuc2l6ZSgpKXsKLy8gICAgIHN0cmluZyB4ID0gcy5zdWJzdHIoMCwgaSk7Ci8vICAgICBzdHJpbmcgeSA9IHMuc3Vic3RyKGkpOwovLyAgICAgaWYoc3QuY291bnQoeCkpIGNvbnRpbnVlOwovLyAgICAgc3QuaW5zZXJ0KHgpOwovLyAgICAgcmVzID4/PSBzb2x2ZSh5LCBzdCwgbmVlZC0xKSArIDE7Ci8vICAgICBuZWVkID4/PSByZXM7Ci8vICAgICBzdC5lcmFzZSh4KTsKLy8gICB9Ci8vICAgcmV0dXJuIHJlczsKLy8gfQovLyAKLy8gY2xhc3MgU29sdXRpb24gewovLyBwdWJsaWM6Ci8vICAgaW50IG1heFVuaXF1ZVNwbGl0KHN0cmluZyBzKSB7Ci8vICAgICBzZXQ8c3RyaW5nPiBzdDsKLy8gICAgIHJldHVybiBzb2x2ZShzLCBzdCk7Ci8vICAgfQovLyB9Owo=