#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> P;
typedef pair<int,int> Pi;
#define rep(i, n) for (ll i = 0; i < n; i++)
#define FOR(i, a, b) for (ll i = a; i < b; i++)
#define fi first
#define se second
#define endl "\n"

template<typename T> inline bool chmax(T &a, T b){if(a<b){a=b;return true;}return false;}
template<typename T> inline bool chmin(T &a, T b){if(a>b){a=b;return true;}return false;}
template<typename T> ostream& operator<<(ostream& s,const complex<T>& d) {return s<<"("<<d.real()<<", "<<d.imag()<< ")";}
template<typename T1, typename T2> ostream& operator<<(ostream& s,const pair<T1,T2>& d) {return s<<"("<<d.first<<", "<<d.second<<")";}
template<typename T> ostream& operator<<(ostream& s, const vector<T>& d){
	int len=d.size();
	rep(i,len){
		s<<d[i];if(i<len-1) s<<" ";
	}
	return s;
}
template<typename T> ostream& operator<<(ostream& s,const vector<vector<T>>& d){
	int len=d.size();
	rep(i,len){
		s<<d[i]<<endl;
	}
	return s;
}
template<typename T> ostream& operator<<(ostream& s,const set<T>& v){
	s<<"{ ";
	for(auto itr=v.begin();itr!=v.end();++itr) {
		if (itr!=v.begin()) {s<< ", ";}
		s<<(*itr);
	}
	s<<" }";
	return s;
}
template<typename T1, typename T2> ostream& operator<<(ostream& s,const map<T1,T2>& m){
	s<<"{"<<endl;
	for(auto itr=m.begin();itr!=m.end();++itr){
		s<<" "<<(*itr).first<<" : "<<(*itr).second<<endl;
	}
	s<<"}"<<endl;
	return s;
}

const ll mod=1e9+7;
const ll inf=1e17;
const int INF=1e9;
const double PI=acos(-1);
const double EPS=1e-10;

int main(){
	cin.tie(0);
	ios::sync_with_stdio(false);
	ll n;
	cin>>n;
	ll ans=0;
	string tar=to_string(n);
	ll keta=tar.size();
	ll top=(ll)tar[0]-'0';
	//cout<<keta<<endl;
	FOR(a,1,n+1){
		string s=to_string(a);
		ll y=(ll)s[0]-'0';
		ll x=(ll)s.back()-'0';
		if(x==0) continue;
		//cout<<a<<' '<<x<<' '<<y<<endl;
		ll cnt=0;
		if(keta==1){
			if(x==y) cnt++;
		}
		if(keta==2){
			ll now=10*x+y;
			if(now<=n) cnt++;
			if(x==y) cnt++;
		}
		if(keta==3){
			FOR(i,-1,10){
				string now="";
				now+=s.back();
				if(i!=-1) now+=(char)i+'0'; 
				now+=s[0];
				if(stoll(now)<=n) cnt++;
			}
			if(x==y) cnt++;
		}
		if(keta==4){
			cnt=11;//3桁分
			FOR(i,0,10)FOR(j,0,10){
				string now="";
				now+=s.back();
				if(i!=-1) now+=(char)i+'0'; 
				if(j!=-1) now+=(char)j+'0'; 
				now+=s[0];
				if(stoll(now)<=n) cnt++;
				//if(a==2) cout<<now<<endl;
			}
			if(x==y) cnt++;
		}
		if(keta==5){
			//cnt=11*11;
			cnt=11;
			cnt+=10*10;
			FOR(i,0,10)FOR(j,0,10)FOR(k,0,10){
				string now="";
				now+=s.back();
				now+=(char)i+'0'; 
				now+=(char)j+'0'; 
				now+=(char)k+'0'; 
				now+=s[0];
				if(stoll(now)<=n) cnt++;
				//if(a==2) cout<<now<<endl;
			}
			if(x==y) cnt++;
		}
		if(keta==6){
			//cnt=11*11*11;
			cnt=11;
			cnt+=10*10;
			cnt+=10*10*10;
			if(x==y) cnt++;
			if(x>top){
				ans+=cnt;
				continue;
			}
			if(x<top){
				cnt+=10*10*10*10;
				ans+=cnt;
				//cout<<a<<' '<<cnt<<endl;
				continue;
			}
			ll ind1=(ll)tar[1]-'0';
			cnt+=ind1*10*10*10;
			ll ind2=(ll)tar[2]-'0';
			cnt+=ind2*10*10;
			ll ind3=(ll)tar[3]-'0';
			cnt+=ind3*10;
			ll ind4=(ll)tar[4]-'0';
			cnt+=ind4;
			if(s[0]<=tar[5]) cnt++;
			//if(cnt<1000)cout<<a<<' '<<cnt<<endl;
		}
		ans+=cnt;
	}
	cout<<ans<<endl;
}

Measured memory_bytes: 256