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];
    }
    
}