Problem:
Score : 300 points

Problem Statement

You are given strings S and T consisting of lowercase English letters.

You can perform the following operation on S any number of times:

Operation: Choose two distinct lowercase English letters c_1 and c_2, then replace every occurrence of c_1 with c_2, and every occurrence of c_2 with c_1.

Determine if S and T can be made equal by performing the operation zero or more times.

Constraints

1 \leq |S| \leq 2 \times 10^5

|S| = |T|

S and T consists of lowercase English letters.

Input

Input is given from Standard Input in the following format:

S
T

Output

If S and T can be made equal, print Yes; otherwise, print No.

Sample Input 1

azzel
apple

Sample Output 1

Yes

azzel can be changed to apple, as follows:

Choose e as c_1 and l as c_2. azzel becomes azzle.

Choose z as c_1 and p as c_2. azzle becomes apple.

Sample Input 2

chokudai
redcoder

Sample Output 2

No

No sequences of operation can change chokudai to redcoder.

Sample Input 3

abcdefghijklmnopqrstuvwxyz
ibyhqfrekavclxjstdwgpzmonu

Sample Output 3

Yes

Solution in Common Lisp (SBCL 1.1.14) (judge verdict: Accepted)

(defun solve (s1 s2)
  (let ((h1 (make-hash-table))
        (h2 (make-hash-table))
        (len (length s1)))
    (dotimes (i len)
      (let ((c1 (char s1 i))
            (c2 (char s2 i)))
        (when (or (and (gethash c1 h1) (not (eq c2 (gethash c1 h1))))
                  (and (gethash c2 h2) (not (eq c1 (gethash c2 h2)))))
          (return-from solve "No"))
        (setf (gethash c1 h1) c2)
        (setf (gethash c2 h2) c1)))
    "Yes"))
(format t "~A~%" (solve (read-line) (read-line)))