#include <bits/stdc++.h>
using namespace std;
typedef struct node {
  int flag[10];
  long long sum[10];
} node;
node d[100005 << 2];
long long a[100005];
long long temp[10];
void fenjie(int root, int x) {
  long long t = a[x];
  long long p = 1;
  while (t != 0) {
    int q = t % 10;
    t = t / 10;
    d[root].sum[q] += p;
    p *= 10;
  }
}
void up(int root) {
  for (int i = 0; i < 10; i++) d[root].sum[i] = 0;
  for (int i = 0; i < 10; i++)
    d[root].sum[d[root << 1].flag[i]] += d[root << 1].sum[i];
  for (int i = 0; i < 10; i++)
    d[root].sum[d[root << 1 | 1].flag[i]] += d[root << 1 | 1].sum[i];
}
void push(int root) {
  for (int i = 0; i < 10; i++) {
    d[root << 1].flag[i] = d[root].flag[d[root << 1].flag[i]];
    d[root << 1 | 1].flag[i] = d[root].flag[d[root << 1 | 1].flag[i]];
  }
  memset(temp, 0, sizeof(temp));
  for (int i = 0; i < 10; i++) temp[d[root].flag[i]] += d[root].sum[i];
  for (int i = 0; i < 10; i++) d[root].sum[i] += temp[i];
  for (int i = 0; i < 10; i++) d[root].flag[i] = i;
}
void in(int root) {
  for (int i = 0; i < 10; i++) d[root].flag[i] = i, d[root].sum[i] = 0;
}
void built(int root, int l, int r) {
  in(root);
  if (l == r) {
    fenjie(root, l);
    return;
  }
  int mid = (l + r) >> 1;
  built(root << 1, l, mid);
  built(root << 1 | 1, mid + 1, r);
  up(root);
}
void update(int root, int l, int r, int l1, int r1, int x, int y) {
  if (l1 <= l && r <= r1) {
    for (int i = 0; i < 10; i++) {
      if (d[root].flag[i] == x) {
        d[root].flag[i] = y;
      }
    }
    return;
  }
  push(root);
  int mid = (l + r) >> 1;
  if (mid >= l1) update(root << 1, l, mid, l1, r1, x, y);
  if (mid < r1) update(root << 1 | 1, mid + 1, r, l1, r1, x, y);
  up(root);
}
long long ans = 0;
void querty(int root, int l, int r, int l1, int r1) {
  if (l1 <= l && r <= r1) {
    for (int i = 0; i < 10; i++) ans += d[root].flag[i] * d[root].sum[i];
    return;
  }
  push(root);
  int mid = (l + r) >> 1;
  if (l1 <= mid) querty(root << 1, l, mid, l1, r1);
  if (r1 > mid) querty(root << 1 | 1, mid + 1, r, l1, r1);
  up(root);
}
int main() {
  ios::sync_with_stdio(false);
  int n, m;
  cin >> n >> m;
  for (int i = 1; i <= n; i++) cin >> a[i];
  int t, l, r, x, y;
  built(1, 1, n);
  for (int i = 1; i <= m; i++) {
    cin >> t;
    if (t == 1) {
      cin >> l >> r >> x >> y;
      if (x == y) continue;
      update(1, 1, n, l, r, x, y);
    } else {
      cin >> l >> r;
      ans = 0;
      querty(1, 1, n, l, r);
      cout << ans << endl;
    }
  }
  return 0;
}
