rt 求助 qwq
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = (1<<20)+10;
const int mod = 1e9+123;
int n, m, p = 131, cnt, base = 1, h[N], c[20];
char s[N], str[20];
bool vis[20];
set<int> st, beg;
void dfs(int i) {
if(i == 9) {
int ans = 0;
for(int j = 1; j <= 8; j++)
ans = (ans * p + (int)(str[c[j]])) % mod;
if(st.find(ans) != st.end()) return;
st.insert(ans);
if(beg.find(ans) != beg.end()) ++cnt;
return;
}
for(int j = 1; j <= 8; j++) {
if(!vis[j]) {
vis[j] = 1;
c[j] = i;
dfs(i + 1);
vis[j] = 0;
}
}
}
signed main() {
scanf("%s", s + 1);
m = strlen(s + 1);
for(int i = 1; i <= m; i++)
h[i] = (h[i-1] * p + (int)(s[i])) % mod;
for(int i = 1; i <= 8; i++) {
base *= p;
base %= mod;
}
for(int i = 1; i <= m - 7; i++)
beg.insert((h[i+7] - ((h[i-1] * base) % mod) + mod) % mod);
scanf("%lld", &n);
while(n--) {
st.clear();
memset(vis, 0, sizeof(vis));
scanf("%s", str + 1);
dfs(1);
}
printf("%lld\n", cnt);
return 0;
}