#include <bits/stdc++.h>
void solve(std::string s, int n){
int CP = 0;
int DP = 1;
std::vector <int> ans(10, 0);
std::vector <bool> met(n, false);
while (1) {
if (s[CP] != '<' && s[CP]!='>') {
ans[s[CP]-'0']++;
if (s[CP] != '0') s[CP]--;
else met[CP] = true;
CP += DP;
while (CP>=0 && CP<n && met[CP]) CP += DP;
if (CP<0 || CP>=n) break;
}
else {
if (s[CP]=='>') DP = 1;
else DP = -1;
int pos = CP;
CP += DP;
while (CP>=0 && CP<n && met[CP]) CP += DP;
if (CP<0 || CP>=n) break;
if (s[CP]=='>' || s[CP]=='<') met[pos] = true;
}
}
for (int i = 0;i<10;i++)
std::cout << ans[i] << " ";
std::cout << "\n";
}
int main() {
int n, q;
std::cin >> n >> q;
std::string s;
std::cin >> s;
while (q--) {
int l, r;
std::cin >> l >> r;
solve(s.substr(l-1, r-l+1), r-l+1);
}
return 0;
}/*1690616271.7140307*/
97. Interleaving String | 543. Diameter of Binary Tree |
124. Binary Tree Maximum Path Sum | 1465. Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts |
501A - Contest | 160A- Twins |
752. Open the Lock | 1535A - Fair Playoff |
1538F - Interesting Function | 1920. Build Array from Permutation |
494. Target Sum | 797. All Paths From Source to Target |
1547B - Alphabetical Strings | 1550A - Find The Array |
118B - Present from Lena | 27A - Next Test |
785. Is Graph Bipartite | 90. Subsets II |
1560A - Dislike of Threes | 36. Valid Sudoku |
557. Reverse Words in a String III | 566. Reshape the Matrix |
167. Two Sum II - Input array is sorted | 387. First Unique Character in a String |
383. Ransom Note | 242. Valid Anagram |
141. Linked List Cycle | 21. Merge Two Sorted Lists |
203. Remove Linked List Elements | 733. Flood Fill |