/*
* Copyright (c) 2017, 安徽大学计算机科学与技术学院
* All rights reserved.
* 作 者: 杨磊
* 完成日期:2017 年 01 月 06 日
* 问题描述:
* 给两个长度相同的字符串,判断能不能将其中一个字符串重新排序
* 并按照26字母线性映射得到另一个字符串。
* 思路:
* 既然可以重排,则字母不重要,重要的是字母出现的次数
* 比如字符串一是AABCD共出现4个字母,每个字母出现次数是2111,排序后是1112。
* 那么与其对应的字符串二应该也应该是2111形式如AABCD BBCDE等。
* 所以统计两个字符串分别出现的不同字母的个数及对应的次数并排序。
* 如果排序后的结果相同则输出YES,否则输出NO。
*/
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdlib.h>
using namespace std;
char a[105],b[105];
char a_temp[26],b_temp[26];
int main(){
int len,i,j;
while(cin>>a>>b){
memset(a_temp,0,26);
memset(b_temp,0,26);
len=strlen(a);
for(i=0;i<len;i++)
a_temp[a[i]-'A']++;
for(i=0;i<len;i++)
b_temp[b[i]-'A']++;
sort(a_temp,a_temp+26);
sort(b_temp,b_temp+26);
int flag=1;
for(i=0;i<26;i++)
if(a_temp[i]!=b_temp[i])
flag=0;
if(flag)
printf("YES\n");
else
printf("NO\n");}
return 0;
}