#include <bits/stdc++.h>
using namespace std;
const int maxn = 200010;
const long long M = 1e9 + 7;
long long p[maxn], a[maxn], b[maxn], ret;
string s, t;
inline int B(int f1, int l1) {
  if (f1 == 0) return b[l1];
  return (M + b[l1] - (b[f1 - 1] * p[l1 - f1 + 1]) % M) % M;
}
inline int A(int f1, int l1) {
  if (f1 == 0) return a[l1];
  return (M + a[l1] - (a[f1 - 1] * p[l1 - f1 + 1]) % M) % M;
}
inline bool f(int f1, int l1, int f2, int l2) {
  if (A(f1, l1) == B(f2, l2)) return true;
  int L = l1 - f1 + 1;
  if (L & 1) return false;
  L /= 2;
  if (f(f1, f1 + L - 1, f2 + L, l2) && f(f1 + L, l1, f2, f2 + L - 1))
    return true;
  if (f(f1, f1 + L - 1, f2, f2 + L - 1) && f(f1 + L, l1, f2 + L, l2))
    return true;
  return false;
}
int main() {
  p[0] = 1;
  for (int i = 1; i <= 200010; i++) p[i] = (p[i - 1] * 37) % M;
  cin >> s;
  cin >> t;
  a[0] = (s[0] - 'a' + 1);
  b[0] = (t[0] - 'a' + 1);
  for (int i = 1; i < s.size(); i++) {
    a[i] = ((a[i - 1] * 37) + (s[i] - 'a' + 1)) % M;
    b[i] = ((b[i - 1] * 37) + (t[i] - 'a' + 1)) % M;
  }
  if (f(0, s.size() - 1, 0, t.size() - 1))
    cout << "YES" << endl;
  else
    cout << "NO" << endl;
  return 0;
}
