#include <bits/stdc++.h>
using namespace std;
#define watch2(x , y) cerr<<(#x)<<" = "<<(x)<<"  "<<(#y)<<" = "<<(y)<<"\n"
int SD(){int x; scanf("%d" , &x); return x;}
const int AKA = 1e6 + 6 , OO = 1e9;
int a[AKA];
int main()
{
    int t = SD();
    while(t--)
    {
        int n  = SD() , cnt = 0 , mnV = OO , f = 0;
        for(int i = 0 ; i < n ; ++i)
            a[i] = SD() , cnt += (a[i] == -1) , a[i] != -1 ? mnV = min(mnV , a[i]) : 0;
        for(int i = 0 ; i < n - 1 ; ++i)
            if(a[i] != -1 && a[i + 1] != -1)
                f = 1;
        if(cnt == n)
            puts("0 42");
        else if(cnt == n - 1)
            printf("0 %d\n" , mnV);
        else if(f == 1)
        {
            int m = -1 , k = -1;
            for(int i = 0 ; i < n - 1 ; ++i)
                if(a[i] != -1 && a[i + 1] != -1)
                    m = max(m , abs(a[i] - a[i + 1]));
            vector<int> v;
            for(int i = 0 ; i < n ; ++i)
                if(a[i] == -1)
                    v.push_back(m);
                else
                    v.push_back(a[i]);
            for(int i = 0 ; i < v.size() - 1 ; ++i)
                k = max(k , abs(v[i] - v[i + 1]));
            printf("%d %d\n" , m , k);
        }
        else
        {
              vector<int> v;
              for(int i = 0 ; i < n ; ++i)
                    if(a[i] != -1)
                        v.push_back(a[i]);
              int m = -1 , k = -1;
              for(int i = 0 ; i < v.size() - 1 ; ++i)
                m = max(m , (int)( (v[i] + v[i + 1])  / 2.00));
              vector<int> vv;
            for(int i = 0 ; i < n ; ++i)
                if(a[i] == -1)
                    vv.push_back(m);
                else
                    vv.push_back(a[i]);
            for(int i = 0 ; i < vv.size() - 1 ; ++i)
                k = max(k , abs(vv[i] - vv[i + 1]));
            printf("%d %d\n" , k , m);
        }
    }
}
