1 #include<cstdio>
2 #include<vector>
3 #include<algorithm>
4 #include<iostream>
5 #include<cstring>
6 using namespace std;
7 typedef long long LL;
8 int mp[20][30];
9 int now[30];
10 char s[100010];
11 int n, ans;
12 void dfs(int root, int sum)
13 {
14 if (root > n)
15 {
16 bool flag = 1;
17 for (int i = 'A';i <= 'Z';i++)
18 {
19 if (now[i - 'A'] % 3 != 0) { flag = 0;break; }
20 }
21 if (flag) ans = max(ans, sum);
22 return;
23 }
24 for (int i = 'A';i <= 'Z';i++)
25 {
26 now[i - 'A'] = (now[i - 'A'] + mp[root][i - 'A']);//加上改组
27 }
28 dfs(root + 1, sum + 1);
29 for (int i = 'A';i <= 'Z';i++)
30 {
31 now[i - 'A'] = (now[i - 'A'] - mp[root][i - 'A']);//因为前面加上了,所以如果改组不要就减去。
32 }
33 //通过上述方法就可以dfs出每个字符串要和不要的情况
34 dfs(root + 1, sum);
35 }
36 int main()
37 {
38
39 cin >> n;
40 for (int i = 1;i <=n;i++)
41 {
42 cin >> s;
43 int len = strlen(s);
44 for (int j = 0;j < len;j++)
45 {
46 mp[i][s[j] - 'A']++;
47 }
48 }
49 dfs(1, 0);
50 cout << ans;
51 return 0;
52 }