#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
#define fi first
#define se second
#define pp push_back
#define inarr(n, arr) for(int ax = 0; ax<(n); ax++)cin>>(arr)[ax];
#define rep(aa, bb, cc) for(int aa = bb; aa < cc;aa++)
#define all(x) (x).begin(), (x).end()
#define allr(x) x.rbegin(),(x).rend()
#define Ones(n) __builtin_popcount(n)
#define endl '\n'
#define yes cout<<"YES\n";
#define no cout<<"NO\n";
//#define int long long
void Gamal() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
#ifdef Clion
freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
#endif
}
int dx[] = {+0, +0, -1, +1, +1, +1, -1, -1};
int dy[] = {-1, +1, +0, +0, +1, -1, +1, -1};
const double EPS = 1e-9;
const ll N = 2e5 + 5, INF = INT_MAX, MOD = 1e9 + 7, OO = 0X3F3F3F3F3F3F3F3F, LOG = 25;
bool slv(string &a, string &b) {
if (a == b)
return true;
if (a.size() % 2)
return false;
string a1 = a.substr(0, a.size() / 2);
string a2 = a.substr(a.size() / 2, a.size() / 2);
string b1 = b.substr(0, b.size() / 2);
string b2 = b.substr(b.size() / 2, b.size() / 2);
bool ret = slv(a1,b1) && slv(a2,b2);
if(ret)return true;
return slv(a1,b2) && slv(a2,b1);
}
void solve() {
string a, b;
cin >> a >> b;
cout << (slv(a, b) ? "YES" : "NO");
}
signed main() {
Gamal();
int t = 1;
// cin >> t;
while (t--) {
solve();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgcGFpcjxpbnQsIGludD4gcGlpOwp0eXBlZGVmIHBhaXI8bGwsIGxsPiBwbGw7CnR5cGVkZWYgdmVjdG9yPGludD4gdmk7CgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgcHAgcHVzaF9iYWNrCiNkZWZpbmUgaW5hcnIobiwgYXJyKSBmb3IoaW50IGF4ID0gMDsgYXg8KG4pOyBheCsrKWNpbj4+KGFycilbYXhdOwojZGVmaW5lIHJlcChhYSwgYmIsIGNjKSBmb3IoaW50IGFhID0gYmI7IGFhIDwgY2M7YWErKykKI2RlZmluZSBhbGwoeCkgKHgpLmJlZ2luKCksICh4KS5lbmQoKQojZGVmaW5lIGFsbHIoeCkgeC5yYmVnaW4oKSwoeCkucmVuZCgpCiNkZWZpbmUgT25lcyhuKSBfX2J1aWx0aW5fcG9wY291bnQobikKI2RlZmluZSBlbmRsICdcbicKI2RlZmluZSB5ZXMgY291dDw8IllFU1xuIjsKI2RlZmluZSBubyBjb3V0PDwiTk9cbiI7Ci8vI2RlZmluZSBpbnQgbG9uZyBsb25nCgp2b2lkIEdhbWFsKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwogICAgY291dC50aWUobnVsbHB0cik7CiNpZmRlZiBDbGlvbgogICAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbiksIGZyZW9wZW4oIm91dHB1dC50eHQiLCAidyIsIHN0ZG91dCk7CiNlbmRpZgp9CgppbnQgZHhbXSA9IHsrMCwgKzAsIC0xLCArMSwgKzEsICsxLCAtMSwgLTF9OwppbnQgZHlbXSA9IHstMSwgKzEsICswLCArMCwgKzEsIC0xLCArMSwgLTF9OwoKY29uc3QgZG91YmxlIEVQUyA9IDFlLTk7CmNvbnN0IGxsIE4gPSAyZTUgKyA1LCBJTkYgPSBJTlRfTUFYLCBNT0QgPSAxZTkgKyA3LCBPTyA9IDBYM0YzRjNGM0YzRjNGM0YzRiwgTE9HID0gMjU7CgoKYm9vbCBzbHYoc3RyaW5nICZhLCBzdHJpbmcgJmIpIHsKICAgIGlmIChhID09IGIpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAoYS5zaXplKCkgJSAyKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIHN0cmluZyBhMSA9IGEuc3Vic3RyKDAsIGEuc2l6ZSgpIC8gMik7CiAgICBzdHJpbmcgYTIgPSBhLnN1YnN0cihhLnNpemUoKSAvIDIsIGEuc2l6ZSgpIC8gMik7CiAgICBzdHJpbmcgYjEgPSBiLnN1YnN0cigwLCBiLnNpemUoKSAvIDIpOwogICAgc3RyaW5nIGIyID0gYi5zdWJzdHIoYi5zaXplKCkgLyAyLCBiLnNpemUoKSAvIDIpOwogICAgYm9vbCByZXQgPSBzbHYoYTEsYjEpICYmIHNsdihhMixiMik7CiAgICBpZihyZXQpcmV0dXJuIHRydWU7CiAgICByZXR1cm4gc2x2KGExLGIyKSAmJiBzbHYoYTIsYjEpOwp9Cgp2b2lkIHNvbHZlKCkgewogICAgc3RyaW5nIGEsIGI7CiAgICBjaW4gPj4gYSA+PiBiOwogICAgY291dCA8PCAoc2x2KGEsIGIpID8gIllFUyIgOiAiTk8iKTsKfQoKCnNpZ25lZCBtYWluKCkgewogICAgR2FtYWwoKTsKICAgIGludCB0ID0gMTsKLy8gICAgY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KfQ==