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`.

Examples

Input

azzel
apple


Output

Yes


Input

chokudai
redcoder


Output

No


Input

abcdefghijklmnopqrstuvwxyz
ibyhqfrekavclxjstdwgpzmonu


Output

Yes
import java.util.Scanner;
import java.util.HashMap;

public class Main {
    public static void main(String args[]) throws Exception {
        Scanner scanner = new Scanner(System.in);
        String S = scanner.nextLine();
        String T = scanner.nextLine();
        int n = S.length();
        if(T.length() != n) {
            System.out.println(n + ", " + T.length());
            System.out.println("No");
            System.exit(0);
        }
        int[] s = new int[n];
        int[] t = new int[n];
        HashMap<Character,Integer> hm
            = new HashMap<Character,Integer>();
        for(int i = 0; i < n; ++i) {
            char c = S.charAt(i);
            if(!hm.containsKey(c)) {
                hm.put(c, hm.size());
            }
            s[i] = hm.get(c);
        }
        hm.clear();
        for(int i = 0; i < n; ++i) {
            char c = T.charAt(i);
            if(!hm.containsKey(c)) {
                hm.put(c, hm.size());
            }
            t[i] = hm.get(c);
        }
        for(int i = 0; i < n; ++i) {
            if(s[i]!=t[i]) {
                System.out.println("No");
                System.exit(0);
            }
        }
        System.out.println("Yes");
    }
}
