class Solution {
public:
string LCS(string s1, string s2) {
s1=" "+s1,s2=" "+s2;
vector<pair<int,string>>dpnow(s2.length(),{0,""});
vector<pair<int,string>>dppre(s2.length(),{0,""});
bool fl=true;
for(int i=1;i<s1.length();i++)
{
for(int j=1;j<s2.length();j++)
{
if(fl)
{
if(s1[i]==s2[j])dpnow[j].first=dppre[j-1].first+1,dpnow[j].second=dppre[j-1].second+s1[i];
else dpnow[j]=dppre[j].first>dpnow[j-1].first?dppre[j]:dpnow[j-1];
}
else
{
if(s1[i]==s2[j])dppre[j].first=dpnow[j-1].first+1,dppre[j].second=dpnow[j-1].second+s1[i];
else dppre[j]=dpnow[j].first>dppre[j-1].first?dpnow[j]:dppre[j-1];
}
}
fl=!fl;
}
if(!fl)return dpnow[s2.length()-1].second.length()==0?"-1":dpnow[s2.length()-1].second;
return dppre[s2.length()-1].second.length()==0?"-1":dppre[s2.length()-1].second;
}
};