let scan1 f = stdin.ReadLine() |> f

let S = scan1 seq |> Seq.toList
let T = scan1 seq |> Seq.toList

(*

全文字使っていても任意の置換は2つの置換の合成で表現できる

したがって、SとTの構造が等しいか？をちぇっくすればよい。

構造が等しいとは、
　・長さが等しく
　・同じような出現

なので文字列を出現を表すようにコード化する関数を定義すればよい
*)

let fn xs =
  let rec encode xs ys dic cnt =
    match xs with
    | [] -> ys
    | x::xs -> 
        match Map.tryFind x dic with
        | Some i -> encode xs (ys@[i]) dic cnt
        | None -> encode xs (ys@[cnt]) (Map.add x cnt dic) (cnt+1)
  encode xs [] Map.empty 0  
  
if (fn S) = (fn T) then "Yes" else "No" 
|> printfn "%s"
