/*
题目的大意大概是:
1. 有1种对字符串的变化: 可以对某字符串中的每一个字母,进行 A->B B->C C->D....这样的变化
2. 还有1种对字符串的变化: 可以交换字符串中任意两个字母的位置
3. 这 2 种变化可以同时不限次数的出现,给出2个字符串,看看能不能由第1个,根据这 2 种变化得到第2个
要点:
要找到变化中的不变量
对这题而言,字母可以千变万化,其位置也是,但是如果对字母频数进行统计后,对频数数组进行排序,发现频数数组的n个元素全部一一相等(n为字符串的长度),则可判断可以通过变化,由第1个字符串得到第2个字符串
*/
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#define rep(i, k, n) for (int i = k; i < (n); i++)
#define Clear(x, y) memset(x, y, sizeof(x))
using namespace std;
int num1[26], num2[26];
string s1, s2;
bool solve()
{
Clear(num1, 0);
Clear(num2, 0);
int len = (int)s1.length();
rep(i, 0, len)
{
num1[s1[i] - 'A']++;
num2[s2[i] - 'A']++;
}
sort(num1, num1 + 26);
sort(num2, num2 + 26);
rep(i, 0, 26)
{
if (num1[i] != num2[i]) return false;
}
return true;
}
int main()
{
while (cin >> s1 >> s2)
{
if (solve()) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}