string lastSubstring(string s) {
map<char,vector<int> > mp;
for (int i=0;i<s.size();i++)
{
mp[s[i]].push_back(i);
}
vector<int> temp=mp.rbegin()->second;
vector<int> last_indices;
last_indices.push_back(temp[0]);
for (int i=1;i<temp.size();i++)
{
if (temp[i]!=temp[i-1]+1)
last_indices.push_back(temp[i]);
}
if (last_indices.size()==1)
{
return s.substr(last_indices[0],s.size()-last_indices[0]);
}
map<string,int> mp2;
int n=last_indices.size();
mp2[s.substr(last_indices[n-1],s.size()-(last_indices[n-1]))]=last_indices[n-1];
for (int i=last_indices.size()-2;i>=0;i--)
{
mp2[s.substr(last_indices[i],last_indices[i+1]-last_indices[i]+1)]=last_indices[i];
}
return s.substr(mp2.rbegin()->second,s.size()-mp2.rbegin()->second);
}
c3RyaW5nIGxhc3RTdWJzdHJpbmcoc3RyaW5nIHMpIHsKICAgICAgICBtYXA8Y2hhcix2ZWN0b3I8aW50PiA+IG1wOwogICAgICAgIGZvciAoaW50IGk9MDtpPHMuc2l6ZSgpO2krKykKICAgICAgICB7CiAgICAgICAgICAgIG1wW3NbaV1dLnB1c2hfYmFjayhpKTsKICAgICAgICB9CiAgICAgICAgdmVjdG9yPGludD4gdGVtcD1tcC5yYmVnaW4oKS0+c2Vjb25kOwogICAgICAgIHZlY3RvcjxpbnQ+IGxhc3RfaW5kaWNlczsKICAgICAgICBsYXN0X2luZGljZXMucHVzaF9iYWNrKHRlbXBbMF0pOwogICAgICAgIGZvciAoaW50IGk9MTtpPHRlbXAuc2l6ZSgpO2krKykKICAgICAgICB7CiAgICAgICAgICAgIGlmICh0ZW1wW2ldIT10ZW1wW2ktMV0rMSkKICAgICAgICAgICAgICAgIGxhc3RfaW5kaWNlcy5wdXNoX2JhY2sodGVtcFtpXSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChsYXN0X2luZGljZXMuc2l6ZSgpPT0xKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIHMuc3Vic3RyKGxhc3RfaW5kaWNlc1swXSxzLnNpemUoKS1sYXN0X2luZGljZXNbMF0pOwogICAgICAgIH0KICAgICAgICBtYXA8c3RyaW5nLGludD4gbXAyOwogICAgICAgIGludCBuPWxhc3RfaW5kaWNlcy5zaXplKCk7CiAgICAgICAgbXAyW3Muc3Vic3RyKGxhc3RfaW5kaWNlc1tuLTFdLHMuc2l6ZSgpLShsYXN0X2luZGljZXNbbi0xXSkpXT1sYXN0X2luZGljZXNbbi0xXTsKICAgICAgICBmb3IgKGludCBpPWxhc3RfaW5kaWNlcy5zaXplKCktMjtpPj0wO2ktLSkKICAgICAgICB7CiAgICAgICAgICAgIG1wMltzLnN1YnN0cihsYXN0X2luZGljZXNbaV0sbGFzdF9pbmRpY2VzW2krMV0tbGFzdF9pbmRpY2VzW2ldKzEpXT1sYXN0X2luZGljZXNbaV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBzLnN1YnN0cihtcDIucmJlZ2luKCktPnNlY29uZCxzLnNpemUoKS1tcDIucmJlZ2luKCktPnNlY29uZCk7CiAgICB9