class Solution {
public:
int longestStrChain(vector<string>& words) {
int n=words.size(),ans=0;
map<string,int> m;
sort(words.begin(),words.end(),[](auto a,auto b){return a.size()<b.size();});
for(auto s:words){
for(int i=0;i<s.size();i++){
string str=s.substr(0,i) +s.substr(i+1);
m[s]=max(m[s],m[str]+1);
}
ans=max(ans,m[s]);
}
return ans;
}};