// Slower C++ solution:
//----------------------Shanu Garg here---------------------

//-------------Search on youtube : Shanu Garg---------------

//-Studying at National Institute of Technology Delhi(NITD)-

//---------------------From Delhi, India--------------------



#include<bits/stdc++.h>

#include<algorithm>

using namespace std;



#define f(i,n) for(auto i=0;i<n;i++)

#define fr(i,n) for(auto i=n-1;i>=0;i--)

#define fs(i,a,b,c) for(auto i=a;i!=b;i+=c)

#define fl(i,x) for(auto i : x)

#define nl cout<<"\n";

#define chk(x) cout<<#x<<x<<" ", nl

#define ll long long int

#define ull unsigned long long int

#define vi vector<int>

#define vvi vector<vi>

#define pr pair<ll, ll>

#define vii vector<pair<int, int>>

#define vll vector<pr>

#define vl vector<ll>

#define m(a,b) map<a, b>

#define mid(a,b) ((a+b)/2)

#define pb push_back

#define LCM(a,b) ((a*b)/__gcd(x,y))

const int INF = 0x3f3f3f3f, mod = 1e9 + 7;



class triplet{

    ll f, s, t;};



vl in(ll n){vl v;ll x;

    f(i,n)

    cin>>x, v.pb(x);

    return v;}



vll in_pr(ll n){

    vll ar;

    ll x,y;

    f(i,n)

    {cin>>x>>y;

    ar[i]={x,y};

    }

    return ar;

}

void out(vl v, char ch='\0'){

    fl(i,v)

    cout<<i<<ch;

}



void solve(){

    ll N;

    cin>>N;

    bool flag=false;

    for(int i=1;i<10;i++)

    if(N%i == 0)

    if(N/i < 10  &&  N/i > 0)

    flag=true;



    flag ? cout<<"Yes" : cout<<"No";

}



int main(){

    ios_base::sync_with_stdio(false);

    cin.tie(NULL);

    solve();

   return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.411426635457168x):
#include<stdio.h>

#include<string.h>



#define FOR(i,a,b) for(int i=a;i<b;i++)

#define FORN(i,a,b) for(int i=a;i<=b;i++)

#define INT_MAX 2147483647

#define INT_MIN -2147483648



typedef long long ll;			//%ld.

typedef long long int lli;		//%lld.

typedef unsigned long long ull;	//%llu.

// int %d, double %lf ,float %f ,string %s.



void swap(int *x,int *y);

int max(int x,int y);

int min(int x,int y);

void sortSeq(int dt[],int l,int r);

void sortIns(int dt[],int l,int r);

void mergeSort(int dt[],int l,int r);

int binser(int nilai,int dt[],int l,int r);

int abs(int x);

double maxD(double x,double y);

double minD(double x,double y);



//main code

int hitung(int x){

	int m = 0;

	while(x>0){

		m+=(x%10);

		x/=10;

	}

	return m;

}



int main(){

	int n;

	scanf("%d",&n);

	for(int i=1;i<=9;i++){

		for(int j=i;j<=9;j++)

			if(i*j==n){

				printf("Yes\n");

				return 0;

			}

	}

	printf("No\n");

}



































///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

double maxD(double x,double y){

	return x > y ? x : y;

}

double minD(double x,double y){

	return x < y ? x : y;

}

int abs(int x){

	if(x<0)	return -x;

	return x;

}

void merge(int arr[], int aLeft , int aRight , int bLeft , int bRight){ //merge

	int size = bRight - aLeft + 1;

	int temp[size];                

	int tIndex = 0;

	int aIndex = aLeft;

	int bIndex = bLeft;

	while( (aIndex <= aRight)&&(bIndex <= bRight))

	{

		if(arr[aIndex]<=arr[bIndex])

		{

			temp[tIndex] = arr[aIndex];

			aIndex = aIndex +1;

		}

		else

		{

			temp[tIndex] = arr[bIndex];

			bIndex = bIndex + 1;

		}

		tIndex = tIndex + 1;

	}

	while(aIndex <= aRight)

	{

		temp[tIndex] = arr[aIndex];

		aIndex = aIndex + 1;

		tIndex = tIndex + 1;

	}

	while(bIndex <= bRight)

	{

		temp[tIndex] = arr[bIndex];

		bIndex = bIndex + 1;

		tIndex = tIndex + 1;

	}

	for(int i = 0 ; i<= size-1 ; i++)

	{

		arr[aLeft + i] = temp[i];

	}

}



void swap(int *a,int *b){ //swap

	int temp = *a;

	*a = *b;

	*b = temp;

}

int max(int a,int b){ //maksimum

	return a>b ? a : b;

}

int min(int a,int b){ //minimum

	return a<b ? a : b;

}

void sortSeq(int arr[],int l,int r){ //sequencial sort

	for(int i=l;i<=r-1;i++)

		for(int j=i+1;j<=r;j++)

			if(arr[j]<arr[i])

				swap(&arr[i],&arr[j]);

}

void sortIns(int h[],int l,int r){ //insertion sort

	for(int i=l;i<=r;i++){

		int pos=i;

		while((pos>1)&&(h[pos]<h[pos-1])){

			swap(&h[pos],&h[pos-1]);

			pos=pos-1;

		}

	}

}

void mergeSort(int arr[],int left,int right){ //merge sort

	if( left == right )

		return; 

	else{

		int mid = (left+right)/2;    	 

		mergeSort(arr,left,mid);	

		mergeSort(arr,mid+1,right);

		merge(arr,left,mid,mid+1,right); 

	}

}

int binser(int x,int dt[],int kiri,int kanan){ //tidak ada = -1

	int hasil = -1;

	while((kiri<=kanan)&&(hasil==0)){

		int tengah=(kiri+kanan)/2;

		if(x<dt[tengah])

			kanan=tengah-1;

		else if(x>dt[tengah])

			kiri=tengah+1;

		else

			hasil=tengah;

	}

	return hasil;

}