#include <bits/stdc++.h>
#define priority_queue < ll, std::vector<ll>, std::greater<ll> > mnheap;
#define REP(i,a,b) for (auto i = a; i != b; i++)
#define ll long long int
#define vi vector<int>
#define vll vector<ll>
#define vvi vector < vi >
#define all(c) c.begin(),c.end()
#define rall(c) c.rbegin(),c.rend()
#define eb emplace_back
#define f first
#define s second
#define pb push_back
using namespace std;
void read(int n,vector<int>& x)
{
x.clear();
x.resize(n);
for(int i = 0;i<n;i++)
{
cin>>x[i];
}
}
void read(int n,int m,vector<vector<int>>& x)
{
x.clear();
x.resize(n,vector<int>(m));
for(int i = 0;i<n;i++)
{
for(int j = 0 ;j<m;j++)
cin>>x[i][j];
}
}
void read(int n,vector<vector<int>>& x)
{
x.clear();
x.resize(n+1);
for(int i = 0;i<n-1;i++)
{
int a,b;
cin>>a>>b;
x[a].pb(b);
x[b].pb(a);
}
}
void read(int n,vector<vector<int>>& x,int m)
{
x.clear();
x.resize(n+1);
for(int i = 0;i<m;i++)
{
int a,b;
cin>>a>>b;
x[a].pb(b);
x[b].pb(a);
}
}
void read(int n,vector<ll>& x)
{
x.clear();
x.resize(n);
for(int i = 0;i<n;i++)
{
cin>>x[i];
}
}
bool comp(vector<ll>& a,vector<ll>& b){
return a.size() > b.size();
}
int main()
{
std::ios::sync_with_stdio(false);
int T = 1;
cin>>T;
for(int t = 1;t<=T;t++)
{
// cout<<"Case #"<<t<<": ";
int n;
cin>>n;
vector<ll> u;
read(n,u);
vector<vector<ll>> skills(n);
vector<ll> sizes(n);
vector<vector<ll>> pref(n);
for(int i = 0;i<n;i++){
ll x;
cin>>x;
skills[u[i]-1].pb(x);
sizes[u[i]-1]++;
}
sort(all(skills),comp);
sort(rall(sizes));
for(int i =0;i<n;i++){
sort(rall(skills[i]));
}
for(int i = 0;i<n;i++){
for(int j=0;j<skills[i].size();j++){
if(j == 0){
pref[i].pb(skills[i][j]);
}
else{
pref[i].pb(pref[i].back() + skills[i][j]);
}
}
}
for(int i = 1;i<=n;i++){
ll sum = 0;
for(int j = 0;j<n;j++){
if(sizes[j] < i){
break;
}
else{
ll x = sizes[j] / i;
sum += pref[j][x*i-1];
}
}
cout<<sum<<" ";
}
cout<<endl;
}
return 0;
}