#include <bits/stdc++.h>
#pragma GCC optimization("Ofast,unroll-loops")
#pragma GCC optimize("O3")
#pragma GCC target("avx2,popcnt")
using namespace std;
char ch[6][50001];
int main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n, m;
long long ans = 0;
cin >> n >> m;
/*
map<string, int> fr[64];
for(int i = 1; i <= n; i++){
string s, ss = "";
cin >> s;
int mask = 0;
for(int j = 0; j < m; j++){
if(s[j] != '?'){
mask ^= 1 << j;
ss += s[j];
}
}
for(int mask2 = 0; mask2 < 1 << m; mask2++){
string s2 = "";
for(int j = 0; j < m; j++){
if((mask2 & (1 << j)) && (mask & (1 << j)))
s2[j] = s[j];
else
s2[j]
}
ans += fr[mask2][s2];
}
fr[mask][ss]++;
}
*/
for(int i = 1; i <= n; i++){
for(int j = 0; j < m; j++){
cin >> ch[j][i];
}
for(int j = 1; j < i; j++){
bool ok = 0;
for(int z = 0; z < m && !ok; z++){
ok |= (ch[z][i] != '?' && ch[z][j] != '?' && ch[z][i] != ch[z][j]);
}
ans += 1 - ok;
}
}
cout << ans << '\n';
return 0;
}