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



S = eval(input())

T = eval(input())



# 1対1の対応表

start = [-1] * 26

goal = [-1] * 26



for i in range(len(S)):

    # アルファベットを0～25の数値に変換

    a = ord(S[i]) - ord('a')

    b = ord(T[i]) - ord('a')

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

    if start[a] != -1 or goal[b] != -1:

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

        if start[a] != b or goal[b] != a:

            print('No')

            exit()

    # 空いていれば対応表を埋める

    else:

        start[a] = b

        goal[b] = a



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



S = eval(input())

T = eval(input())



# 1対1の変換表

start = {}

goal = {}



for i in range(len(S)):

    s = S[i]

    t = T[i]

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

    if s in start:

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

        if start[s] != t:

            print('No')

            exit()

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

    else:

        start[s] = t

    # 変換後Tも同じようにやる

    if t in goal:

        if goal[t] != s:

            print('No')

            exit()

    else:

        goal[t] = s



print('Yes')
# -*- coding: utf-8 -*-
S = eval(input())
T = eval(input())
# 1対1の対応表
start = [-1] * 26
goal = [-1] * 26
for i in range(len(S)):
    # アルファベットを0～25の数値に変換
    a = ord(S[i]) - ord("a")
    b = ord(T[i]) - ord("a")
    # 対応表の該当箇所がまだ空いてるかどうか
    if start[a] != -1 or goal[b] != -1:
        # 埋まっている場合、今回の組み合わせと一致しているかどうか
        if start[a] != b or goal[b] != a:
            print("No")
            exit()
    # 空いていれば対応表を埋める
    else:
        start[a] = b
        goal[b] = a
print("Yes")

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

-# 1対1の対応表 -start = [-1] * 26 -goal = [-1] * 26 +# 1対1の変換表 +start = {} +goal = {} -    # アルファベットを0～25の数値に変換 -    a = ord(S[i]) - ord("a") -    b = ord(T[i]) - ord("a") -    # 対応表の該当箇所がまだ空いてるかどうか -    if start[a] != -1 or goal[b] != -1: +    s = S[i] +    t = T[i] +    # 変換表(変換前S)の該当箇所がまだ空いてるかどうか +    if s in start: -        if start[a] != b or goal[b] != a: +        if start[s] != t: -    # 空いていれば対応表を埋める +    # 空いていれば変換表を埋める -        start[a] = b -        goal[b] = a +        start[s] = t +    # 変換後Tも同じようにやる +    if t in goal: +        if goal[t] != s: +            print("No") +            exit() +    else: +        goal[t] = s