#include <bits/stdc++.h>
using namespace std;
const int S = 123456;
string s, ns;
int cnt = 0;
bool isCall(string ns, int i) {
  int sizeNs = ns.size();
  bool ara[15];
  memset(ara, false, sizeof ara);
  for (int j = 0; j < sizeNs; j++) {
    ara[ns[j] - '0'] = true;
  }
  int c = 0;
  for (int j = 0; j <= 9; j++) {
    if (ara[j]) c++;
  }
  if (c < 2)
    return true;
  else if (c == 2) {
    for (int j = 0; j <= 9; j++) {
      if (ara[j]) {
        if (i == j) return true;
      }
    }
  }
  return false;
}
void dfs(int u, int siz, string ns) {
  ns += u + '0';
  if (!siz) {
    if (ns.size() < s.size()) {
      cnt++;
    } else if (ns.size() == s.size() && ns <= s) {
      cnt++;
    }
    return;
  }
  for (int i = 0; i <= 9; i++) {
    if (isCall(ns, i)) dfs(i, siz - 1, ns);
  }
}
int main() {
  while (cin >> s) {
    cnt = 0;
    int siz = s.size();
    for (int d = 1; d <= siz; d++) {
      for (int i = 1; i <= 9; i++) {
        ns.clear();
        dfs(i, d - 1, ns);
      }
    }
    cout << cnt << endl;
  }
  return 0;
}
