# -*- coding: utf-8 -*-



S = eval(input())

T = eval(input())



# 1対1の変換表(dict)

start = {}

goal = {}



for i in range(len(S)):

    s = S[i]

    t = T[i]

    # 変換表の該当箇所がまだ空いてるかどうか

    if s in start or t in goal:

        # 埋まっている場合、今回の組み合わせと一致しているかどうか

        if start.get(s) != t or goal.get(t) != s:

            print('No')

            exit()

    # 空いていれば変換表を埋める

    else:

        start[s] = t

        goal[t] = s



print('Yes')
# -*- coding: utf-8 -*-



import sys

from collections import Counter



def input(): return sys.stdin.readline().strip()

def list2d(a, b, c): return [[c] * b for i in range(a)]

def list3d(a, b, c, d): return [[[d] * c for j in range(b)] for i in range(a)]

def list4d(a, b, c, d, e): return [[[[e] * d for j in range(c)] for j in range(b)] for i in range(a)]

def ceil(x, y=1): return int(-(-x // y))

def INT(): return int(eval(input()))

def MAP(): return list(map(int, input().split()))

def LIST(N=None): return list(MAP()) if N is None else [INT() for i in range(N)]

def Yes(): print('Yes')

def No(): print('No')

def YES(): print('YES')

def NO(): print('NO')

sys.setrecursionlimit(10 ** 9)

INF = 10 ** 18

MOD = 10 ** 9 + 7



S = eval(input())

T = eval(input())



C1 = sorted(Counter(S).values())

C2 = sorted(Counter(T).values())



N = len(C1)

if len(C2) != N:

    No()

    exit()

for i in range(N):

    if C1[i] != C2[i]:

        No()

        exit()

Yes()

# -*- coding: utf-8 -*-
S = eval(input())
T = eval(input())
# 1対1の変換表(dict)
start = {}
goal = {}
for i in range(len(S)):
    s = S[i]
    t = T[i]
    # 変換表の該当箇所がまだ空いてるかどうか
    if s in start or t in goal:
        # 埋まっている場合、今回の組み合わせと一致しているかどうか
        if start.get(s) != t or goal.get(t) != s:
            print("No")
            exit()
    # 空いていれば変換表を埋める
    else:
        start[s] = t
        goal[t] = s
print("Yes")

# -*- coding: utf-8 -*-
import sys
from collections import Counter


def input():
    return sys.stdin.readline().strip()


def list2d(a, b, c):
    return [[c] * b for i in range(a)]


def list3d(a, b, c, d):
    return [[[d] * c for j in range(b)] for i in range(a)]


def list4d(a, b, c, d, e):
    return [[[[e] * d for j in range(c)] for j in range(b)] for i in range(a)]


def ceil(x, y=1):
    return int(-(-x // y))


def INT():
    return int(eval(input()))


def MAP():
    return list(map(int, input().split()))


def LIST(N=None):
    return list(MAP()) if N is None else [INT() for i in range(N)]


def Yes():
    print("Yes")


def No():
    print("No")


def YES():
    print("YES")


def NO():
    print("NO")


sys.setrecursionlimit(10**9)
INF = 10**18
MOD = 10**9 + 7
S = eval(input())
T = eval(input())
C1 = sorted(Counter(S).values())
C2 = sorted(Counter(T).values())
N = len(C1)
if len(C2) != N:
    No()
    exit()
for i in range(N):
    if C1[i] != C2[i]:
        No()
        exit()
Yes()

+import sys +from collections import Counter + + +def input(): +    return sys.stdin.readline().strip() + + +def list2d(a, b, c): +    return [[c] * b for i in range(a)] + + +def list3d(a, b, c, d): +    return [[[d] * c for j in range(b)] for i in range(a)] + + +def list4d(a, b, c, d, e): +    return [[[[e] * d for j in range(c)] for j in range(b)] for i in range(a)] + + +def ceil(x, y=1): +    return int(-(-x // y)) + + +def INT(): +    return int(eval(input())) + + +def MAP(): +    return list(map(int, input().split())) + + +def LIST(N=None): +    return list(MAP()) if N is None else [INT() for i in range(N)] + + +def Yes(): +    print("Yes") + + +def No(): +    print("No") + + +def YES(): +    print("YES") + + +def NO(): +    print("NO") + + +sys.setrecursionlimit(10**9) +INF = 10**18 +MOD = 10**9 + 7 -# 1対1の変換表(dict) -start = {} -goal = {} -for i in range(len(S)): -    s = S[i] -    t = T[i] -    # 変換表の該当箇所がまだ空いてるかどうか -    if s in start or t in goal: -        # 埋まっている場合、今回の組み合わせと一致しているかどうか -        if start.get(s) != t or goal.get(t) != s: -            print("No") -            exit() -    # 空いていれば変換表を埋める -    else: -        start[s] = t -        goal[t] = s -print("Yes") +C1 = sorted(Counter(S).values()) +C2 = sorted(Counter(T).values()) +N = len(C1) +if len(C2) != N: +    No() +    exit() +for i in range(N): +    if C1[i] != C2[i]: +        No() +        exit() +Yes()