#include <iostream>

using namespace std;

long long n;
long long res;

const int NMAX=20;

long long p10[NMAX];

//вход: цифра d в k-разрядном числе в позиции r, q - кол-во таких чисел подряд от самого маленького
//выход: вклад этой цифры в сумму
long long g(int k, int r, long long q, int d)
{
  if (k==1)
    if (d % 2 == 0) return -d; else return d;

  if (k % 2 == 0) {
    if (r%2==1) return -d*q; else return d*q;
  }
  else {
    if (q%2==0) return 0;
    if (r%2==1) return -d; else return d;
  }
}


//суммарный вклад всех цифр правее r для всех k-разрядных чисел, где первые r разрядов фиксированы, 
//а число после r разрядов не превышает q
long long ff(int k, int r, long long q)
{
  if (r==k) return 0;
  if (r==k-1)
  {
    //остался один разряд - рассм-м отдельно
    long long ret=0;
    if (k % 2 == 0){
      for (int d=0; d<=q; d++) ret+=d;
      return ret;
    }
    int g=-1;
    for (int d=0; d<=q; d++) {
     ret += d * g; g = -g;
    }
    return ret;
  }


  int f = q / p10[k-r-1] % 10;
  long long ret=0;
  //
  int dfirst = (r==0) ? 1 : 0;
  for(int d=dfirst; d<f; d++)
    ret += g(k,r+1,p10[k-r-1],d);
  ret += (f-dfirst) * ff(k, r+1, p10[k-r-1]-1);

  ret += g(k, r+1, q % p10[k-r-1] + 1, f);
  ret += ff(k, r+1, q % p10[k-r-1]);

  return ret;
}

int main(void)
{
//  freopen("input.txt","r",stdin);
//  freopen("output.txt","w",stdout);

  cin >> n;
  p10[0]=1;
  int l=0;
  long long _n=n;
  while (_n>0)
  {
    p10[++l]=p10[l-1]*10;
    _n /= 10;
  }
  
  //сначала считаем всё, что с меньшим числом разрядов
  res=0;
  for (int i=1; i<l; i++)
    res += ff(i,0,p10[i]-1);
  //теперь конкретно с этим числом разрядов
  res += ff(l,0,n);

  cout << res;
  return 0;
}
