#include<bits/stdc++.h>
#define pb emplace_back
#define pf first
#define ps second
#define all(x) x.begin(),x.end()
#define allr(x) x.rbegin(),x.rend()
#define Endl '\n'
#define codejam cout<<"Case #"<<t<<": ";
#define pl pair<ll,ll>
#define mod 1000000007
#define INF 1000000001
#define forn(i,n) for(ll i=0;i<n;i++)
#define MAX 200002
#define fast ios_base::sync_with_stdio(false);cin.tie(NULL);
using namespace std;
typedef long long int ll;
ll gcd(ll a,ll b)
{
    if(b==0) return a;
    return gcd(b,a%b);
}

//////////////////////////////////// JAI SHREE RAM /////////////////////////////////////

void JAISHREERAM()
{
    ll n,i,j,ans=0;
    string a;
    cin>>a;
    n=a.size();
    i=0;
    while(i<n && a[i]=='0') i++;
    j=n-1;
    while(j>=0 && a[j]=='0') j--;
    while(i<j) 
    {
        if(a[i]!=a[j]) return void(cout<<"No");
        i++,j--;
    }
    cout<<"Yes";
}
int main()
{
    fast;
    int T=1;
    // cin>>T;
    for(int t=1;t<=T;t++)
    {
        // codejam
        JAISHREERAM();
    }
    return 0;
}
#pragma GCC optimize("Ofast")
#include<bits/stdc++.h>
using namespace std;
 
#define ll 				long long
#define eb 				emplace_back
#define mp              make_pair
#define pb              push_back
#define watch(x) 		cout << (#x) << " = " << (x) << endl;
#define w(x)			int x; cin >> x; while(x--)
#define all(x)          (x.begin(), x.end())
#define fastIO          ios_base::sync_with_stdio(false); cin.tie(nullptr);
#define vi              vector<int>
#define lcm(x, y)       (x/__gcd(x, y))*y
#define sayHi           cout << "Say Hi!!!!!!!!!!!!!!!!!!!!!!!!!\n";
#define rep(i,k,n)      for(int i=k; i<n; i++)
#define REPR(i,k,n) 	for (int (i) = (k); (i) >= (n); (i)--)
#define sumAll(a)       (accumulate ((a).begin(), (a).end(), 0ll))
#define mine(a)         (*min_element((a).begin(), (a).end()))
#define maxe(a)         (*max_element((a).begin(), (a).end()))
#define mini(a)         (min_element((a).begin(), (a).end()) - (a).begin())
#define maxi(a)         (max_element((a).begin(), (a).end()) - (a).begin())
#define lowb(a, x)      (lower_bound((a).begin(), (a).end(), (x)) - (a).begin())
#define uppb(a, x)      (upper_bound((a).begin(), (a).end(), (x)) - (a).begin())
#define mem0(a)         (memset(a, 0, sizeof(a)))
#define mem1(a)         (memset(a, -1, sizeof(a)))
const int MAXN = (int)((1e5) + 100);
const long long MOD = 1e9 + 7;
bool isPrime(ll n){if(n<2)return false;for(ll i=2;i*i<=n; i++){if(n%i==0)return false;}return true;}
int countDigit(ll n){int count=0;while(n!=0){n/=10;++count;}return count;}
void removeCharFromString(string &str,const char &ch){str.erase(remove(str.begin(),str.end(),ch),str.end());}
void showTime() {cerr<<"\nExecution time: "<<(float)clock()/CLOCKS_PER_SEC<<" secs\n";}
long long binExp(long long base,long long pow){
    long long result=1;
    while(pow){
        if(pow%2){result*=base;}
        base*=base;
        pow/=2;
    }
    return result;
}
long long binExpMod(long long base,long long pow,long long M){
    long long result=1;
    while(pow){
        if(pow%2){result=(result*base)%M;}
        base=(base*base)%M;
        pow/=2;
    }
    return result;
}
bool sortBySecAsc(const pair<ll,ll> &a, const pair<ll,ll> &b){
    return (a.second < b.second);
}
bool sortBySecDes(const pair<ll,ll> &a, const pair<ll,ll> &b){
    return (a.second > b.second);
}
/*#ifndef ONLINE_JUDGE
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
#endif*/

/*-----------------------------------------------------------------------------------------------------------------*/

int main() {
    fastIO
    
    ll n;
    cin >> n;
    if(n==0) {
        cout << "Yes";
        return 0;
    }
    while(n%10 == 0) {
        n/=10;
    }
    string s, temp2;
    s = temp2 = to_string(n);

    reverse(s.begin(), s.end());
    if(temp2 == s) {
        cout << "Yes";
    }else {
        cout << "No";
    }
    
    
    return 0;
}
