/*
dp[i][j] số thao tác ít nhất để biến dãy số từ 1 đến i t hành từ 1 đến j
dp[i][j]=min(dp[i-1][j]+1(xóa), dp[i-1][j-1]+(1 nếu a[i]!=a[j]) (thay thế), dp[i][j-1]+1(thêm))
*/
#include<bits/stdc++.h>
using namespace std;
const long long MaxN = 5005;
long long dp[MaxN][MaxN];
string n,m;

void input()
{
    cin >> n >> m;
}

void solve()
{
    n=" " + n;
    m=" " + m;
    long long len1 = n.size() - 1;
    long long len2 = m.size() - 1;

    for(long long i=0;i<=len1;i++)
        dp[i][0]=i;

    for(long long j=0;j<=len2;j++)
        dp[0][j]=j;

    for(long long i=1;i<=len1;i++)
    {
        for(long long j=1;j<=len2;j++)
        {
            dp[i][j]=min(dp[i-1][j]+1,dp[i][j-1]+1);
            dp[i][j]=min(dp[i][j],
                         dp[i-1][j-1]+(n[i]!=m[j]));
        }
    }

    cout << dp[len1][len2];
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    input();
    solve();
}
