#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <bits/stdc++.h>
using namespace std;
using namespace __gnu_pbds;
using namespace __gnu_cxx;
/* clang-format off */
/* TYPES */
#define ll long long
#define ld long double
#define pii pair<int, int>
#define pll pair<long long, long long>
#define vi vector<int>
#define vll vector<long long>
#define vpii vector<pair<int, int>>
#define vpii vector<pair<int, int>>
#define vvpii vector<vector<pair<int, int>>>
#define vpll vector<pair<long long, long long>>
#define vvpll vector<vector<pair<long long, long long>>>
#define vvi vector<vector<int>>
#define vvll vector<vector<long long>>
#define mii map<int, int>
#define si set<int>
#define sc set<char>
#define vd vector<double>
#define vvd vector<vector<double>>
/* FUNCTIONS */
#define feach(el, v) for(auto &el: v)
#define rep(i, n) for(int i=0;i<n;i++)
#define reprv(i, n) for(int i=n-1;i>=0;i--)
#define reps(i, s, e) for(int i=s;i<e;i++)
#define reprve(i, e, s) for(int i=e-1;i>=s;i--)
#define repe(x, y) for (auto &x: y)
#define repe2(x, a, y) for (auto &[x,a]: y)
#define pb push_back
#define eb emplace_back
#define IO ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
#pragma GCC target("popcnt")
#define vct vector
int cntLeq(vll &v, ll x) { return std::upper_bound(v.begin(), v.end(), x) - v.begin(); }
int cntLess(vll &v, ll x) { return std::lower_bound(v.begin(), v.end(), x) - v.begin(); }
int cntGreater(vll &v, ll x) { return v.end() - std::upper_bound(v.begin(), v.end(), x); }
int cntGeq(vll &v, ll x) { return v.end() - std::lower_bound(v.begin(), v.end(), x); }
vll buildPref(vll &v) {
int n = v.size(); vll pref(n);
rep(i, n) pref[i] = v[i] + (i ? pref[i - 1] : 0);
return pref;
}
ll getPrefSum(vll &pref, int l, int r) {
if (l > r) return 0;
return pref[r] - (l ? pref[l - 1] : 0);
}
vi dx = {0,0,-1,1}, dy = {-1,1,0,0};
int popcnt(int i) { return __builtin_popcountll(i); }
int popcnt(long long i) { return __builtin_popcountll(i); }
template<typename T>inline void chmax(T &a,T b){a=max(a,b);}
template<typename T>inline void chmin(T &a,T b){a=min(a,b);}
void vectorCoordinateCompression(vll &v) {
std::sort(v.begin(), v.end());
v.erase(std::unique(v.begin(), v.end()), v.end());
}
int getVectorCompressed(ll val, vll &v) { return lower_bound(v.begin(), v.end(), val) - v.begin(); }
bool outOfGrid(int x, int y, int n, int m) { return x < 0 || x >= n || y < 0 || y >= m; }
//////////////////////////////////////////////////////////////////////////
#define int long long int
vi zeta(vi f, int n) {
rep(i, n) rep(mask, (1 << n)) if ((mask & (1 << i))) f[mask] += f[mask ^ (1 << i)];
return f;
}
int MAXPW = 10, MAXV = (1 << 10);
int getMask(string &s) {
int ans = 0;
repe(ch, s) ans |= (1 << (ch - 'a'));
return ans;
}
int solution(vector<string> &s, int k) {
vi masks(MAXV);
repe(str, s) masks[getMask(str)]++;
vi sos = zeta(masks, MAXPW);
int ans = 0;
rep(i, MAXV) if (popcnt(i) <= k) ans = max(ans, sos[i]);
return ans;
}
signed main() {
IO;
vector<string> s1 = {"abc", "abb", "cb", "a", "bbb"};
cout << solution(s1, 2) << endl;
vector<string> s2 = {"adf", "jjbh", "jcgj", "eijj", "adf"};
cout << solution(s2, 3) << endl;
vector<string> s3 = {"abcd", "efgh"};
cout << solution(s3, 3) << endl;
vector<string> s4 = {"bd", "edf", "fde", "dge", "abcd"};
cout << solution(s4, 4) << endl;
}
I2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKdXNpbmcgbmFtZXNwYWNlIF9fZ251X2N4eDsKCi8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KCi8qIFRZUEVTICAqLwojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgcGlpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgcGxsIHBhaXI8bG9uZyBsb25nLCBsb25nIGxvbmc+CiNkZWZpbmUgdmkgdmVjdG9yPGludD4KI2RlZmluZSB2bGwgdmVjdG9yPGxvbmcgbG9uZz4KI2RlZmluZSB2cGlpIHZlY3RvcjxwYWlyPGludCwgaW50Pj4KI2RlZmluZSB2cGlpIHZlY3RvcjxwYWlyPGludCwgaW50Pj4KI2RlZmluZSB2dnBpaSB2ZWN0b3I8dmVjdG9yPHBhaXI8aW50LCBpbnQ+Pj4KI2RlZmluZSB2cGxsIHZlY3RvcjxwYWlyPGxvbmcgbG9uZywgbG9uZyBsb25nPj4KI2RlZmluZSB2dnBsbCB2ZWN0b3I8dmVjdG9yPHBhaXI8bG9uZyBsb25nLCBsb25nIGxvbmc+Pj4KI2RlZmluZSB2dmkgdmVjdG9yPHZlY3RvcjxpbnQ+PgojZGVmaW5lIHZ2bGwgdmVjdG9yPHZlY3Rvcjxsb25nIGxvbmc+PgojZGVmaW5lIG1paSBtYXA8aW50LCBpbnQ+CiNkZWZpbmUgc2kgc2V0PGludD4KI2RlZmluZSBzYyBzZXQ8Y2hhcj4KI2RlZmluZSB2ZCB2ZWN0b3I8ZG91YmxlPgojZGVmaW5lIHZ2ZCB2ZWN0b3I8dmVjdG9yPGRvdWJsZT4+CgoKLyogRlVOQ1RJT05TICovCiNkZWZpbmUgZmVhY2goZWwsIHYpIGZvcihhdXRvICZlbDogdikKI2RlZmluZSByZXAoaSwgbikgZm9yKGludCBpPTA7aTxuO2krKykKI2RlZmluZSByZXBydihpLCBuKSBmb3IoaW50IGk9bi0xO2k+PTA7aS0tKQojZGVmaW5lIHJlcHMoaSwgcywgZSkgZm9yKGludCBpPXM7aTxlO2krKykKI2RlZmluZSByZXBydmUoaSwgZSwgcykgZm9yKGludCBpPWUtMTtpPj1zO2ktLSkKI2RlZmluZSByZXBlKHgsIHkpIGZvciAoYXV0byAmeDogeSkKI2RlZmluZSByZXBlMih4LCBhLCB5KSBmb3IgKGF1dG8gJlt4LGFdOiB5KQoKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBlYiBlbXBsYWNlX2JhY2sKCgoKI2RlZmluZSBJTyBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZShOVUxMKTsgY291dC50aWUoTlVMTCkKI3ByYWdtYSBHQ0MgdGFyZ2V0KCJwb3BjbnQiKQojZGVmaW5lIHZjdCB2ZWN0b3IKCmludCBjbnRMZXEodmxsICZ2LCBsbCB4KSB7IHJldHVybiBzdGQ6OnVwcGVyX2JvdW5kKHYuYmVnaW4oKSwgdi5lbmQoKSwgeCkgLSB2LmJlZ2luKCk7IH0KaW50IGNudExlc3ModmxsICZ2LCBsbCB4KSB7IHJldHVybiBzdGQ6Omxvd2VyX2JvdW5kKHYuYmVnaW4oKSwgdi5lbmQoKSwgeCkgLSB2LmJlZ2luKCk7IH0KaW50IGNudEdyZWF0ZXIodmxsICZ2LCBsbCB4KSB7IHJldHVybiB2LmVuZCgpIC0gc3RkOjp1cHBlcl9ib3VuZCh2LmJlZ2luKCksIHYuZW5kKCksIHgpOyB9CmludCBjbnRHZXEodmxsICZ2LCBsbCB4KSB7IHJldHVybiB2LmVuZCgpIC0gc3RkOjpsb3dlcl9ib3VuZCh2LmJlZ2luKCksIHYuZW5kKCksIHgpOyB9Cgp2bGwgYnVpbGRQcmVmKHZsbCAmdikgewogICAgaW50IG4gPSB2LnNpemUoKTsgdmxsIHByZWYobik7CiAgICByZXAoaSwgbikgcHJlZltpXSA9IHZbaV0gKyAoaSA/IHByZWZbaSAtIDFdIDogMCk7CiAgICByZXR1cm4gcHJlZjsKfQpsbCBnZXRQcmVmU3VtKHZsbCAmcHJlZiwgaW50IGwsIGludCByKSB7CiAgICBpZiAobCA+IHIpIHJldHVybiAwOwogICAgcmV0dXJuIHByZWZbcl0gLSAobCA/IHByZWZbbCAtIDFdIDogMCk7Cn0KCnZpIGR4ID0gezAsMCwtMSwxfSwgZHkgPSB7LTEsMSwwLDB9OwoKaW50IHBvcGNudChpbnQgaSkgeyByZXR1cm4gX19idWlsdGluX3BvcGNvdW50bGwoaSk7IH0KaW50IHBvcGNudChsb25nIGxvbmcgaSkgeyByZXR1cm4gX19idWlsdGluX3BvcGNvdW50bGwoaSk7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+aW5saW5lIHZvaWQgY2htYXgoVCAmYSxUIGIpe2E9bWF4KGEsYik7fQp0ZW1wbGF0ZTx0eXBlbmFtZSBUPmlubGluZSB2b2lkIGNobWluKFQgJmEsVCBiKXthPW1pbihhLGIpO30KCnZvaWQgdmVjdG9yQ29vcmRpbmF0ZUNvbXByZXNzaW9uKHZsbCAmdikgewogICAgc3RkOjpzb3J0KHYuYmVnaW4oKSwgdi5lbmQoKSk7CiAgICB2LmVyYXNlKHN0ZDo6dW5pcXVlKHYuYmVnaW4oKSwgdi5lbmQoKSksIHYuZW5kKCkpOwp9CgppbnQgZ2V0VmVjdG9yQ29tcHJlc3NlZChsbCB2YWwsIHZsbCAmdikgeyByZXR1cm4gbG93ZXJfYm91bmQodi5iZWdpbigpLCB2LmVuZCgpLCB2YWwpIC0gdi5iZWdpbigpOyB9Cgpib29sIG91dE9mR3JpZChpbnQgeCwgaW50IHksIGludCBuLCBpbnQgbSkgeyByZXR1cm4geCA8IDAgfHwgeCA+PSBuIHx8IHkgPCAwIHx8IHkgPj0gbTsgfQoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KI2RlZmluZSBpbnQgbG9uZyBsb25nIGludAoKdmkgemV0YSh2aSBmLCBpbnQgbikgewogICAgcmVwKGksIG4pIHJlcChtYXNrLCAoMSA8PCBuKSkgaWYgKChtYXNrICYgKDEgPDwgaSkpKSBmW21hc2tdICs9IGZbbWFzayBeICgxIDw8IGkpXTsKICAgIHJldHVybiBmOwp9CgppbnQgTUFYUFcgPSAxMCwgTUFYViA9ICgxIDw8IDEwKTsKCmludCBnZXRNYXNrKHN0cmluZyAmcykgewogICAgaW50IGFucyA9IDA7CiAgICByZXBlKGNoLCBzKSBhbnMgfD0gKDEgPDwgKGNoIC0gJ2EnKSk7CiAgICByZXR1cm4gYW5zOwp9CgppbnQgc29sdXRpb24odmVjdG9yPHN0cmluZz4gJnMsIGludCBrKSB7CiAgICB2aSBtYXNrcyhNQVhWKTsKICAgIHJlcGUoc3RyLCBzKSBtYXNrc1tnZXRNYXNrKHN0cildKys7CgogICAgdmkgc29zID0gemV0YShtYXNrcywgTUFYUFcpOwoKICAgIGludCBhbnMgPSAwOwogICAgcmVwKGksIE1BWFYpIGlmIChwb3BjbnQoaSkgPD0gaykgYW5zID0gbWF4KGFucywgc29zW2ldKTsKICAgIHJldHVybiBhbnM7Cn0KCnNpZ25lZCBtYWluKCkgewogICAgSU87CgogICAgdmVjdG9yPHN0cmluZz4gczEgPSB7ImFiYyIsICJhYmIiLCAiY2IiLCAiYSIsICJiYmIifTsKICAgIGNvdXQgPDwgc29sdXRpb24oczEsIDIpIDw8IGVuZGw7CgogICAgdmVjdG9yPHN0cmluZz4gczIgPSB7ImFkZiIsICJqamJoIiwgImpjZ2oiLCAiZWlqaiIsICJhZGYifTsKICAgIGNvdXQgPDwgc29sdXRpb24oczIsIDMpIDw8IGVuZGw7CgogICAgdmVjdG9yPHN0cmluZz4gczMgPSB7ImFiY2QiLCAiZWZnaCJ9OwogICAgY291dCA8PCBzb2x1dGlvbihzMywgMykgPDwgZW5kbDsKCiAgICB2ZWN0b3I8c3RyaW5nPiBzNCA9IHsiYmQiLCAiZWRmIiwgImZkZSIsICJkZ2UiLCAiYWJjZCJ9OwogICAgY291dCA8PCBzb2x1dGlvbihzNCwgNCkgPDwgZW5kbDsKfQ==