#include #include #include //#pragma GCC optimize("Ofast") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma,tune=native") using namespace std; using namespace __gnu_pbds; template using ordered_set = tree, rb_tree_tag, tree_order_statistics_node_update>; //~ while (clock()<=69*CLOCKS_PER_SEC) #define ll long long #define ld long double #define pi pair #define pd pair #define ft first #define sd second #define st first #define nd second #define mp make_pair #define pb push_back #define eb emplace_back #define FOR(i,a,b) for(int i=(a); i<=(b);i++) #define F(i,a,b) FOR(i,(a),(b)-1) #define REV(i,a,b) for(int i=(a); i>=(b);i--) #define VI vector #define VPI vector #define VPD vector #define PI 3.14159265 #define all(x) (x).begin(), (x).end() #define sz(a) (int)((a).size()) #define int long long template void _dbg(const char *sdbg, TH h){cerr< void _dbg(const char *sdbg, TH h, TA... a) { while(*sdbg!=',')cerr<<*sdbg++;cerr<<"="<> n; string s; cin >> s; string s1 = s; licz_sito(); VI pierwsze; pierwsze.eb(1); F(i, 1, n) { if (pierwsza[i] && n % i == 0) pierwsze.eb(i); } int k; cin >> k; map let; pi najdrozsza(-1, -1); F(i, 0, k) { char a; int v; cin >> a >> v; let[a] = v; najdrozsza = max(najdrozsza, pi{v, a}); } VI dzielniki; FOR(i, 1, n) { if (n % i == 0) { dzielniki.eb(i); } } int res = 0; for (int p : pierwsze) { bool znalazlo = false; F(i, 0, p) { bool moze = true; for (int j = i; j < n; j += p) { moze = moze && (s[j] == '?' || s[j] == s[i]); } if (moze) { znalazlo = true; break; } } if (znalazlo) { string s2 = s1; F(i, 0, p) { for(int j = i; j < n; j += p) { if (s2[j] == '?') { s2[j] = s2[i]; } } } F(i, 0, n) { if (s2[i] == '?') s2[i] = (char)najdrozsza.sd; } int res2 = 0; for (int d : dzielniki) { F(i, 0, d) { bool moze = true; for (int j = i; j < n; j += d) { moze = moze && s2[j] == s2[i]; } if (moze) res2 += let[s2[i]] * (n / d); } } res = max(res, res2); } } cout << res << "\n"; } int32_t main() { // freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cerr.tie(0); cout<>test; F(_test, 0, test){ //cout<<"Case #"<<_test + 1<<": "; solve(); // if(_test == 1) // return 0; } return 0; } /* 3 B B.. ... ... 3 B BBB BBB BBB 3 K KKK KKK KKK */