1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#ifndef LOCAL
#pragma GCC optimize("O3,unroll-loops")
#endif
#include <bits/stdc++.h>
#define fi first
#define se second
#define pn printf("\n")
#define ssize(x) int(x.size())
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define bitcount(x) __builtin_popcount(x)
#define clz(x) __builtin_clz(x)
#define ctz(x) __builtin_ctz(x)
#define mp make_pair
//~ #define r(x) resize(x)
//~ #define rf(x, c) resize(x, c)
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<int, ll> pil;
typedef pair<ll, int> pli;
typedef pair<ll, ll> pll;
typedef double db;
typedef long double ldb;
#define V vector
int inf = 2e09; ll infll = 2e18; int mod = (1<<23)*119+1;
void answer(){
    int n, q; scanf("%d%d\n", &n, &q);
    V<char> t(n);
    for(int i = 0; i < n; ++i)
        t[i] = getchar();
    
    auto get_result = [&](){
        ll N = 1ll<<n;
        map<string, int> mp;
        string s;
        for(ll m = 1; m < N; ++m){
            s = "";
            for(int i = 0; i < n; ++i)
                if(m&(1ll<<i))
                    s += t[i];
            ++mp[s];
        }
        int result = 0;
        for(auto u : mp)
            result += (u.se > 1),
            result = result >= mod ? result-mod : result;
        return result;
    };
    printf("%d\n", get_result());
    for(++q; --q; ){
        int x; char c;
        scanf("%d %c", &x, &c);
        t[x-1] = c;
        printf("%d\n", get_result());
    }
}
int main(){
		int T = 1;
		// scanf("%d", &T);
		//~ ios_base::sync_with_stdio(0); cin.tie(0); cin >> T;
		for(++T; --T; ) answer();
		return 0;
}