Problem:
Score : 100 points

Problem Statement

You are given strings s and t.
Find one longest string that is a subsequence of both s and t.

Notes

A subsequence of a string x is the string obtained by removing zero or more characters from x and concatenating the remaining characters without changing the order.

Constraints

s and t are strings consisting of lowercase English letters.

1 \leq |s|, |t| \leq 3000

Input

Input is given from Standard Input in the following format:

s
t

Output

Print one longest string that is a subsequence of both s and t.
If there are multiple such strings, any of them will be accepted.

Sample Input 1

axyb
abyxb

Sample Output 1

axb

The answer is axb or ayb; either will be accepted.

Sample Input 2

aa
xayaz

Sample Output 2

aa

Sample Input 3

a
z

Sample Output 3

The answer is (an empty string).

Sample Input 4

abracadabra
avadakedavra

Sample Output 4

aaadara

Solution in C++ (GCC 9.2.1) (judge verdict: Wrong Answer)

#include <iostream>
#include <string>
#include <vector>
#include <climits>
using namespace std;
vector<vector<pair<int, string>>> dp(3001,vector<pair<int,string>>(3001,{-1,""}));
string x,y; 
// Find a longest Subsequence b/w 2 strings using memoization
pair<int, string> LCSstring(int n,int m){
    if(n==0 || m==0){
        
        return make_pair(0, "");
    }
    if(dp[n][m].first != -1){
        return dp[n][m];
    }
    cout<<n<<" "<<m<<endl;
    if(x[n-1] == y[m-1]){
        auto p = LCSstring( n-1, m-1);
        p.first +=1;
        p.second += x[n-1];
        dp[n][m] = p;
        return dp[n][m];
    }
    else{
        auto p1 = LCSstring( n-1, m);
        auto p2 = LCSstring(n, m-1);
 
        if(p1.first >= p2.first){
            dp[n][m] = p1;
            return dp[n][m];
        }
        else{
            dp[n][m] = p2;
            return dp[n][m];
        }
    }
    return dp[n-1][m-1];
}
 
 
int main() {
    string x, y;
    cin >> x >> y;
    int a=x.size();
    int b=y.size(); 
    auto p = LCSstring(a, b);
    cout << p.second<< endl;
    
    return 0;
}