import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String str1 = in.next();
String str2 = in.next();
System.out.println(way(str1,str2)? "YES":"NO");
}
public static boolean sametype(char[] arr1 , char[] arr2){
if(arr1.length != arr2.length){
return false;
}
int[] map = new int[256];
for(int i = 0 ; i< arr1.length ; i++){
map[arr1[i]]++;
}
for(int i = 0 ; i< arr2.length ; i++){
map[arr2[i]]--;
if(map[arr2[i]] < 0){
return false;
}
}
return true;
}
public static boolean way(String a ,String b){
char[] str1 = a.toCharArray();
char[] str2 = b.toCharArray();
int n = str1.length;
boolean[][][] dp = new boolean[n][n][n + 1];
if(!sametype(str1,str2)){
return false;
}
for(int l1 = 0; l1 < n; l1++){
for(int l2 = 0; l2 < n; l2++){
dp[l1][l2][1] = (str1[l1] == str2[l2]);
}
}
for(int size = 2; size <= n; size++){
for(int l1 = 0; l1 <= n - size; l1++){
for(int l2 = 0; l2 <= n - size; l2++){
for(int leftPart = 1; leftPart < size; leftPart++){
if((dp[l1][l2][leftPart] && dp[l1 + leftPart][l2 + leftPart][size - leftPart]) ||
(dp[l1][l2 + size - leftPart][leftPart] && dp[l1 + leftPart][l2][size - leftPart])){
dp[l1][l2][size] = true; // 只要有一个leftPart满足旋变串条件就可以break出去
break;
}
}
}
}
}
return dp[0][0][n];
}
}
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String str1 = in.next();
String str2 = in.next();
System.out.println(way(str1,str2)? "YES":"NO");
}
public static boolean sametype(char[] arr1 , char[] arr2){
if(arr1.length != arr2.length){
return false;
}
int[] map = new int[256];
for(int i = 0 ; i< arr1.length ; i++){
map[arr1[i]]++;
}
for(int i = 0 ; i< arr2.length ; i++){
map[arr2[i]]--;
if(map[arr2[i]] < 0){
return false;
}
}
return true;
}
public static boolean way(String a ,String b){
char[] str1 = a.toCharArray();
char[] str2 = b.toCharArray();
int n = str1.length;
boolean[][][] dp = new boolean[n][n][n + 1];
if(!sametype(str1,str2)){
return false;
}
for(int l1 = 0; l1 < n; l1++){
for(int l2 = 0; l2 < n; l2++){
dp[l1][l2][1] = (str1[l1] == str2[l2]);
}
}
for(int size = 2; size <= n; size++){
for(int l1 = 0; l1 <= n - size; l1++){
for(int l2 = 0; l2 <= n - size; l2++){
for(int leftPart = 1; leftPart < size; leftPart++){
if((dp[l1][l2][leftPart] && dp[l1 + leftPart][l2 + leftPart][size - leftPart]) ||
(dp[l1][l2 + size - leftPart][leftPart] && dp[l1 + leftPart][l2][size - leftPart])){
dp[l1][l2][size] = true; // 只要有一个leftPart满足旋变串条件就可以break出去
break;
}
}
}
}
}
return dp[0][0][n];
}
}