Program walrus;
type elenco=array[1..300000] of longint;
var
    N, S, T, W, test,i, singolo, blocco, totdormienti, maxtempo,maxextratime,blokrimanenti: LongInt;
    C                : AnsiString;
    branco, tempobranco, extratime:elenco;

Procedure calcolatempo(B:longint; var tempo:longint)  ;
begin
  if B=1 then tempo:=1
         else if B=2 then tempo:=2
                     else
                       begin
                        if B mod 2<>0 then tempo := (B-3) div 2 +2
                                       else tempo:=  (B-3) div 2 +3;
                       end;                
end;
Procedure scambia (var a,b: longint);
var x:longint;
begin
   x:=a;
   a:=b;
   b:=x;
end;  
Procedure ordinamento (estremoi,estremos: longint; var v : elenco; ordinato:boolean);
var inf, sup, medio:longint;
    pivot :longint;
begin
    inf:=estremoi;
    sup:=estremos;
    medio:= (estremoi+estremos) div 2;
    pivot:=v[medio];
    repeat
      if (ordinato) then
         begin
            while (v[inf]>pivot) do  inf:=inf+1;
            while (v[sup]<pivot) do  sup:=sup-1;
         end;
      if inf<=sup then
       begin
         scambia(v[inf],v[sup]);
         inf:=inf+1;
         sup:=sup-1;
       end;
    until inf>sup;
    if (estremoi<sup) then ordinamento(estremoi,sup,v,ordinato);
    if (inf<estremos) then ordinamento(inf,estremos,v,ordinato);
end;


begin
    (*assign(input,  'input.txt');  reset(input);
    assign(output, 'output.txt'); rewrite(output);*)
    ReadLn(T);
    for test:=1 to T do begin
        ReadLn(N);
        ReadLn(C);
        if N=1 then begin W:=1; S:=1; end
               else begin
                W := 0;
        		S := 0;
        		singolo:=0;
        		blocco:=0;
        		totdormienti:=0;
        		i:=1; 
        		while i<N do 
                    begin
                        if (C[i]='-') and (i<>N-1)  then  i:=i+1 
                            else
                                if (C[i]='-') and (i=N-1) and (C[i+1]='.') then begin singolo:=singolo+1;blocco:=blocco+1; totdormienti:=totdormienti+1; branco[blocco]:=totdormienti; i:=i+1; end
                            else
                                if (C[i]='-') and (i=N-1) and (C[i+1]='-') then i:=i+1
                            else  
                                if (C[i]='.') and (C[i+1]='.') then begin  if i=N-1 then begin blocco:=blocco+1; totdormienti:=totdormienti+2; branco[blocco]:=totdormienti; i:=i+1; end
                                                                                    else begin i:=i+1; totdormienti:=totdormienti+1; end 
                                                                    end
                            else
                                if ((C[i]='.') and (C[i-1]='-') and (C[i+1]='-')) or ((i=1) and (C[i]='.') and (C[i+1]='-'))  then begin  singolo:=singolo+1; blocco:=blocco+1;totdormienti:=totdormienti+1; branco[blocco]:=totdormienti;  i:=i+1; totdormienti:=0;end
                            else           
                                if (C[i]='.') and (C[i+1]='-') then begin  blocco:=blocco+1;totdormienti:=totdormienti+1;branco[blocco]:=totdormienti;  i:=i+1; totdormienti:=0; end;
                    end;
                for i:=1 to blocco do calcolatempo(branco[i],tempobranco[i]);            
                ordinamento (1,blocco,tempobranco,true);
                for i:=1 to blocco do 
                                   begin
                                     extratime[i]:= (tempobranco[i]-1)-(blocco-i);
                                     if extratime[i]<0 then extratime[i]:=0;
                                   end;
                ordinamento (1,blocco,extratime,true);
                W:=blocco;
                S:=blocco+extratime[1];
              end;      
        writeln(W,' ',S);
    end;
end. 