#include <bits/stdc++.h>
using namespace std;

#define eb emplace_back
#define pb push_back
#define INF 1LL<<62
#define FLT_INF pow(10.0, 16)

using ll = long long;
using vll = vector<ll>;
using ull = unsigned long long;
using int2 = pair<int, int>;
using int3 = tuple<ll, ll, ll>;

template <typename A> string to_string(const A& v);
string to_string(const string& s) { return '"'+ s + '"'; }
string to_string(const char *s) { return to_string((string)s); }
string to_string(bool b) { return (b ? "true" : "false"); }

template <typename A, typename B> string to_string(const pair<A, B>& p) {
  return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
}

template <typename A, typename B, typename C> string to_string(const tuple<A, B, C>& p) {
  return "(" + to_string(std::get<0>(p)) + ", " + to_string(std::get<1>(p)) +  ", " + to_string(std::get<2>(p)) + ")";
}

template <typename A> string to_string(const A& v) {
  bool first = true;
  string res = "{";
  for (const auto &x : v) {
    if (!first) {
      res += ", ";
    }
    first = false;
    res += to_string(x);
  }
  res += "}";
  return res;
}

template <typename T>
void sort(vector<T>& val) {
  sort(val.begin(), val.end());
}

template <typename T>
void sort_b(vector<T>& val) {
  sort(val.begin(), val.end(), greater<T>());
}

template <typename T>
T mul_mod(T a, T b, T mod) {
  T res = 0;
  a %= mod;
  while (b) {
    if (b & 1) {
      res = (res + a) % mod;
    }
    a = (2 * a) % mod;
    b >>= 1;
  }
  return res;
}

void debug_out() { cerr << endl; }

template <typename Head, typename... Tail> void debug_out(Head H, Tail... T) {
  cerr << " " << to_string(H);
  debug_out(T...);
}

#ifdef LOCAL
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)
#else
#define debug(...);
#endif

#define COMMON_MOD pow(10, 9) + 7
#define PI 3.14159265

// sort(a.begin(), a.end(), less<ll>()); greater<ll>()
// cout<<fixed<<setprecision(20)<<(s/kl)*2;
/* printf("%lld %lld \n", cur_n, m / 2 + 1);
*/

class mytask {
public:
  mytask() { }


  // ll count_mods(string s, int pos) {
  //   ll res = 0;
  //   if (pos == s.size()) {
  //       //debug(s);
  //      res = (stoi(s) % 13 == 5);
  //      return res;
  //   }
  //
  //   if (s[pos] == '?') {
  //     for (int i = 0; i < 10; i++) {
  //       string s_tmp = s;
  //
  //       s_tmp[pos] = '0' + i;
  //       //debug(s_tmp);
  //       res += count_mods(s_tmp, pos + 1);
  //     }
  //   } else {
  //     res += count_mods(s, pos + 1);
  //   }
  //   return res;
  // }

  int solve() {

    string s;
    cin >> s;


    vector<vll> dyn_mods(s.size(), vll(13, 0));
    if (s[0]=='?') {
      for (int i = 0; i < 10; i++) {
        dyn_mods[0][i] = 1;
      }
    } else {
      dyn_mods[0][s[0] - '0'] = 1;
    }


    ll common_mod = pow(10, 9) + 7;
    for (int i = 1; i < s.size(); i++) {
      if (s[i] == '?') {
        for (int j = 0; j < 13; j++) {
          for (int k = 0; k < 10; k++) {
            dyn_mods[i][(j*10 + k)%13] += dyn_mods[i-1][j];
            dyn_mods[i][(j*10 + k)%13] %= common_mod;
          }
        }
      } else {
        int k = s[i] - '0';
        for (int j = 0; j < 13; j++) {
          dyn_mods[i][(j*10 + k)%13] += dyn_mods[i-1][j];
          dyn_mods[i][(j*10 + k)%13] %= common_mod;
        }
      }
    }

    //debug(dyn_mods);

    cout << dyn_mods.back()[5];






    return 0;
  }
};


int main() {

  ios::sync_with_stdio(false);
  cin.tie(0);

  auto task = mytask();
  task.solve();

  cout << endl;

  return 0;
}


Measured memory_bytes: 13648