#include <iostream>
#include <stdio.h>
#include <string.h>
void srt(int* k)
{
int i;
for(i = 0;i < 26-1;i ++)
{
int index=i;
for (int j=i+1;j < 26;j ++)
{
if(k[j]<k[index])
index=j;
}
int l;
l = k[index];
k[index] = k[i];
k[i] = l;
}
}
using namespace std;
int main()
{
char s1[110],s2[110];
int k1[26],k2[26];
int i,t = 1;
char s3[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
while(scanf("%s",s1)!=EOF)
{
scanf("%s",s2);
int len = strlen(s2);
memset(k1,0,sizeof(k1));
memset(k2,0,sizeof(k2));
for (i=0 ; i<len ; i++)
{
for(int j = 0;j < 26;j ++)
{
if(s1[i]==s3[j])
k1[j]++;
if(s2[i]==s3[j])
k2[j]++;
}
}
srt(k1);
srt(k2);
for(i = 0;i < 26;i ++)
{
if(k1[i]!=k2[i])
{
cout << "NO" << endl;
t = 0;
break;
}
}
if(t == 1)
cout << "YES" << endl;
}
return 0;
}
/*这道题真是醉人。WA了几次,理解英文半天,排列是无规律的,替换也是无规律的。起初真的是按题目里说的字母+1什么的 也知道统计出现个数就行。但后来WA了之后重新读题 又错认为得按2,1,5,4,3这样排序 结果又大改。最后总结 题目真是够了...总耗时2个半小时就为了这道水题...再谈谈解法,就是统计s1 s2 2个字符数组每个字母出现的次数 字母不需要变化 统计就行 之后从小到大排序(顺便默写了一遍选择排序...)数量一一对应即可*/