#include <bits/stdc++.h>
using namespace std;
const int N = 1000005;
using ll = long long;
struct Cmp {
  int m, d[N], ds[N], dt[N], nd[N], nds[N], ndt[N];
  void proc(int d[], int n, int nd[]) {
    for (int i = 0; i < n; i++) nd[i] = n;
    for (int i = n - 1; i >= 0; --i) {
      if (i < n - 1) nd[i] = nd[i + 1];
      if (d[i]) nd[i] = i;
    }
  }
  void init(const string &s, const string &t) {
    m = s.size();
    for (int i = 0; i < m; i++) d[i] = s[i] - t[i];
    for (int i = 0; i < m - 1; i++) ds[i] = s[i + 1] - t[i];
    for (int i = 0; i < m - 1; i++) dt[i] = s[i] - t[i + 1];
    proc(d, m, nd);
    proc(ds, m - 1, nds);
    proc(dt, m - 1, ndt);
  }
  inline int sgn(int x) { return x < 0 ? -1 : 1; }
  int calc(int i, int j) {
    int x = min(i, j);
    if (nd[0] < x) return sgn(d[nd[0]]);
    if (i == j) {
      if (i + 1 == m || nd[i + 1] == m) return 0;
      return sgn(d[nd[i + 1]]);
    }
    if (i < j) {
      if (nds[i] < j) return sgn(ds[nds[i]]);
      if (j + 1 == m || nd[j + 1] == m) return 0;
      return sgn(d[nd[j + 1]]);
    }
    if (ndt[j] < i) return sgn(dt[ndt[j]]);
    if (i + 1 == m || nd[i + 1] == m) return 0;
    return sgn(d[nd[i + 1]]);
  }
} cmp[4];
const int P = 1000000007;
int main() {
  ios::sync_with_stdio(false);
  int n;
  cin >> n;
  string s = "#";
  vector<int> ds = {1};
  for (int i = 0; i < n; i++) {
    string t;
    cin >> t;
    t.push_back('#');
    vector<int> dt(t.size());
    while (s.size() < t.size()) {
      s.push_back('#');
      ds.push_back(0);
    }
    while (s.size() > t.size()) {
      t.push_back('#');
      dt.push_back(0);
    }
    int m = s.size();
    cmp[0].init(s, s);
    cmp[1].init(s, t);
    cmp[2].init(t, s);
    cmp[3].init(t, t);
    vector<pair<int, int>> vp;
    for (int i = 0; i < m; i++) vp.push_back({i, 0}), vp.push_back({i, 1});
    sort(vp.begin(), vp.end(), [](pair<int, int> a, pair<int, int> b) {
      int ret = cmp[a.second * 2 + b.second].calc(a.first, b.first);
      return ret ? ret < 0 : a.second < b.second;
    });
    ll sum = 0;
    for (auto &i : vp) {
      int x = i.first, y = i.second;
      if (!y)
        sum = (sum + ds[x]) % P;
      else
        dt[x] = (dt[x] + sum) % P;
    }
    swap(s, t);
    swap(ds, dt);
    while (s.size() > 1 && s[s.size() - 2] == '#') s.pop_back(), ds.pop_back();
  }
  ll ans = 0;
  for (auto &i : ds) ans = (ans + i) % P;
  cout << ans << endl;
  return 0;
}
