#include <bits/stdc++.h>
using namespace std;
using ll = long long int;
#define base 267LL
#define mod 1000'000'000'000'000'003LL
#define FOR(i,a,b) for(int i = a; i < b; i++)
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
ll gen(ll l, ll r){
return uniform_int_distribution<ll>(1, LLONG_MAX - 1)(rng);
}
ll mul(ll a, ll b){
__int128_t v = a;
return v * b % mod;
}
void solve() {
ll n;
cin >> n;
vector <ll> l1(n);
vector <vector <ll>> adj(n+1);
vector <ll> pow(n+1);
vector <ll> cnt(n+1, 0);
pow[0] = 1;
for (int i = 1; i <= n; i++){
pow[i] = mul(pow[i-1], base);
}
ll answ = 0;
ll lo = -1; ll v = 0;
map <ll,vector <ll>> f;
FOR(i,0,n) cin >> l1[i];
f[0].push_back(-1);
FOR(i,0,n){
adj[l1[i]].push_back(i);
v -= mul(cnt[l1[i]],pow[l1[i]]);
cnt[l1[i]] = (cnt[l1[i]] + 1) % 3;
v = ((v + mul(cnt[l1[i]], pow[l1[i]])) % mod + mod) % mod;
if (adj[l1[i]].size() > 3){
ll sz = adj[l1[i]].size();
lo = max(lo, adj[l1[i]][sz - 4]);
}
auto cur = &f[v];
auto it = lower_bound(cur->begin(), cur->end(), lo);
ll pos = it - cur->begin();
answ += cur->size() - pos;
f[v].push_back(i);
}
cout << answ << "\n";
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll t = 1;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nIGludDsKI2RlZmluZSBiYXNlIDI2N0xMCiNkZWZpbmUgbW9kIDEwMDAnMDAwJzAwMCcwMDAnMDAwJzAwM0xMCiNkZWZpbmUgRk9SKGksYSxiKSBmb3IoaW50IGkgPSBhOyBpIDwgYjsgaSsrKQptdDE5OTM3IHJuZyhjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCkpOwpsbCBnZW4obGwgbCwgbGwgcil7CiAgICByZXR1cm4gdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPGxsPigxLCBMTE9OR19NQVggLSAxKShybmcpOwp9CmxsIG11bChsbCBhLCBsbCBiKXsKICAgIF9faW50MTI4X3QgdiA9IGE7CiAgICByZXR1cm4gdiAqIGIgJSBtb2Q7Cn0Kdm9pZCBzb2x2ZSgpIHsKICAgIGxsIG47CiAgICBjaW4gPj4gbjsKICAgIHZlY3RvciA8bGw+IGwxKG4pOwogICAgdmVjdG9yIDx2ZWN0b3IgPGxsPj4gYWRqKG4rMSk7CiAgICB2ZWN0b3IgPGxsPiBwb3cobisxKTsKICAgIHZlY3RvciA8bGw+IGNudChuKzEsIDApOwogICAgcG93WzBdID0gMTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CiAgICAgICAgcG93W2ldID0gbXVsKHBvd1tpLTFdLCBiYXNlKTsKICAgIH0KICAgIGxsIGFuc3cgPSAwOwogICAgbGwgbG8gPSAtMTsgbGwgdiA9IDA7CiAgICBtYXAgPGxsLHZlY3RvciA8bGw+PiBmOwogICAgRk9SKGksMCxuKSBjaW4gPj4gbDFbaV07CiAgICBmWzBdLnB1c2hfYmFjaygtMSk7CiAgICBGT1IoaSwwLG4pewogICAgICAgIGFkaltsMVtpXV0ucHVzaF9iYWNrKGkpOwogICAgICAgIHYgLT0gbXVsKGNudFtsMVtpXV0scG93W2wxW2ldXSk7CiAgICAgICAgY250W2wxW2ldXSA9IChjbnRbbDFbaV1dICsgMSkgJSAzOwogICAgICAgIHYgPSAoKHYgKyBtdWwoY250W2wxW2ldXSwgcG93W2wxW2ldXSkpICUgbW9kICsgbW9kKSAlIG1vZDsKICAgICAgICBpZiAoYWRqW2wxW2ldXS5zaXplKCkgPiAzKXsKICAgICAgICAgICAgbGwgc3ogPSBhZGpbbDFbaV1dLnNpemUoKTsKICAgICAgICAgICAgbG8gPSBtYXgobG8sIGFkaltsMVtpXV1bc3ogLSA0XSk7CiAgICAgICAgfQogICAgICAgIGF1dG8gY3VyID0gJmZbdl07CiAgICAgICAgYXV0byBpdCA9IGxvd2VyX2JvdW5kKGN1ci0+YmVnaW4oKSwgY3VyLT5lbmQoKSwgbG8pOwogICAgICAgIGxsIHBvcyA9IGl0IC0gY3VyLT5iZWdpbigpOwogICAgICAgIGFuc3cgKz0gY3VyLT5zaXplKCkgLSBwb3M7CiAgICAgICAgZlt2XS5wdXNoX2JhY2soaSk7CiAgICB9CiAgICBjb3V0IDw8IGFuc3cgPDwgIlxuIjsKfQoKaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwoKICAgIGxsIHQgPSAxOwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIHNvbHZlKCk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=