#include <bits/stdc++.h>
using std::make_pair;
template <typename T>
inline T read() {
  T x = 0;
  char ch = std::getchar();
  bool f = 0;
  while (!std::isdigit(ch)) {
    f = (ch == '-');
    ch = std::getchar();
  }
  while (std::isdigit(ch)) {
    x = x * 10 + (ch - '0');
    ch = std::getchar();
  }
  return f ? -x : x;
}
template <typename T>
void print(T x) {
  if (x < 0) {
    x = -x;
    std::putchar('-');
  }
  if (x < 10) {
    std::putchar(x + 48);
    return;
  }
  print<T>(x / 10);
  std::putchar(x % 10 + 48);
  return;
}
namespace Solution {
using std::cin;
using std::cout;
using std::deque;
using std::endl;
using std::map;
using std::pair;
using std::queue;
using std::set;
using std::vector;
const int N = 1004001, mod = 1e9 + 7;
int a[N + N / 10];
char c[N];
void Fakemain() {
  int t = read<int>();
  while (t--) {
    int len = read<int>();
    long long ans = 0;
    memset(a, 0, sizeof a);
    scanf("%s", c + 1);
    a[0 + N / 10]++;
    int S = 0;
    for (int i = 1; i <= len; ++i) {
      S += c[i] - '0' - 1;
      ans += a[S + N / 10]++;
    }
    printf("%lld\n", ans);
  }
  return;
}
}  // namespace Solution
int main(int argc, char* argv[]) {
  Solution::Fakemain();
  return 0;
}
