#include <iostream>
//#include <bitset>
using namespace std;
// 循环左移函数
unsigned short int rol(unsigned short int val, int size) {
unsigned short int res = val << size; // 左移size位
res = res|( val >> (16 - size)); // 将左边的size位移到右边 再通过位运算将这几位与res做或运算得到循环左移的效果;
return res;
}
// 判断两个数是否可以通过循环左移得到
string judge(unsigned short int a, unsigned short int b) {
for (int i = 0; i < 16; i++) { // 循环16次
if (a == b) return "YES"; // 如果相等则返回YES
a = rol(a, 1); // 否则将a循环左移一位
}
return "NO"; // 如果都不相等则返回NO
}
int main() {
unsigned short int a, b; // 定义两个不大于65535的非负整数
while(cin >> a >> b){// 输入两个整数
cout << judge(a, b) << endl; }// 输出判断结果
return 0;
}