#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;
}