#include <iostream>
#include <vector>
#include <map>
using namespace std;
vector<int> num;
map<int, bool> m; //存储0!~9!能够组合出来哪些正整数n
void init() {
num.push_back(1);//0!=1
int k = 1;
for (int i = 1; k <= 1e6; i++) {
k *= i;
num.push_back(k);
}
}
void dfs(int u, int sum) {
if (u == num.size()) {
m[sum] = true;
return ;
}
dfs(u + 1, sum); //不选当前数
dfs(u + 1, sum + num[u]); //选当前数
}
int main() {
int n;
init();
dfs(0, 0);
while (cin >> n && n >= 0) {
if (n && m[n]) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}