#include <iostream>
#include <vector>
#include <string>
using namespace std;
/*
双序列问题,将其看成回文串问题的变形,但没有单序列不用长度会无法状态转移的情况
dp[i][j]表示串1的前i位与串2的前j位的编辑距离
当s1[i] == s2[j]时,不用编辑,继承dp[i-1][j-1]的结果就行
当s1[i] != s2[j]时,编辑分为三种情况:
1.s1的i位比s2的j位多一位, dp[i][j] = dp[i-1][j] + 1
2.反之 dp[i][j] = dp[i][j-1] + 1
3.正对着 第i位与第j位不同 两者替换一个就行 dp[i][j] = dp[i-1][j-1] + 1
故取这三方中的最小值即可
*/
int main() {
    string s1,s2;
    while(cin >> s1 >> s2){
        int m = s1.size();
        int n = s2.size();

        vector<vector<int> > dp(m+1,vector<int>(n+1,0));
        for(int i = 1; i <= m; i++) dp[i][0] = i;//串1有字符串二无,编辑距离为串一长度
        for(int j = 1; j <= n; j++) dp[0][j] = j;//与上面相反
        for(int i = 1; i <= m; i++){
            for(int j = 1; j <= n ; j++){
                if(s1[i-1] != s2[j-1]) //因为dp的下标从1开始,而字符串从0开始
                    dp[i][j] = min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
                else dp[i][j] = dp[i-1][j-1];
            }
        }
        cout << dp[m][n] << endl;
    }
}
// 64 位输出请用 printf("%lld")