#include <stdio.h>
#include <string.h>
#define MAX_N 1000
#define MAX_M 1000
char s[MAX_N], t[MAX_M];
int dp[MAX_N+1][MAX_M+1]={0,};

int max(int left, int right){
    if(left>right)
        return left;
    else
        return right;
}

int main(int argc, char *argv[]){
    int n,m;
    strcpy(s+1,"abcd");
    strcpy(t+1,"becd");
    
    n=strlen(s+1);
    m=strlen(t+1);
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(s[i+1]==t[j+1]){
                dp[i+1][j+1]=dp[i][j]+1;
            }else{
                dp[i+1][j+1]=max(dp[i][j+1],dp[i+1][j]); 
            }
        }
    }
    printf("%d\n",dp[n][m]);
    
    printf("\nDP 테이블\n");
    for(int i=0;i<n+1;i++){
        for(int j=0;j<m+1;j++){
            printf("%d ",dp[i][j]);
        }
        printf("\n");
    }
    return 0;
}