#include <bits/stdc++.h>
using namespace std;
namespace SA {
int wa[1000005], wb[1000005], wv[1000005], ws[1000005];
inline void SA(char* s, int* sa, int n, int m) {
  int *x = wa, *y = wb, i, j, p;
  for (i = 0; i <= m; i++) ws[i] = 0;
  for (i = 1; i <= n; i++) ws[x[i] = s[i]]++;
  for (i = 1; i <= m; i++) ws[i] += ws[i - 1];
  for (i = n; i; i--) sa[ws[x[i]]--] = i;
  for (j = 1, p = 0; p <= n; j <<= 1, m = p) {
    p = 0;
    for (i = n - j + 1; i <= n; i++) y[++p] = i;
    for (i = 1; i <= n; i++)
      if (sa[i] > j) y[++p] = sa[i] - j;
    for (i = 1; i <= m; i++) ws[i] = 0;
    for (i = 1; i <= n; i++) wv[i] = x[y[i]];
    for (i = 1; i <= n; i++) ws[x[i]]++;
    for (i = 1; i <= m; i++) ws[i] += ws[i - 1];
    for (i = n; i; i--) sa[ws[wv[i]]--] = y[i];
    swap(x, y), p = 2, x[sa[1]] = 1;
    for (i = 2; i <= n; i++)
      x[sa[i]] = (y[sa[i - 1]] == y[sa[i]] && y[sa[i - 1] + j] == y[sa[i] + j])
                     ? p - 1
                     : p++;
  }
}
int rnk[1000005], height[1000005];
inline void Ht(char* r, int* sa, int n) {
  for (int i = 1; i <= n; i++) rnk[sa[i]] = i;
  for (int i = 1, u = 0; i <= n; height[rnk[i++]] = u)
    for (u -= bool(u); r[i + u] == r[sa[rnk[i] - 1] + u]; u++)
      ;
}
}  // namespace SA
using namespace SA;
char ch[2000005];
int sa[2000005], n;
long long ans, cur;
vector<pair<int, int> > st;
int main() {
  cin >> (ch + 1);
  n = strlen(ch + 1);
  ans += 1ll * n * (n + 1) / 2;
  SA::SA(ch, sa, n, 128), Ht(ch, sa, n);
  for (int i = n; i > 1; i--) {
    int tmp = 0;
    while (st.size() && st.back().first > height[i])
      cur += 1ll * st.back().first * st.back().second, tmp += st.back().second,
          st.pop_back();
    cur -= 1ll * height[i] * (tmp + 1);
    ans -= cur;
    st.push_back(pair<int, int>(height[i], tmp + 1));
  }
  cout << ans;
}
