#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200000 + 5;
vector<string> A, B;
char a[MAXN], b[MAXN];
bool judge(int la, int ra, int lb, int tb) {
  for (int i = 0; i <= ra - la; i++) {
    if (a[la + i] != b[lb + i]) {
      return false;
    }
  }
  return true;
}
bool dfs(int la, int ra, int lb, int rb, int len) {
  if (judge(la, ra, lb, rb)) {
    return true;
  }
  if (len & 1) {
    return false;
  }
  if (dfs(la, la + len / 2 - 1, lb, lb + len / 2 - 1, len / 2) &&
      dfs(la + len / 2, la + len - 1, lb + len / 2, lb + len - 1, len / 2)) {
    return true;
  }
  if (dfs(la, la + len / 2 - 1, lb + len / 2, lb + len - 1, len / 2) &&
      dfs(la + len / 2, la + len - 1, lb, lb + len / 2 - 1, len / 2)) {
    return true;
  }
  return false;
}
int main() {
  int len;
  bool flag = true;
  scanf("%s", a);
  scanf("%s", b);
  len = strlen(a);
  if (strcmp(a, b) == 0) {
    printf("YES\n");
    return 0;
  }
  if (len & 1) {
    printf("NO\n");
    return 0;
  }
  if (dfs(0, len - 1, 0, len - 1, len)) {
    printf("YES\n");
  } else {
    printf("NO\n");
  }
}
