#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]; allsort(s); ll ans = 0; rep(i, N) { ll tb = 1,ta = 1; if (i != 0) { rep(j, min(s[i].size(), s[i - 1].size())){ if (s[i][j] != s[i - 1][j])break; tb++; } } if (i != N - 1) { rep(j, min(s[i].size(), s[i + 1].size())) { if (s[i][j] != s[i + 1][j])break; ta++; } } ans += max(ta, tb); } cout << ans << endl; ll t = 1; rep(i, N - 1) { rep(j, min(s[i].size(), s[i + 1].size())) { if (s[i][j] != s[i + 1][j])break; t++; } ll p = 1; int n = N; rep(j, i + 1) { p *= n; p %= mod; n--; } if (i != 0) { cout << t*p%mod << endl; } if (i == N - 2)cout << (t*p%mod + p) % mod << endl; t++; } return 0; }