/*****/

#include <iostream>
#include <array>
#include <vector>
#include <algorithm>
#include <string>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <iomanip>	//cout << fixed << setprecision(桁数);
#include <stdexcept>

//#define int long long

using namespace std;
using ll = long long;
using ld = long double;
using vecll = vector<ll>;

#define nextline() (std::cerr << "\n")
#define debug(x) (#x " : " + (x))
#define debug_cout(x) (std::cerr << #x << " : " <<  (x) << "\n")
#define debug_tabcout(n, x) (std::cerr << strMulti("\t",n) << #x << " : " <<  (x) << "\n")
#define debug_headcout(h, x) (std::cerr << h << " : " <<  (x) << "\n")
#define debug_tabheadcout(n, h, x) (std::cerr << strMulti("\t",n) << h << " : " <<  (x) << "\n")
#define debugOut(a, b) (std::cerr << "(" << (a) << "," << (b) << ")" << "\n")

#define rep(i, n) for(int i=0, i##_len=(n); i<i##_len; i++)
#define rep1(i, n) for(int i=1, i##_len=(n); i<=i##_len; i++)
#define rrep(i, n) for(int i=(n)-1; i >= 0; i--)
#define rrep1(i, n) for(int i=(n); i > 0; i--)
#define all(x) (x).begin(), (x).end()
#define pair(a, b) make_pair(a, b)
constexpr int INF = 2000000100;
constexpr ll DIV = 1000000007;	// 10e9+7
template<class T> bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }
template<class T> bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }
template<class T> T divup(T a, T b) { if (a % b == 0) { return a / b; } return a / b + 1; }
std::string strMulti(std::string t, int n) { std::string out = ""; for (int i = 0; i < n; i++) { out += t; } return out; }
template<class T> T math_P(T m, T n) { T ret = 1; for (T i = m; i > m - n; i--) { ret *= i; } return ret; }
template<class T> T math_C(T m, T n) { T ret = mathP(m, n); for (T i = 2; i <= n; i++) { ret /= i; } return ret; }
template<class T> bool compare_by_b(pair<T, T> a, pair<T, T> b) { if (a.second != b.second) { return a.second < b.second; } return a.first < b.first; }
template<class T> T math_gcd(T a, T b) { a = abs(a); b = abs(b); if (a < b) { std::swap(a, b); } T tmp; while (b != 0) { tmp = b; b = a % b; a = tmp; } return a; }
template<class T> T math_lcm(T a, T b) { a = abs(a); b = abs(b); if (a > b) { std::swap(a, b); } if (a == 1) { return b; } T i = a; while (i % b != 0) { i += a; } return i; }

/*****/

void Main()
{
	int N;
	cin >> N;
	ll ret = 0;
	for (int a = 1; a <= N; a++)
	{
		int bHead = a % 10;
		if (bHead == 0) continue;
		int bFoot = a;
		if (a >= 10)		bFoot = a / 10;
		if (a >= 100)		bFoot = a / 100;
		if (a >= 1000)		bFoot = a / 1000;
		if (a >= 10000)		bFoot = a / 10000;
		if (a >= 100000)	bFoot = a / 100000;

		if (bHead == bFoot && bHead <= N)
		{
			ret++;
			//debugOut(a, bHead);
		}

		if (bHead * 10 + bFoot <= N)
		{
			ret++;
			//debugOut(a, bHead * 10 + bFoot);
		}

		if (bHead * 100 + 90 + bFoot <= N)
		{
			ret += 10;
		}
		else
		{
			rep(j, 10)
			{
				if (bHead * 100 + j * 10 + bFoot <= N)
				{
					ret++;
				}
				else
				{
					break;
				}
			}
		}

		if (bHead * 1000 + 990 + bFoot <= N)
		{
			ret += 100;
		}
		else
		{
			bool end = false;
			rep(j1, 10)
			{
				rep(j2, 10)
				{
					if (bHead * 1000 + j1 * 100 + j2 * 10 + bFoot <= N)
					{
						ret++;
					}
					else
					{
						end = true;
						break;
					}
				}
				if (end)	break;
			}
		}

		if (bHead * 10000 + 9990 + bFoot <= N)
		{
			ret += 1000;
		}
		else
		{
			bool end = false;
			rep(j1, 10)
			{
				rep(j2, 10)
				{
					rep(j3, 10)
					{
						if (bHead * 10000 + j1 * 1000 + j2 * 100 + j3 * 10 + bFoot <= N)
						{
							ret++;
						}
						else
						{
							end = true;
							break;
						}
					}
					if (end)	break;
				}
				if (end)	break;
			}
		}

		if (bHead * 100000 + 99990 + bFoot <= N)
		{
			ret += 10000;
		}
		else
		{
			bool end = false;
			rep(j1, 10)
			{
				rep(j2, 10)
				{
					rep(j3, 10)
					{
						rep(j4, 10)
						{
							if (bHead * 100000 + j1 * 10000 + j2 * 1000 + j3 * 100 + j4 * 10 + bFoot <= N)
							{
								ret++;
							}

							else
							{
								end = true;
								break;
							}
						}
						if (end)	break;
					}
					if (end)	break;
				}
				if (end)	break;
			}
		}

	}

	cout << ret;
}

/*****/

int main()
{
	//std::ios::sync_with_stdio(false);
	//std::cin.tie(0);

	//std::cout << std::fixed << std::setprecision(10);


	/*
	while (true)
	{
		Main();
		cout << endl;
	}
	//*/


	Main();

	return 0;
}


Measured memory_bytes: 256