Problem:
Problem A: Password

太郎君は、自分のパソコンを持っていて、ログイン時のパスワードを設定していた。しかし、不注意にも太郎君はそのパスワードを忘れてしまった。そこで、パスワードをメモした紙があることを思い出し、紙を見つけた太郎君はそれを見て驚いた。なんと紙は切れていて断片しか存在せず、ところどころに汚れがあり、読めなくなっていたのだ。太郎君はそのメモを参考にパスワードを推測することにした。

Problem

二つの文字列A, Bが与えられる。文字列Aの中に文字列Bが含まれているかどうかを判定し、含まれている場合は"Yes"を、そうでなければ"No"を出力せよ。
文字列Aにはアルファベットの大文字のみが含まれており、文字列Bにはアルファベットの大文字に加えて、'_'(半角アンダーバー)が含まれている。半角アンダーバーは任意の１文字を表す。

Input

文字列 A

文字列 B

Constraints

A,Bの文字列の長さはどちらも1文字以上1000文字以下である。

Bの文字列の長さがAの文字列の長さを超えることはない。

Output

"Yes"または"No"を1行で出力せよ。

Sample Input 1

ABCDE
ABC

Sample Output 1

Yes

Sample Input 2

KUSATSU
KSATSU

Sample Output 2

No

Sample Input 3

ABCABC
ACBA_B

Sample Output 3

No

Sample Input 4

RUPCUAPC
__PC

Sample Output 4

Yes

Sample Input 5

AIZU
_A

Sample Output 5

No

Solution in Scala (judge verdict: Accepted)

object Main extends App {

  import scala.io.StdIn._

  val a = readLine.trim.toList
  val b = readLine.trim.toList
  println(
    if (isMatch(a, b)) "Yes" else "No"
  )
  def isMatch(state: List[Char], target: List[Char]): Boolean = {
    def sub(state: List[Char], target: List[Char]): Boolean = {
      target match {
        case Nil ⇒ true
        case '_' :: tt ⇒
          state match {
            case Nil ⇒ false
            case _ :: t ⇒ sub(t, tt)
          }
        case ht::tt ⇒
          state match {
            case Nil ⇒ false
            case h::t if h == ht ⇒ sub(t, tt)
            case _ ⇒ false
          }
      }
    }
    state match {
      case Nil ⇒ false
      case h::t ⇒ sub(state, target) || isMatch(t, target)
    }
  }
  implicit class Extend[T](value: T){
    def also(func: T ⇒ Unit): T = {func(value); value}
    def let[A](func: T ⇒ A): A = func(value)
  }
}