#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000")
char s[100];
long long dp[100][10];
long long len;
long long Dp(long long x, long long y) {
  if (x == len - 1) return 1;
  if (dp[x][y] != -1) return dp[x][y];
  long long z = s[x + 1] - '0' + y;
  if (z % 2 == 0)
    return dp[x][y] = Dp(x + 1, z / 2);
  else
    return dp[x][y] = Dp(x + 1, z / 2) + Dp(x + 1, z / 2 + 1);
}
int main() {
  scanf("%s", s);
  len = strlen(s);
  memset(dp, -1, sizeof(dp));
  long long ans = 0;
  for (long long i = 0; i <= 9; i++) ans += Dp(0, i);
  long long k = s[0] - '0';
  bool flag = 0;
  for (long long i = 1; i < len; i++) {
    long long z = k + s[i] - '0';
    if (z % 2 == 0) {
      if (z / 2 != (s[i] - '0')) {
        flag = 1;
        break;
      }
    } else {
      char z1 = z / 2 + '0', z2 = z / 2 + 1 + '0';
      if (z1 != s[i] && z2 != s[i]) {
        flag = 1;
        break;
      }
    }
    k = s[i] - '0';
  }
  if (!flag) ans--;
  printf("%I64d\n", ans);
}
