// 已知 10!=3628800
// 9!=362880
// 求出0到9的阶乘(一共10个数),他们之间的所有可能组合情况(供2^10=1024种),其中至少要选一个数,也就是全0(全不选)的情况被省略
// —这一步用位运算来实现
// 所有的组合情况放进哈希表,用unordered_set
#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_set>
using namespace std;
int v[10];
unordered_set<int> S;
int main()
{
for(int i=0;i<10;i++)
{
v[i]=1;
for(int j=i;j>0;j--)
{
v[i]*=j;
}
}
//for(int i=0;i<10;i++) cout<<v[i]<<endl;
for(int i=1;i<1<<10;i++) //左移完后是1024,此时是11位数,不能选,减一之后是1023,十一位数全一,表示所有都选的情况
{
int s=0;
for(int j=0;j<10;j++) //把这个i种所有位为1的(为1表示这个选)所有选法加起来
{
if(i>>j & 1) s+=v[j]; //j=0时表示右移0位,若为1,说明此时选了0的阶乘
}
S.insert(s);
}
int x;
while(cin>>x,x>=0)
{
if(S.count(x))
{
cout<<"YES"<<endl;
}
else cout<<"NO"<<endl;
}
return 0;
}