#include #define MOD 1000000007 #define ll long long using namespace std; #define C 11000 #define D 2000 ll cl, dl; char c[C] = {}; char d[D] = {}; char cc[C] = {}; char dd[D] = {}; ll best[C][D] = {}; ll calc_best(ll ci, ll di) { if(ci == cl) { best[ci][di] = dl-di; return dl-di; } if(di == dl) { best[ci][di] = cl-ci; return cl-ci; } if(best[ci][di] > -1) return best[ci][di]; if(c[ci] == d[di] || c[ci] == '?' || d[di] == '?') { best[ci][di] = calc_best(ci+1, di+1); return best[ci][di]; } ll del_both = 2+calc_best(ci+1, di+1); ll del_left = 1+calc_best(ci+1, di); ll del_right = 1+calc_best(ci, di+1); best[ci][di] = min(min(del_both, del_left), del_right); return best[ci][di]; } int main(){ for(ll i = 0; i < C; i++) { for(ll j = 0; j < D; j++) { best[i][j] = -1; } } scanf("%s", cc); scanf("%s", dd); ll ccl = strlen(cc); ll ddl = strlen(dd); ll e = 0; for(ll i = 0, ii = 0; i < ccl; i++) { ll n = cc[i] - '0'; if(n >= 0 && n < 10) { e++; for(ll j = 0; j < n; j++) { c[i+ii] = '?'; ii++; } ii--; continue; } c[i+ii] = cc[i]; } for(ll i = 0, ii = 0; i < ddl; i++) { ll n = dd[i] - '0'; if(n >= 0 && n < 10) { e++; for(ll j = 0; j < n; j++) { d[i+ii] = '?'; ii++; } ii--; continue; } d[i+ii] = dd[i]; } //printf("%s\n", c); //printf("%s\n", d); cl = strlen(c); dl = strlen(d); for(ll sm = cl+dl; sm >= 0; sm--) { for(ll di = min(dl, sm); di >= 0; di--) { ll ci = sm-di; if(ci > cl) break; calc_best(ci, di); } } printf("%lli\n", e+calc_best(0,0)); }