#include using namespace std; using ll = long long; using ld = long double; #define rep(i,n) for(int i=0;i<(int)(n);i++) #define reps(i,s,n) for(int i=(int)(s);i<(int)(n);i++) #define allsort(v) sort(v.begin(),v.end()) #define allsortg(v)sort(v.begin(),v.end(),greater()); const ll mod = 1e9 + 7; const int INF = 1e9; int main() { cin.sync_with_stdio(false); int N; cin >> N; vectors(N); rep(i, N)cin >> s[i]; vector>t(N); rep(i, N) { rep(j, N) { if (i == j) { t[i].push_back(1); continue; } rep(k, min(s[i].size(), s[j].size())) { if (s[i][k] != s[j][k]) { t[i].push_back(k + 1); break; } if (k == min(s[i].size(), s[j].size()) - 1)t[i].push_back(k + 2); } } allsortg(t[i]); } ll ans = 0; rep(i, N) { if (i != N - 1) { rep(j, N) { rep(k, i + 1) { ans += t[j][k] * (i + 1 - k); ans %= mod; } } } else { int x = 1; reps(j,1, N+1) { x *= j; x %= mod; } ans += x; } cout << ans << endl; } return 0; }