#include<bits/stdc++.h>
#define fst ios_base::sync_with_stdio(false), cin.tie(NULL),cout.tie(NULL);
#define ll long long
#define endl '\n'
using namespace std;
int main(){
fst
int t;
cin >> t;
while(t--){
int n;
cin >> n;
vector<int> a(n);
for(int i=0;i<n;i++) cin >> a[i];
sort(a.begin(),a.end());
auto ok = [&](int mid){
map<int,int> mp;
int cnt = 0, m = 0, tmp = n, k = 0;
for(int i=0;i<n;i++) mp[a[i]]++;
for(int i=1;i<=mid;i++){
int res = mid - i + 1;
if(cnt > 0 && mp[res] > 0){
cnt=0;
mp[a[k]]--;
if(mp[a[k]] == 0) k++;
}
if(mp[res] > 0 && cnt == 0){
m++;
mp[res]--;
tmp--;
if(tmp == 0) break;
else cnt++;
}
else {
int r = 0;
for(int j=n-1;j>=0;j--){
if(a[j] <= res && cnt > 0 && mp[a[j]] > 0){
cnt = 0;
mp[a[k]]--;
if(mp[a[k]] == 0) k++;
}
else if(cnt == 0 && a[j] <= res && mp[a[j]] > 0){
r = a[j];
break;
}
}
if(r && mp[r] > 0){
m++;
mp[r]--;
tmp--;
if(tmp == 0) break;
else cnt++;
}
else break;
}
}
return m == mid;
};
int l=1,r=100,mid,ans=0;
while(l <= r){
mid = (l + r) / 2;
if(ok(mid)){
ans = mid;
l = mid + 1;
}
else r = mid - 1;
}
cout << ans << endl;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBmc3QgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSksIGNpbi50aWUoTlVMTCksY291dC50aWUoTlVMTCk7CiNkZWZpbmUgbGwgbG9uZyBsb25nIAojZGVmaW5lIGVuZGwgJ1xuJwp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbnQgbWFpbigpewogICAgZnN0CiAgICBpbnQgdDsKICAgIGNpbiA+PiB0OwogICAgd2hpbGUodC0tKXsKICAgICAgICBpbnQgbjsKICAgICAgICBjaW4gPj4gbjsKICAgICAgICB2ZWN0b3I8aW50PiBhKG4pOwogICAgICAgIGZvcihpbnQgaT0wO2k8bjtpKyspIGNpbiA+PiBhW2ldOwogICAgICAgIHNvcnQoYS5iZWdpbigpLGEuZW5kKCkpOwogICAgICAgIGF1dG8gb2sgPSBbJl0oaW50IG1pZCl7CiAgICAgICAgICAgIG1hcDxpbnQsaW50PiBtcDsKICAgICAgICAgICAgaW50IGNudCA9IDAsIG0gPSAwLCB0bXAgPSBuLCBrID0gMDsKICAgICAgICAgICAgZm9yKGludCBpPTA7aTxuO2krKykgbXBbYVtpXV0rKzsKICAgICAgICAgICAgZm9yKGludCBpPTE7aTw9bWlkO2krKyl7CiAgICAgICAgICAgICAgICBpbnQgcmVzID0gbWlkIC0gaSArIDE7CiAgICAgICAgICAgICAgICBpZihjbnQgPiAwICYmIG1wW3Jlc10gPiAwKXsKICAgICAgICAgICAgICAgICAgICBjbnQ9MDsKICAgICAgICAgICAgICAgICAgICBtcFthW2tdXS0tOwogICAgICAgICAgICAgICAgICAgIGlmKG1wW2Fba11dID09IDApIGsrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKG1wW3Jlc10gPiAwICYmIGNudCA9PSAwKXsKICAgICAgICAgICAgICAgICAgICBtKys7CiAgICAgICAgICAgICAgICAgICAgbXBbcmVzXS0tOwogICAgICAgICAgICAgICAgICAgIHRtcC0tOwogICAgICAgICAgICAgICAgICAgIGlmKHRtcCA9PSAwKSBicmVhazsKICAgICAgICAgICAgICAgICAgICBlbHNlIGNudCsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaW50IHIgPSAwOwogICAgICAgICAgICAgICAgICAgIGZvcihpbnQgaj1uLTE7aj49MDtqLS0pewogICAgICAgICAgICAgICAgICAgICAgICBpZihhW2pdIDw9IHJlcyAmJiBjbnQgPiAwICYmIG1wW2Fbal1dID4gMCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbnQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBbYVtrXV0tLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1wW2Fba11dID09IDApIGsrKzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGNudCA9PSAwICYmIGFbal0gPD0gcmVzICYmIG1wW2Fbal1dID4gMCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gYVtqXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmKHIgJiYgbXBbcl0gPiAwKXsKICAgICAgICAgICAgICAgICAgICAgICAgbSsrOwogICAgICAgICAgICAgICAgICAgICAgICBtcFtyXS0tOwogICAgICAgICAgICAgICAgICAgICAgICB0bXAtLTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYodG1wID09IDApIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGNudCsrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBtID09IG1pZDsKICAgICAgICB9OwogICAgICAgIGludCBsPTEscj0xMDAsbWlkLGFucz0wOwogICAgICAgIHdoaWxlKGwgPD0gcil7CiAgICAgICAgICAgIG1pZCA9IChsICsgcikgLyAyOwogICAgICAgICAgICBpZihvayhtaWQpKXsKICAgICAgICAgICAgICAgIGFucyA9IG1pZDsKICAgICAgICAgICAgICAgIGwgPSBtaWQgKyAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgciA9IG1pZCAtIDE7CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgYW5zIDw8IGVuZGw7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=