#include "bits/stdc++.h"
#define ff first
#define ss second
#define ll long long
using namespace std;
const int N = 2e3+3;
const int mod = 1e9+7;
int f[N],in[N];
int dp[N][N];
vector <int> a;
int n,k,m;
int gos(ll a,ll b){
return (a+b)%mod;
}
int kop(ll a,ll b){
return a*b%mod;
}
int pw(ll a,ll b){
if (!b)
return 1;
if (b&1)
return kop(a,pw(a,b-1));
else return pw(kop(a,a),b/2);
}
int bol(ll a,ll b){
return kop(a,pw(b,mod-2));
}
int C(ll n,ll k){
return bol(f[n],kop(f[k],f[n-k]));
}
int coz(int m,int k){
int &h = dp[m][k];
if (h == -1){
if (!m){
if (!k)
h = 1;
else h = 0;
}
else {
h = 0;
for (int i = 0;i <= a[m-1] && i*(i-1)/2 <= k;i++){
h = gos(h,kop(C(a[m-1],i),coz(m-1,k-i*(i-1)/2)));
}
}
}
return h;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
for (int i = 0;i < N;i++){
fill(dp[i],dp[i]+N,-1);
}
f[0] = 1;
for (int i = 1;i < N;i++){
f[i] = kop(f[i-1],i);
}
// in[N-1] = pw(f[N-1],mod-2);
// for (int i = N-2;i >= 0;i--){
// in[i] = (in[i+1]*(i+1))%mod;
// }
cin >> n >> k;
map <string,int> mp;
for (int i = 0;i < n;i++){
string s;
cin >> s;
sort(s.begin(),s.end());
mp[s]++;
}
m = 0;
for (auto i : mp){
a.push_back(i.ss);
m++;
}
// dp[0][0] = 1;
// for (int i = 1;i <= m;i++){
// for (int j = 0;j <= k;j++){
// for (int h = 0;h <= a[i-1];h++){
// if (h*(h-1)/2 > j)
// break;
// dp[i][j] = (dp[i][j] + C(a[i-1],h)*dp[i-1][j-h*(h-1)/2])%mod;
// }
// }
// }
cout << coz(m,k) << "\n";
}