#include <bits/stdc++.h>
using namespace std;
const int MAXN = 500010;
int x[MAXN], l[MAXN], r[MAXN];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int times;
  cin >> times;
  while (times--) {
    int n;
    cin >> n;
    int zeros = 0;
    for (int i = 1; i <= n; ++i) {
      cin >> x[i];
      l[i] = r[i] = 0;
      if (x[i] == 0) ++zeros;
    }
    int temp = 0;
    for (int i = 1; i <= n; ++i) {
      if (temp > zeros / 2) break;
      if (x[i] == 0) {
        ++temp;
        continue;
      }
      l[x[i]] = temp;
    }
    temp = 0;
    for (int i = n; i >= 1; --i) {
      if (temp > zeros / 2) break;
      if (x[i] == 0) {
        ++temp;
        continue;
      }
      r[x[i]] = temp;
    }
    vector<pair<int, int>> s;
    for (int i = 1; i <= n; ++i) {
      if (l[i] + r[i] > 0) s.push_back({l[i], r[i]});
    }
    sort(s.rbegin(), s.rend());
    int ans = 0;
    multiset<int> ss;
    int j = 0;
    for (int i = zeros / 2; i >= 0; --i) {
      while (j < s.size() && s[j].first >= i) {
        ss.insert(s[j].second);
        ++j;
      }
      if (i == 0) break;
      if (ss.empty()) continue;
      ++ans;
      ss.erase(ss.begin());
    }
    vector<int> sss;
    for (int a : ss) sss.push_back(a);
    reverse(sss.begin(), sss.end());
    j = 0;
    int cnt = 0;
    for (int i = zeros / 2; i >= 1; --i) {
      while (j < sss.size() && sss[j] >= i) {
        ++cnt;
        ++j;
      }
      if (cnt == 0) continue;
      ++ans;
      --cnt;
    }
    cout << min(zeros / 2, ans) << endl;
  }
  return 0;
}
