import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String a = sc.nextLine();
            String b = sc.nextLine();
            int[][] dp = new int[a.length()+1][b.length()+1];  //定义动规数组

            for(int i=1; i<=a.length(); i++){  // 初始化
                dp[i][0] = i;
            }
            for(int i=1; i<=b.length(); i++){  // 初始化
                dp[0][i] = i;
            }
            for(int i=1; i<=a.length(); i++){
                for(int j=1; j<=b.length(); j++){
                    //第一种情况,a[i]==b[j],这种情况下,我们不需要进行编辑,dp[i][j]=dp[i-1][j-1] 
                    //第二种情况,a[i]!=b[j],如果两个字符不相等,我们有三种处理方式:
                    //1、替换字符串b,编辑距离为dp[i-1][j-1]+1;
                    //2、插入一个字符与其相等,则编辑距离为dp[i-1][j]+1;
                    //3、删除该字符,编辑距离为dp[i][j-1]+1,三者取其小即可
                    if(a.charAt(i-1)==b.charAt(j-1)){  //第一种情况
                        dp[i][j] = dp[i-1][j-1];
                    }else{  //第二种情况
                        //替换字符的意思就是将 j 指向的字符和 i 指向的字符通过替换的方式配对成功,所以两列分别减去最后一个字符后得到的最优解 + 1 即:dp[i-1][j-1]+1
                        //插入一个字符的意思是将 i指向的字符和新增字符配对成功,所以第一列的数据还有i-1,第二列数据j,最优解 dp[i-1][j] +1
                        //删除一个字符的意思,将 j 指向的字符删除,dp[i][j - 1] + 1
                        dp[i][j] = Math.min(dp[i-1][j]+1, Math.min(dp[i-1][j-1]+1, dp[i][j-1]+1));  //状态转移方程
                    }
                }
            }
            System.out.println(dp[a.length()][b.length()]);
        }
    }
}