Today on a lecture about strings Gerald learned a new definition of string equivalency. Two strings *a* and *b* of equal length are called equivalent in one of the two cases: 
 1.  They are equal. 1.  If we split string *a* into two halves of the same size *a*<sub class="lower-index">1</sub> and *a*<sub class="lower-index">2</sub>, and string *b* into two halves of the same size *b*<sub class="lower-index">1</sub> and *b*<sub class="lower-index">2</sub>, then one of the following is correct: <ol> <li> *a*<sub class="lower-index">1</sub> is equivalent to *b*<sub class="lower-index">1</sub>, and *a*<sub class="lower-index">2</sub> is equivalent to *b*<sub class="lower-index">2</sub> 1.  *a*<sub class="lower-index">1</sub> is equivalent to *b*<sub class="lower-index">2</sub>, and *a*<sub class="lower-index">2</sub> is equivalent to *b*<sub class="lower-index">1</sub> 
As a home task, the teacher gave two strings to his students and asked to determine if they are equivalent.

Gerald has already completed this home task. Now it's your turn!
The first two lines of the input contain two strings given by the teacher. Each of them has the length from 1 to 200 000 and consists of lowercase English letters. The strings have the same length.
#Este algoritmo esta usando Divide and conquer debido a que se necesita comparar dos cadenas de letras.
#El problema se divide en subproblemas lo que permite analizar los pedazos como lo dice el problema al principio, se divide tantas veces sea necesario para poder encontrar soluciones y despues solo añadirlas.
#Me parece que es el approach necesario debido a como se deben realizar las comparaciones de las cadenas ingresadas.
palabras={}
def equivalente(ca1,ca2):#Esta funcion permitira el uso de las multiples divisiones de cadena de ser necesario
    if (ca1,ca2) in palabras:
      #Inserta las palabras escritas en palabras
        return palabras[(ca1,ca2)]
      #Verifica que ambas palabras tengan la misma longitud
    if ca1==ca2:
        return True
      #divide ambas palabras a la mitad
    if(len(ca1)%2==1 or len(ca2)%2==1):
        return False
    #la funcion len devuelve la longitud de una cadena de caracteres
    #los cuatro pares de palabras se acomodan
    #Esto es para colocar de donde a donde van a ir las cadenas, colocandolas a la mitad de la longitud o a la inversa
    a1=ca1[:len(ca1)//2]
    a2=ca1[len(ca1)//2:]
    b1=ca2[:len(ca2)//2]
    b2=ca2[len(ca2)//2:]

    #Revisa si existe equilavencia entre los cuatro pares
    palabras[(ca1,ca2)]= (equivalente(a1,b1)and equivalente(a2,b2)) or (equivalente(a1,b2) and equivalente(a2,b1))
    return palabras[(ca1,ca2)]

a=input()
b=input()

if equivalente(a,b):
    print("YES")
else:
    print("NO")
 		   		  	 		  	 	 			   		 	