#include <bits/stdc++.h>
using namespace std;
#define REP(i, n) for (int i = 0, _n = (n); i < _n; ++i)
#define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; ++i)
#define FORD(i, b, a) for (int i = (b), _a = (a); i >= _a; --i)
#define file(name) if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
template <class A, class B> bool minimize(A &a, B b) { if (a > b) { a = b; return true; } return false; }
// end of template
const double PI = 3.1415926535897932384626433832795; // acos(-1.0); atan(-1.0);
const int dir[] = {1, 0, -1, 0, 1, 1, -1, -1, 1}; // {2, 1, -2, -1, -2, 1, 2, -1, 2};
const int MAX_S = 1e4 + 4;
const int MAX_T = 1e3 + 3;
string S, T;
int kmp[MAX_T], nxt[MAX_T][256], szT, szS;
void init(void) {
cin >> S >> T;
szS = S.size(); szT = T.size();
S = ' ' + S + ' '; T = ' ' + T + ' ';
REP(j, 26) nxt[0][j] = 0;
kmp[0] = 0; nxt[0][T[1] - 'a'] = 1;
FOR(i, 1, szT) {
kmp[i] = i == 1 ? 0 : nxt[kmp[i - 1]][T[i] - 'a'];
REP(j, 26) nxt[i][j] = j == T[i + 1] - 'a' ? i + 1 : nxt[kmp[i]][j];
}
}
int dp[MAX_S][MAX_T];
void process(void) {
memset(dp, 0x3f, sizeof(dp));
dp[0][0] = 0;
REP(i, szS) REP(j, szT) {
minimize(dp[i + 1][nxt[j][S[i + 1] - 'a']], dp[i][j]);
minimize(dp[i + 1][j], dp[i][j] + 1);
}
int res = szS;
REP(j, szT) minimize(res, dp[szS][j]);
cout << res << '\n';
}
int main(void) {
ios_base::sync_with_stdio(false); cin.tie(nullptr); // cout.tie(nullptr);
file("pstring");
REP(love, 3) {
init();
process();
}
return (0^0);
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSAgICAgICAgICAgUkVQKGksIG4pICBmb3IgKGludCBpID0gMCwgX24gPSAobik7IGkgPCBfbjsgKytpKQojZGVmaW5lICAgICAgICBGT1IoaSwgYSwgYikgIGZvciAoaW50IGkgPSAoYSksIF9iID0gKGIpOyBpIDw9IF9iOyArK2kpIAojZGVmaW5lICAgICAgIEZPUkQoaSwgYiwgYSkgIGZvciAoaW50IGkgPSAoYiksIF9hID0gKGEpOyBpID49IF9hOyAtLWkpIAojZGVmaW5lICAgICAgICAgIGZpbGUobmFtZSkgIGlmIChmb3BlbihuYW1lIi5pbnAiLCAiciIpKSB7IGZyZW9wZW4obmFtZSIuaW5wIiwgInIiLCBzdGRpbik7IGZyZW9wZW4obmFtZSIub3V0IiwgInciLCBzdGRvdXQpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQSwgY2xhc3MgQj4gYm9vbCBtaW5pbWl6ZShBICZhLCBCIGIpICB7IGlmIChhID4gYikgeyBhID0gYjsgcmV0dXJuIHRydWU7IH0gcmV0dXJuIGZhbHNlOyB9CgovLyBlbmQgb2YgdGVtcGxhdGUKCmNvbnN0IGRvdWJsZSBQSSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTsgLy8gYWNvcygtMS4wKTsgYXRhbigtMS4wKTsKY29uc3QgaW50IGRpcltdID0gezEsIDAsIC0xLCAwLCAxLCAxLCAtMSwgLTEsIDF9OyAvLyB7MiwgMSwgLTIsIC0xLCAtMiwgMSwgMiwgLTEsIDJ9Owpjb25zdCBpbnQgTUFYX1MgPSAxZTQgKyA0Owpjb25zdCBpbnQgTUFYX1QgPSAxZTMgKyAzOwoKc3RyaW5nIFMsIFQ7CmludCBrbXBbTUFYX1RdLCBueHRbTUFYX1RdWzI1Nl0sIHN6VCwgc3pTOwoKdm9pZCBpbml0KHZvaWQpIHsKCWNpbiA+PiBTID4+IFQ7CglzelMgPSBTLnNpemUoKTsgc3pUID0gVC5zaXplKCk7CglTID0gJyAnICsgUyArICcgJzsgVCA9ICcgJyArIFQgKyAnICc7CglSRVAoaiwgMjYpIG54dFswXVtqXSA9IDA7CglrbXBbMF0gPSAwOyBueHRbMF1bVFsxXSAtICdhJ10gPSAxOwoJRk9SKGksIDEsIHN6VCkgewoJCWttcFtpXSA9IGkgPT0gMSA/IDAgOiBueHRba21wW2kgLSAxXV1bVFtpXSAtICdhJ107CgkJUkVQKGosIDI2KSBueHRbaV1bal0gPSBqID09IFRbaSArIDFdIC0gJ2EnID8gaSArIDEgOiBueHRba21wW2ldXVtqXTsKCX0KfQoKaW50IGRwW01BWF9TXVtNQVhfVF07Cgp2b2lkIHByb2Nlc3Modm9pZCkgewoJbWVtc2V0KGRwLCAweDNmLCBzaXplb2YoZHApKTsKCWRwWzBdWzBdID0gMDsKCVJFUChpLCBzelMpIFJFUChqLCBzelQpIHsKCQltaW5pbWl6ZShkcFtpICsgMV1bbnh0W2pdW1NbaSArIDFdIC0gJ2EnXV0sIGRwW2ldW2pdKTsKCQltaW5pbWl6ZShkcFtpICsgMV1bal0sIGRwW2ldW2pdICsgMSk7Cgl9CglpbnQgcmVzID0gc3pTOwoJUkVQKGosIHN6VCkgbWluaW1pemUocmVzLCBkcFtzelNdW2pdKTsKCWNvdXQgPDwgcmVzIDw8ICdcbic7Cn0KCmludCBtYWluKHZvaWQpIHsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBjaW4udGllKG51bGxwdHIpOyAvLyBjb3V0LnRpZShudWxscHRyKTsKCWZpbGUoInBzdHJpbmciKTsKCVJFUChsb3ZlLCAzKSB7CgkJaW5pdCgpOwoJCXByb2Nlc3MoKTsKCX0KCXJldHVybiAoMF4wKTsKfQ==