#include<cstdio>
#include<cctype>
#include<map>
#include<cstring>
#include<algorithm>
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define ren for(int i=first[x];i;i=next[i])
using namespace std;
const int BufferSize=1<<16;
char buffer[BufferSize],*head,*tail;
inline char Getchar() {
if(head==tail) {
int l=fread(buffer,1,BufferSize,stdin);
tail=(head=buffer)+l;
}
return *head++;
}
inline int read() {
int x=0,f=1;char c=Getchar();
for(;!isdigit(c);c=Getchar()) if(c==‘-‘) f=-1;
for(;isdigit(c);c=Getchar()) x=x*10+c-‘0‘;
return x*f;
}
const int maxn=200010;
long long ans;
map<int,int>to[maxn];
int l[maxn],fa[maxn],cnt=1,last=1;
void extend(int c) {
int p,q,np,nq;p=last;last=np=++cnt;l[np]=l[p]+1;
for(;!to[p][c];p=fa[p]) to[p][c]=np;
if(!p) fa[np]=1;
else {
q=to[p][c];
if(l[p]+1==l[q]) fa[np]=q;
else {
l[nq=++cnt]=l[p]+1;
ans-=l[q]-l[fa[q]];
fa[nq]=fa[q];fa[q]=fa[np]=nq;
ans+=l[q]-l[fa[q]];ans+=l[nq]-l[fa[nq]];
to[nq]=to[q];
for(;to[p][c]==q;p=fa[p]) to[p][c]=nq;
}
}
ans+=l[np]-l[fa[np]];
}
int main() {
dwn(i,read(),1) {
extend(read());
printf("%lld\n",ans);
}
return 0;
}