#include <bits/stdc++.h>
using namespace std;
const long long N = 1e5 + 5, LG = 10;
long long D[N << 2][LG], LZ[N << 2][LG], RT[LG], A[N], n, q, tp;
void build(long long id = 1, long long l = 0, long long r = n) {
  iota(LZ[id], LZ[id] + LG, 0);
  if (r - l < 2) {
    long long zrb = 1, a = A[l];
    while (a) {
      D[id][a % 10] += zrb;
      zrb *= 10;
      a /= 10;
    }
    return;
  }
  long long mid = ((l + r) >> 1);
  build((id << 1), l, mid);
  build((id << 1 | 1), mid, r);
  for (long long i = 0; i < LG; i++)
    D[id][i] = D[(id << 1)][i] + D[(id << 1 | 1)][i];
}
void Do(long long id, long long CNV[LG]) {
  long long AH[LG];
  memcpy(AH, D[id], sizeof(AH));
  for (long long i = 0; i < LG; i++) {
    LZ[id][i] = CNV[LZ[id][i]];
  }
  memset(D[id], 0, sizeof(D[id]));
  for (long long i = 0; i < LG; i++) {
    D[id][CNV[i]] += AH[i];
  }
}
void shift(long long id, long long l, long long r) {
  Do((id << 1), LZ[id]);
  Do((id << 1 | 1), LZ[id]);
  iota(LZ[id], LZ[id] + LG, 0);
}
void add(long long s, long long e, long long x, long long y, long long id = 1,
         long long l = 0, long long r = n) {
  if (l >= e || r <= s) return;
  if (l >= s && r <= e) {
    long long AH[LG];
    iota(AH, AH + LG, 0);
    AH[x] = y;
    Do(id, AH);
    return;
  }
  long long mid = ((l + r) >> 1);
  shift(id, l, r);
  add(s, e, x, y, (id << 1), l, mid);
  add(s, e, x, y, (id << 1 | 1), mid, r);
  for (long long i = 0; i < LG; i++)
    D[id][i] = D[(id << 1)][i] + D[(id << 1 | 1)][i];
}
void get(long long s, long long e, long long id = 1, long long l = 0,
         long long r = n) {
  if (l >= e || r <= s) return;
  if (l >= s && r <= e) {
    for (long long i = 0; i < LG; i++) RT[i] += D[id][i];
    return;
  }
  long long mid = ((l + r) >> 1);
  shift(id, l, r);
  get(s, e, (id << 1), l, mid);
  get(s, e, (id << 1 | 1), mid, r);
}
int32_t main() {
  scanf("%lld %lld", &n, &q);
  for (long long i = 0; i < n; i++) scanf("%lld", &A[i]);
  build();
  for (long long Q = 0; Q < q; Q++) {
    scanf("%lld", &tp);
    if (tp == 1) {
      long long l, r, x, y;
      scanf("%lld %lld %lld %lld", &l, &r, &x, &y);
      l--;
      r--;
      add(l, r + 1, x, y);
      continue;
    }
    long long l, r;
    scanf("%lld %lld", &l, &r);
    l--;
    r--;
    long long rt = 0;
    memset(RT, 0, sizeof(RT));
    get(l, r + 1);
    for (long long i = 0; i < LG; i++) rt += RT[i] * i;
    printf("%lld\n", rt);
  }
}
