#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
inline long long rand(long long x, long long y) {
  return (rng() % (y + 1 - x)) + x;
}
string inline to_string(char c) {
  string second(1, c);
  return second;
}
template <typename T>
inline T gcd(T a, T b) {
  return a == 0 ? b : gcd(b % a, a);
}
long long int q, n, A[(300006)], ans, memo[(300006)], memo2[(300006)];
long long int b = 81953, mod = 1e9 + 7;
long long int b2 = 37573, mod2 = 15485863;
long long int qexp(long long int x, long long int e) {
  if (e == 0) return 1;
  long long int half = qexp(x, e >> 1);
  half *= half, half %= mod;
  if (e & 1) half *= x, half %= mod;
  return half;
}
long long int qexp2(long long int x, long long int e) {
  if (e == 0) return 1;
  long long int half = qexp2(x, e >> 1);
  half *= half, half %= mod2;
  if (e & 1) half *= x, half %= mod2;
  return half;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> q;
  for (long long int i = (0); i <= (long long int)((300006) - 1); ++i)
    memo[i] = qexp(b, i), memo2[i] = qexp2(b, i);
  function<void(long long int, long long int)> dnc = [&](long long int x,
                                                         long long int y) {
    if (x >= y) return;
    long long int m = (x + y) >> 1;
    stack<long long int> stk;
    long long int hash = 0, hash2 = 0;
    map<pair<long long int, long long int>, long long int> cnt;
    for (long long int i = (m + 1); i <= (long long int)(y); ++i) {
      if (stk.empty() || stk.top() != A[i]) {
        hash += memo[stk.size()] * A[i] % mod;
        hash %= mod;
        hash2 += memo2[stk.size()] * A[i] % mod2;
        hash2 %= mod2;
        stk.push(A[i]);
      } else {
        stk.pop();
        hash -= memo[stk.size()] * A[i] % mod;
        if (hash < 0)
          hash += mod;
        else
          hash %= mod;
        hash2 -= memo2[stk.size()] * A[i] % mod2;
        if (hash2 < 0)
          hash2 += mod2;
        else
          hash2 %= mod2;
      }
      ++cnt[pair<long long int, long long int>(hash, hash2)];
    }
    while (stk.size()) stk.pop();
    hash = 0, hash2 = 0;
    for (long long int i = (m); i >= (long long int)(x); --i) {
      if (stk.empty() || stk.top() != A[i]) {
        hash += memo[stk.size()] * A[i] % mod;
        hash %= mod;
        hash2 += memo2[stk.size()] * A[i] % mod2;
        hash2 %= mod2;
        stk.push(A[i]);
      } else {
        stk.pop();
        hash -= memo[stk.size()] * A[i] % mod;
        if (hash < 0)
          hash += mod;
        else
          hash %= mod;
        hash2 -= memo2[stk.size()] * A[i] % mod2;
        if (hash2 < 0)
          hash2 += mod2;
        else
          hash2 %= mod2;
      }
      ans += cnt[pair<long long int, long long int>(hash, hash2)];
    }
    dnc(x, m);
    dnc(m + 1, y);
  };
  auto solve = [&]() {
    cin >> n;
    for (long long int i = (1); i <= (long long int)(n); ++i) cin >> A[i];
    ans = 0;
    dnc(1, n);
    cout << ans << '\n';
  };
  while (q--) {
    solve();
  }
}
