Problem:
Score : 400 points

Problem Statement

Given is a positive integer N.

Find the number of pairs (A, B) of positive integers not greater than N that satisfy the following condition:

When A and B are written in base ten without leading zeros, the last digit of A is equal to the first digit of B, and the first digit of A is equal to the last digit of B.

Constraints

1 \leq N \leq 2 \times 10^5

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N

Output

Print the answer.

Sample Input 1

25

Sample Output 1

17

The following 17 pairs satisfy the condition: (1,1), (1,11), (2,2), (2,22), (3,3), (4,4), (5,5), (6,6), (7,7), (8,8), (9,9), (11,1), (11,11), (12,21), (21,12), (22,2), and (22,22).

Sample Input 2

1

Sample Output 2

1

Sample Input 3

100

Sample Output 3

108

Sample Input 4

2020

Sample Output 4

40812

Sample Input 5

200000

Sample Output 5

400000008

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include<bits/stdc++.h>
#define PB push_back
#define MP make_pair
#define F first
#define S second
#define MOD	1000000007
#define int	long long
#define pii pair<int,int> 
#define vi vector<int>
using namespace std;

int ways(int f, int l, int n){
	int ans = 0;
	if(l*10 + f <= n)
		ans++;
	// 1
	int temp = l*100 + f;
	for(int i = 0; i < 10; i++){
		if(temp + i*10 <= n)
			ans++;
		else
			return ans;
	}
	// 2
	temp = l*1000 + f;
	for(int i = 0; i < 10; i++){
		for(int j = 0; j < 10; j++){
			if(temp + i*100 + j*10 <= n)
				ans++;
			else
				return ans;
		}
	}
	// 3
	temp = l * 10000 + f;
	for(int k = 0; k < 10; k++){
		for(int i = 0; i < 10; i++){
			for(int j = 0; j < 10; j++){
				if(temp + k*1000 + i*100 + j*10 <= n)
					ans++;
				else
					return ans;
			}
		}
	}
	// 4
	if(l == 1){
		temp = l * 100000 + f;
		for(int m = 0; m < 10; m++){
			for(int k = 0; k < 10; k++){
				for(int i = 0; i < 10; i++){
					for(int j = 0; j < 10; j++){
						if(temp + m*10000 + k*1000 + i*100 + j*10 <= n)
							ans++;
						else
							return ans;
					}
				}
			}
		}
	}
	return ans;
}

int32_t main(){
	int n;
	cin >> n;
	int cnt = 0;
	for(int i = 1; i <= n; i++){
		string p = to_string(i);
		int f = p[0] - '0';
		int l = p.back() - '0';
		if(l == 0)
			continue;
		if(f == l){
			cnt++;
		}
		cnt += ways(f,l,n);
	}
	cout << cnt << endl;

	return 0;
}