Submission

Status:

PPPPPPPPPP

Subtask/Task Score:

100/100

Score: 100

User: Kittiponn

Problemset: Dvaravati-LCS

Language: cpp

Time: 0.004 second

Submitted On: 2026-03-05 09:54:44

/* #include <bits/stdc++.h>
#define ll long long
#define sp << ' ' <<
#define nl << '\n'
#define cnl cout << '\n'
using namespace std;
const int nx = 1e5+5;
const int INF = 1e9+5;
const int MOD = 1e9+7;
int dp[605][605];


int main(){
    cin.tie(0)->sync_with_stdio(0);
    string a,b;
    cin >> a >> b;
    int sz = a.size();
    for(int i = 1;i <= a.size();i++){
        for(int j = 1;j <= b.size();j++){
            if(a[i-1] == b[j-1])dp[i][j] = dp[i-1][j-1] + 1;
            else dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
            cout << dp[i][j] << ' ';
        }
        cnl;
    }
    cout << dp[sz][sz] nl;
    int i = a.size(),j = b.size();
    string c;
    while(i > 0 && j > 0){cout << i sp j nl;
        if(a[i-1] == b[j-1])c += a[i-1],i--,j--;
        else if(dp[i-1][j] <= dp[i][j-1])j--;
        else i--;
    }
    reverse(c.begin(),c.end());
    cout << c;
}
// 8 5  */

/* #include <bits/stdc++.h>
#define ll long long
#define sp << ' ' <<
#define nl << '\n'
using namespace std;

int dp[605][605];

int main()
{
    cin.tie(0)->sync_with_stdio(0);
    string a, b;
    if (!(cin >> b >> a))
        return 0;

    int sz = a.size();

    for (int i = 1; i <= sz; i++)
    {
        for (int j = 1; j <= sz; j++)
        {
            if (a[i - 1] == b[j - 1])
                dp[i][j] = dp[i - 1][j - 1] + 1;
            else
                dp[i][j] = max(dp[i][j], dp[i][j - 1]);
                dp[i][j] = max(dp[i - 1][j],dp[i][j]);
        }
    }

    string c = "";
    int i = sz, j = sz;
    while (i > 0 && j > 0) {
        if (a[i - 1] == b[j - 1]) {
            c += a[i - 1];
            i--; j--;
        } 
        else if (dp[i-1][j] >= dp[i][j-1]) {
            i--; 
        } else {
            j--;
        }
        if(dp[i][j] == 0)break;
    }
    reverse(c.begin(), c.end());

    cout << c nl;
    cout << dp[sz][sz] nl;

    if (dp[sz][sz] > (sz / 2.0))
    {
        cout << "y" nl;
    }
    else
    {
        cout << "n" nl;
    }

    return 0;
} */

#include <bits/stdc++.h>
using namespace std;

#define f first
#define s second
#define pii pair<ll,ll>
#define puii pair<ull,ull>
#define piii pair<ll,pii>
#define tiiii tuple<ll,ll,ll,ll>
#define ll long long
#define ull unsigned long long
#define mp make_pair
#define mt make_tuple
 
#define mpiiii(a,b,c) make_pair(a,make_pair(b,c));
// ll mod = 1000000007;
    
ll dp[610][610];

void solve(){
    string s1,s2;

    cin >> s2 >> s1;

    dp[0][0] = 0;
    dp[1][0] = 0;
    dp[0][1] = 0;

    for(int i = 1;i <= s1.length();i++){
        for(int j = 1;j <= s2.length();j++){
            dp[i][j] = 0;
            if(s1[i-1] == s2[j-1]){
                dp[i][j] = dp[i-1][j-1] + 1;
            }
            dp[i][j] = max(dp[i][j],dp[i][j-1]);
            dp[i][j] = max(dp[i][j],dp[i-1][j]);
        }
    }

    stack<char>st;
    pii t;
    int i,j;
    i = s1.length();
    j = s2.length();

    while(i > 0 && j > 0){
        if(s1[i-1] == s2[j-1]){            
            st.push(s1[i-1]);
            i--;
            j--;
        }
        else{    
            if(dp[i-1][j] >= dp[i][j-1]) i--;
            else j--;
        }
        if(dp[i][j] == 0) break;
    }

    

    while(!st.empty()){
        cout << st.top();
        st.pop();
    }

    cout << '\n';
    cout << dp[s1.length()][s2.length()];
    cout << '\n';

    if(dp[s1.length()][s2.length()] > s1.length()/2 || dp[s1.length()][s2.length()] > s1.length()/2){
        cout << 'y';
    }
    else{
        cout << 'n';
    }
    
    return;
}
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    ll q;
 
    // cin >> q;

    // while(q--)
        solve(); 

    return 0;
}
/*
oagmmaopsgmorr
ymgaomaaoypnba
*/