#include <stdio.h>
#include <string.h>
#define MAX 1001
int max(int a, int b) {
return (a > b) ? a : b;
}
int main() {
char X[MAX] = "", Y[MAX] = "";
int prev[MAX] = {0}, curr[MAX] = {0};
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (X[i-1] == Y[j-1])
curr[j] = prev[j-1] + 1;
else
curr[j] = max(prev[j], curr[j-1]);
}
for (int j = 0; j <= n; j++)
prev[j] = curr[j];
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNkZWZpbmUgTUFYIDEwMDEKCmludCBtYXgoaW50IGEsIGludCBiKSB7CiAgICByZXR1cm4gKGEgPiBiKSA/IGEgOiBiOwp9CgppbnQgbWFpbigpIHsKICAgIGNoYXIgWFtNQVhdID0gIiIsIFlbTUFYXSA9ICIiOwoKICAgIHNjYW5mKCIlcyIsIFgpOwogICAgc2NhbmYoIiVzIiwgWSk7CgogICAgaW50IG0gPSBzdHJsZW4oWCk7CiAgICBpbnQgbiA9IHN0cmxlbihZKTsKCiAgICBpbnQgcHJldltNQVhdID0gezB9LCBjdXJyW01BWF0gPSB7MH07CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbjsgaisrKSB7CiAgICAgICAgICAgIGlmIChYW2ktMV0gPT0gWVtqLTFdKQogICAgICAgICAgICAgICAgY3VycltqXSA9IHByZXZbai0xXSArIDE7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGN1cnJbal0gPSBtYXgocHJldltqXSwgY3VycltqLTFdKTsKICAgICAgICB9CgogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IG47IGorKykKICAgICAgICAgICAgcHJldltqXSA9IGN1cnJbal07CiAgICB9CgogICAgcHJpbnRmKCIlZFxuIiwgcHJldltuXSk7CiAgICByZXR1cm4gMDsKfQ==