#include <algorithm>
#include <cstdio>
#include <vector>
constexpr int MAX_N = 1001;
constexpr int MAX_M = 1001;
// 斜向箭头:匹配成功时,操作总数不变;匹配失败时,操作总数加一。
// 横向箭头、竖向箭头:操作总数加一。
int main()
{
char s_a[MAX_N] = { 0 };
char s_b[MAX_M] = { 0 };
int N, M;
scanf("%d", &N);
scanf("%s", s_a);
scanf("%d", &M);
scanf("%s", s_b);
std::vector<std::vector<int>> num_op(N + 1, std::vector<int>(M + 1));
for(int i = 0; i <= N; ++i){
num_op[i][0] = i;
}
for(int j = 0; j <= M; ++j){
num_op[0][j] = j;
}
for (int i = 0; i < N; ++i) {
for (int j = 0; j < M; ++j) {
num_op[i + 1][j + 1] = std::min(num_op[i + 1][j] + 1,
num_op[i][j + 1] + 1);
num_op[i + 1][j + 1] = std::min(num_op[i + 1][j + 1],
num_op[i][j] + (s_a[i] != s_b[j]));
}
}
printf("%d\n", num_op[N][M]);
return 0;
}