#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3c3c3c3c;
const long long infl = 0x3c3c3c3c3c3c3c3c;
const int MAX_N = 2e5 + 9;
string a[2];
int partialSum[2][MAX_N][26];
bool isSame(int s1, int s2, int sz) {
  for (int i = 0; i < 26; i++) {
    int v1 = partialSum[0][s1 + sz - 1][i] - partialSum[0][s1 - 1][i];
    int v2 = partialSum[1][s2 + sz - 1][i] - partialSum[1][s2 - 1][i];
    if (v1 != v2) return false;
  }
  return true;
}
bool getAnswer(int s1, int s2, int sz) {
  if (sz % 2) {
    for (int i = 0; i < sz; i++) {
      if (a[0][s1 + i - 1] != a[1][s2 + i - 1]) return false;
    }
    return true;
  }
  if (!isSame(s1, s2, sz)) return false;
  if (getAnswer(s1, s2, sz / 2) && getAnswer(s1 + sz / 2, s2 + sz / 2, sz / 2))
    return true;
  if (getAnswer(s1, s2 + sz / 2, sz / 2) && getAnswer(s1 + sz / 2, s2, sz / 2))
    return true;
  return false;
}
int main() {
  cin.tie(NULL);
  cin.sync_with_stdio(false);
  cout.sync_with_stdio(false);
  cin >> a[0] >> a[1];
  int sz = a[0].size();
  for (int i = 0; i < 2; i++) {
    for (int j = 1; j <= sz; j++) partialSum[i][j][a[i][j - 1] - 'a']++;
  }
  for (int i = 0; i < 2; i++) {
    for (int j = 1; j <= sz; j++) {
      for (int k = 0; k < 26; k++)
        partialSum[i][j][k] += partialSum[i][j - 1][k];
    }
  }
  printf("%s", getAnswer(1, 1, sz) ? "YES" : "NO");
  return 0;
}
