#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
int N, Q;
char S[MAXN];
int pre[MAXN], suc[MAXN];
bool vis[MAXN];
void erase(int pos) { suc[pre[pos]] = suc[pos], pre[suc[pos]] = pre[pos]; }
int Sum[MAXN * 12][10], Pos[MAXN * 20], mn[MAXN * 12][21], mx[MAXN * 12][21],
    len;
int main() {
  scanf("%d%d%s", &N, &Q, S + 1);
  for (int i = 1; i <= N; ++i) pre[i] = i - 1, suc[i] = i + 1;
  pre[1] = suc[N] = 0;
  int pos, dir, visit = 1;
  while (1) {
    while (visit <= N && vis[visit]) ++visit;
    if (visit > N) break;
    pos = visit, dir = 1;
    while (pos) {
      Pos[++len] = pos;
      if (!vis[pos]) vis[pos] = 1;
      int nex;
      if (S[pos] == '>') {
        dir = 1, nex = suc[pos];
        if (S[suc[pos]] == '<' || S[suc[pos]] == '>') erase(pos);
      } else if (S[pos] == '<') {
        dir = -1, nex = pre[pos];
        if (S[pre[pos]] == '<' || S[pre[pos]] == '>') erase(pos);
      } else {
        nex = dir == 1 ? suc[pos] : pre[pos];
        Sum[len][S[pos] - '0'] = 1;
        if (S[pos] == '0')
          erase(pos);
        else
          --S[pos];
      }
      pos = nex;
    }
    Pos[++len] = 0;
  }
  for (int i = 1; i <= len; ++i) {
    for (int j = 0; j < 10; ++j) Sum[i][j] += Sum[i - 1][j];
  }
  for (int i = len; i >= 1; --i) {
    mx[i][0] = Pos[i], mn[i][0] = Pos[i];
    for (int j = 1; i + (1 << (j - 1)) <= len; ++j) {
      mn[i][j] = min(mn[i][j - 1], mn[i + (1 << (j - 1))][j - 1]);
      mx[i][j] = max(mx[i][j - 1], mx[i + (1 << (j - 1))][j - 1]);
    }
  }
  while (Q--) {
    int l, r, L, R;
    scanf("%d%d", &l, &r);
    L = 1;
    for (int i = 20; i >= 0; --i)
      if (L + (1 << i) <= len && mx[L][i] < l) {
        L += 1 << i;
      }
    R = L;
    for (int i = 20; i >= 0; --i)
      if (mn[R][i] >= l && mx[R][i] <= r) R += 1 << i;
    --R;
    for (int i = 0; i < 10; ++i) printf("%d ", Sum[R][i] - Sum[L - 1][i]);
    putchar('\n');
  }
  return 0;
}
