#include <bits/stdc++.h>
using namespace std;
const int MaxN = 100000;
template <class T>
inline void tension(T &a, const T &b) {
  if (b < a) a = b;
}
inline int getint() {
  char c;
  while (c = getchar(), !isdigit(c))
    ;
  int res = c - '0';
  while (c = getchar(), isdigit(c)) res = res * 10 + c - '0';
  return res;
}
inline bool isdir(char c) { return c == '<' || c == '>'; }
int main() {
  int n, q;
  static char orig[1 + MaxN + 1];
  static char program[1 + MaxN + 1];
  cin >> n >> q;
  program[0] = 'X';
  scanf("%s", program + 1);
  strcpy(orig, program);
  static int book[MaxN + 1];
  static int first[MaxN + 1][10];
  static int second[MaxN + 1][10];
  fill(book + 1, book + n + 1, 0);
  int start;
  int number[10];
  fill(number, number + 10, 0);
  while (start = find(book + 1, book + n + 1, 0) - book, start <= n) {
    int cp = start;
    int dp = 1;
    while (start <= cp && cp <= n) {
      if (book[cp] == 0) {
        copy(number, number + 10, first[cp]);
        book[cp]++;
      }
      if (isdigit(program[cp])) {
        number[program[cp] - '0']++;
        if (program[cp] == '0')
          program[cp] = 'X';
        else
          program[cp]--;
      } else if (isdir(program[cp]))
        dp = program[cp] == '<' ? -1 : 1;
      int np;
      for (np = cp + dp; start <= np && np <= n && program[np] == 'X';
           np += dp) {
        if (book[np] == 0 && dp == 1) {
          copy(number, number + 10, first[np]);
          book[np]++;
        } else if (book[np] == 1 && dp == -1) {
          copy(number, number + 10, second[np]);
          book[np]++;
        }
      }
      if (isdir(program[cp]) && start <= np && np <= n && isdir(program[np]))
        program[cp] = 'X';
      if (book[cp] == 1 && dp == -1) {
        copy(number, number + 10, second[cp]);
        book[cp]++;
      }
      cp = np;
    }
  }
  copy(number, number + 10, first[n + 1]);
  while (q--) {
    int l = getint(), r = getint();
    int leave[10];
    copy(first[r + 1], first[r + 1] + 10, leave);
    if (book[l] == 2)
      for (int i = 0; i < 10; i++) tension(leave[i], second[l][i]);
    for (int i = 0; i < 10; i++) printf("%d ", leave[i] - first[l][i]);
    printf("\n");
  }
  return 0;
}
