#include <bits/stdc++.h>
using namespace std;
void getint(int &v) {
  char ch, fu = 0;
  for (ch = '*'; (ch < '0' || ch > '9') && ch != '-'; ch = getchar())
    ;
  if (ch == '-') fu = 1, ch = getchar();
  for (v = 0; ch >= '0' && ch <= '9'; ch = getchar()) v = v * 10 + ch - '0';
  if (fu) v = -v;
}
const int INF = 1e9 + 10;
char s[500010], TMP[2100010];
vector<int> v[2100000];
int n, q, ts, L[500010], tmp[5000010], R[500010], ans[100010][10], w[500010],
    bc[500010], l[500010], r[500010], f[2100010][10], fiap[500010], fil[500010],
    fir[500010];
int walk(int x, int d) {
  if (d == 1)
    return R[x];
  else
    return L[x];
}
void del(int x) {
  L[R[x]] = L[x];
  R[L[x]] = R[x];
}
void mov(int S) {
  int now = S;
  int d = 1;
  tmp[++ts] = S;
  TMP[ts] = s[now];
  fiap[S] = ts;
  bc[now] = now - 1;
  while (1) {
    int NOW;
    if (s[now] == '>' || s[now] == '<') {
      d = ((s[now] == '>') ? 1 : -1);
      NOW = walk(now, d);
      tmp[++ts] = NOW;
      TMP[ts] = s[NOW];
      if (s[NOW] == '<' || s[NOW] == '>') {
        del(now);
      }
      if (!fiap[NOW]) {
        fiap[NOW] = ts;
        bc[NOW] = L[NOW];
      }
      if (NOW > n) return;
      now = NOW;
    } else {
      NOW = walk(now, d);
      tmp[++ts] = NOW;
      TMP[ts] = s[NOW];
      --s[now];
      if (s[now] < '0') del(now);
      if (!fiap[NOW]) {
        fiap[NOW] = ts;
        bc[NOW] = L[NOW];
      }
      if (NOW > n) return;
      now = NOW;
    }
  }
}
int main() {
  cin >> n >> q;
  for (int i = 1; i <= n; ++i) s[i] = '>';
  scanf("%s", s + n + 1);
  n <<= 1;
  for (int i = 0; i <= n; ++i) R[i] = i + 1, L[i + 1] = i;
  mov(n / 2 + 1);
  tmp[0] = n / 2;
  for (int i = 1; i <= ts; ++i) {
    for (int j = 0; j <= 9; ++j) f[i][j] = f[i - 1][j] + (TMP[i] == j + '0');
  }
  for (int i = 1; i <= q; ++i)
    getint(l[i]), getint(r[i]), l[i] += n / 2, r[i] += n / 2,
        v[fiap[l[i]]].push_back(i);
  for (int i = 0; i <= n + 1; ++i) w[i] = INF;
  for (int i = 0; i <= n + 1; ++i)
    if (!fiap[i]) fiap[i] = INF;
  for (int i = ts; i >= 1; --i) {
    if (i < ts) {
      w[tmp[i + 1]] = i;
    }
    for (int j = 0; j <= ((int)v[i].size()) - 1; ++j) {
      int id = v[i][j];
      int when = w[bc[l[id]]];
      int ll = fiap[l[id]];
      int rr = min(when, fiap[r[id] + 1] - 1);
      for (int k = 0; k <= 9; ++k) ans[id][k] = f[rr][k] - f[ll - 1][k];
    }
  }
  for (int i = 1; i <= q; ++i) {
    for (int j = 0; j <= 9; ++j) printf("%d ", ans[i][j]);
    puts("");
  }
  return 0;
}
