#include <functional>
#include <algorithm>
#include <iostream>
#include <numeric>
#include <stdio.h>
#include <cstring>
#include <vector>
#include <cctype>
#include <math.h>
#include <time.h>
#include <queue>
#include <stack>
#include <set>
#include <map>

using namespace std;

#define all(p) (p).begin(), (p).end()
#define fi first
#define se second

#define TASKNAME ""
//#define DEBUG

typedef long long ll;

const int N = 111111;
const int INF = int(1e9), mod = INF + 7;

string s;
vector <int> f[26];
int cnt[26], q[5];

void solve(int tt) {

    cin >> s;
    int n = s.length();

    for (int i = 0; i < 26; ++i)
        f[i].assign(n, 0);

    for (int let = 0; let < 26; ++let) {

        for (int i = 0; i < n; ++i) {

            f[let][i] = (s[i] - 'A' == let);
            if (i > 0) f[let][i] += f[let][i - 1];
        }

    }

    cin >> q[tt];
    while(q[tt] --> 0) {

        char type; int l, r;
        cin >> type >> l >> r;

        if (type == 's') {

            for (int i = l; i <= r; ++i)
                    cnt[s[i] - 'A']++;

            int it = 0, it1 = l;

            while(it < 26) {

                if (cnt[it] == 0) it++;
                else {
                    s[it1] = it + 'A';
                    --cnt[it];
                    ++it1;
                }

            }

            for (int let = 0; let < 26; ++let) {

                for (int i = l; i <= r; ++i) {

                    f[let][i] = (s[i] - 'A' == let);
                    if (i > 0) f[let][i] += f[let][i - 1];
                }

            }

        } else {

            for (int let = 0; let < 26; ++let) {

                printf("%d%c", f[let][r] - (l > 0 ? f[let][l - 1] : 0), let == 25 ? '\n' : ' ');

            }

        }

    }
}

int main() {

    int t;
    cin >> t;

    for (int tt = 1; tt <= t; ++tt) {

        printf("Case #%d:\n", tt);
        solve(tt);

    }


    return 0;
}