全WA
#include<iostream>
#include<cstring>
using namespace std;
#define ll long long
const int N = 1e6 + 5;
ll sz, lt;
struct SAM
{
ll son[26];
ll fa;
ll len;
}sam[N * 2];
ll ans;
void newn(ll lens)
{
sam[++sz].len = lens;
sam[sz].fa = -1;
memset(sam[sz].son, 0, sizeof(sam[sz].son));
}
void ins(ll c)
{
newn(sam[lt].len + 1);
ll p = lt;
ll cur = sz;
while (p != -1 && !sam[p].son[c])
{
sam[p].son[c] = cur;
p = sam[p].fa;
}
if (p == -1)sam[cur].fa = 0;
else
{
ll q = sam[p].son[c];
if (sam[q].len == sam[p].len + 1)sam[cur].fa = q;
else
{
newn(sam[q].len + 1);
ll nq = sz;
memcpy(sam[nq].son, sam[q].son, sizeof(sam[q].son));
sam[nq].fa = sam[q].fa;
sam[cur].fa = sam[q].fa = nq;
while (p >= 0 && sam[p].son[c] == q)
{
sam[p].son[c] = nq;
p = sam[p].fa;
}
}
}
lt = cur;
ans += sam[cur].len - sam[sam[cur].fa].len;
}
int main()
{
ll n;
string s;
cin >> n >> s;
sz = -1;
lt = 0;
newn(0);
for (int i = 0; i < s.size(); i++)ins(s[i] - 'a');
cout << ans;
return 0;
}