#include <bits/stdc++.h>
using namespace std;
const int block_size = 320;
const long long mod = 1e9 + 7;
const long double eps = 1e-9;
const int inf = mod;
const double PI = atan(1) * 4;
template <typename T>
inline int sign(const T &a) {
  if (a < 0) return -1;
  if (a > 0) return 1;
  return 0;
}
template <typename T>
inline void in(T &x) {
  x = 0;
  T f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  x *= f;
}
long long twop(int x) { return 1LL << x; }
template <typename A, typename B>
inline void in(A &x, B &y) {
  in(x);
  in(y);
}
template <typename A, typename B, typename C>
inline void in(A &x, B &y, C &z) {
  in(x);
  in(y);
  in(z);
}
template <typename A, typename B, typename C, typename D>
inline void in(A &x, B &y, C &z, D &xx) {
  in(x);
  in(y);
  in(z);
  in(xx);
}
template <class T>
void upd(T &a, T b) {
  a = max(a, b);
}
long long fast(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) {
      b--;
      ans = ans * a;
    } else {
      a = a * a;
      b /= 2;
    }
  }
  return ans;
}
long long fast(long long a, long long b, long long mod) {
  long long ans = 1;
  while (b) {
    if (b & 1) {
      b--;
      ans = ans * a % mod;
    } else {
      a = a * a % mod;
      b /= 2;
    }
  }
  return ans;
}
long long rev(long long a, long long mod) { return fast(a, mod - 2, mod); }
long long val[10];
long long len[10];
void init() {
  for (long long i = 0; i < 10; i++) val[i] = i, len[i] = 1;
}
string s;
long long uni = mod - 1;
int main() {
  cin >> s;
  int n;
  cin >> n;
  vector<pair<char, string>> v;
  for (long long i = 0; i < n; i++) {
    string line;
    cin >> line;
    v.push_back(make_pair(line.substr(0, 1)[0], line.substr(3)));
  }
  for (long long i = 0; i < 10; i++) len[i] = 1, val[i] = i;
  reverse(v.begin(), v.end());
  for (auto i : v) {
    reverse(i.second.begin(), i.second.end());
    long long sv = 0, sl = 0;
    long long cur = 1;
    for (auto d : i.second) {
      sv += val[d - '0'] * cur % mod;
      cur = (cur * fast(10, len[d - '0'], mod)) % mod;
      sl += len[d - '0'];
      sl %= mod - 1;
    }
    sv %= mod;
    val[i.first - '0'] = sv;
    len[i.first - '0'] = sl;
  }
  reverse(s.begin(), s.end());
  long long ans = 0;
  long long sv = 0, sl = 0;
  long long cur = 1;
  for (auto d : s) {
    sv += val[d - '0'] * cur % mod;
    cur = (cur * fast(10, len[d - '0'], mod)) % mod;
    sl += len[d - '0'];
    sl %= mod - 1;
    sv %= mod;
  }
  cout << sv << endl;
  return 0;
}
