#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
bool is_poss(vector<ll> heights,ll start,ll k) {
ll level=start+k;
for(int i=1;i<heights.size();i++) {
if(heights.at(i)<level) {
return false;
}
level+=k;
}
return true;
}
int main()
{
int t;
cin>>t;
while(t--) {
int n;
cin>>n;
vector<ll> heights;
ll temp;
if(n==1) {
cin>>temp;
cout<<(temp-1)<<' '<<temp<<'\n';
continue;
}
for(int i=0;i<n;i++) {
cin>>temp;
heights.push_back(temp);
}
ll low=0;
ll high=*max_element(heights.begin(), heights.end());
ll mid=low+(high-low+1)/2;
while(low<high) {
if(is_poss(heights,1,mid)) {
low=mid;
} else {
high=mid-1;
}
mid=low+(high-low+1)/2;
}
ll finalk=low;
low=1;
high=heights.front();
mid=low+(high-low+1)/2;
while(low<high) {
if(is_poss(heights,mid,finalk)) {
low=mid;
} else {
high=mid-1;
}
mid=low+(high-low+1)/2;
}
ll finalstart=low;
cout<<finalk<<' '<<finalstart<<'\n';
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKCmJvb2wgaXNfcG9zcyh2ZWN0b3I8bGw+IGhlaWdodHMsbGwgc3RhcnQsbGwgaykgewoJbGwgbGV2ZWw9c3RhcnQrazsKCWZvcihpbnQgaT0xO2k8aGVpZ2h0cy5zaXplKCk7aSsrKSB7CgkJaWYoaGVpZ2h0cy5hdChpKTxsZXZlbCkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWxldmVsKz1rOwoJfQoJcmV0dXJuIHRydWU7Cn0KCgppbnQgbWFpbigpCnsKCWludCB0OwoJY2luPj50OwoJd2hpbGUodC0tKSB7CgkJaW50IG47CgkJY2luPj5uOwoJCXZlY3RvcjxsbD4gaGVpZ2h0czsKCQlsbCB0ZW1wOwoJCWlmKG49PTEpIHsKCQkJY2luPj50ZW1wOwoJCQljb3V0PDwodGVtcC0xKTw8JyAnPDx0ZW1wPDwnXG4nOwoJCQljb250aW51ZTsKCQl9CgkJZm9yKGludCBpPTA7aTxuO2krKykgewoJCQljaW4+PnRlbXA7CgkJCWhlaWdodHMucHVzaF9iYWNrKHRlbXApOwoJCX0KCQlsbCBsb3c9MDsKCQlsbCBoaWdoPSptYXhfZWxlbWVudChoZWlnaHRzLmJlZ2luKCksIGhlaWdodHMuZW5kKCkpOwoJCWxsIG1pZD1sb3crKGhpZ2gtbG93KzEpLzI7CgkJd2hpbGUobG93PGhpZ2gpIHsKCQkJaWYoaXNfcG9zcyhoZWlnaHRzLDEsbWlkKSkgewoJCQkJbG93PW1pZDsKCQkJfSBlbHNlIHsKCQkJCWhpZ2g9bWlkLTE7CgkJCX0KCQkJbWlkPWxvdysoaGlnaC1sb3crMSkvMjsKCQl9CgkJbGwgZmluYWxrPWxvdzsKCQlsb3c9MTsKCQloaWdoPWhlaWdodHMuZnJvbnQoKTsKCQltaWQ9bG93KyhoaWdoLWxvdysxKS8yOwoJCXdoaWxlKGxvdzxoaWdoKSB7CgkJCWlmKGlzX3Bvc3MoaGVpZ2h0cyxtaWQsZmluYWxrKSkgewoJCQkJbG93PW1pZDsKCQkJfSBlbHNlIHsKCQkJCWhpZ2g9bWlkLTE7CgkJCX0KCQkJbWlkPWxvdysoaGlnaC1sb3crMSkvMjsKCQl9CgkJbGwgZmluYWxzdGFydD1sb3c7CgkJY291dDw8ZmluYWxrPDwnICc8PGZpbmFsc3RhcnQ8PCdcbic7Cgl9CglyZXR1cm4gMDsKfQ==