package main import . "fmt" import . "slices" func min(a, b int) int { if a < b { return a } return b } func main() { var s, t string Scan(&s, &t) bs := []byte(s) bt := []byte(t) if len(t) > len(s) { Println(0) return } if len(t) == 1 { if Contains(bs, bt[0]) { Println(-1) } else { Println(0) } return } const X = 1e9 dp := make([][]int, len(bs)+1) for i := range dp { dp[i] = make([]int, len(bt)+1) for j := range dp[i] { dp[i][j] = X } } dp[0][0] = 0 for i, sc := range bs { for _, v := range dp[i][1:] { if sc == bt[0] { dp[i][1] = min(dp[i][1], v+1) } else { dp[i][0] = min(dp[i][0], v+1) } } // Println(i,":",dp[i]) cnt := 0 for j, tc := range bt { if sc == tc { dp[i+1][j+1] = min(dp[i+1][j+1], dp[i][j]) cnt++ } else if cnt == 0 { dp[i+1][0] = min(dp[i+1][0], dp[i][j]) } } // Println(i+1,":",dp[i+1]) } ans := Min(dp[len(bs)][:len(bt)]) if ans < X { Println(ans) } else { Println(-1) } }