#include typedef long long ll; using namespace std; struct Node{ vector next; ll count = 0; Node () :next(26) {} }; int main(){ vector nodes; Node start; nodes.emplace_back(start); ll n, k; cin >> n >> k; ll cur = 0; ll ans = 0; ll startP = 0; vector arr(n); for(ll i = 0; i < n; i++){ string s; cin >> s; arr[i] = s; } for(ll i = 0; i < n; i++){ string s = arr[i]; ll curNode = 0; for(ll j = 0; j < s.length(); j++){ if(nodes[curNode].next[s[j] - 'a'] == 0){ Node newNode; newNode.count = 1; nodes[curNode].next[s[j] - 'a'] = nodes.size(); nodes.emplace_back(newNode); curNode = nodes.size() - 1; }else{ ll next = nodes[curNode].next[s[j] - 'a']; cur -= (nodes[next].count * (nodes[next].count - 1)) / 2; nodes[next].count++; cur += (nodes[next].count * (nodes[next].count - 1)) / 2; curNode = next; } } if(cur >= k) { while(cur >= k){ ans += n - i; string s = arr[startP]; ll curNode = 0; for(ll j = 0; j < s.length(); j++){ ll next = nodes[curNode].next[s[j] - 'a']; cur -= (nodes[next].count * (nodes[next].count - 1)) / 2; nodes[next].count--; cur += (nodes[next].count * (nodes[next].count - 1)) / 2; curNode = next; } startP++; } } } cout << ans << endl; return 0; }