#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<cmath>
#define ll long long
#define mod 1000000007
#define inf 0x3f3f3f3f
using namespace std;
typedef pair<int, int> P;
struct node
{
bool operator()(P a, P b)
{
if(a.first == b.first) return a.second > b.second;
return a.first > b.first;
}
};
int main()
{
int t;
scanf("%d", &t);
while(t --)
{
int a, b;
int n;
P p;
priority_queue<P, vector<P>, node> q;
scanf("%d", &n);
for(int i = 1; i <= n; i ++)
{
scanf("%d%d", &a, &b);
p.first = a, p.second = b;
q.push(p);
}
int cnt = 0;
int ans = -1;
while(! q.empty())
{
cnt ++;
P h = q.top();
q.pop();
if(cnt % 2 == 0)
{
cnt = 0;
continue;
}
q.push(P(h.first + h.second, h.second));
ans = max(ans, h.first + h.second);
}
printf("%d\n", ans);
}
return 0;
}
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<cmath>
#define ll long long
#define mod 1000000007
#define inf 0x3f3f3f3f
using namespace std;
typedef pair<int, int> P;
struct node
{
int pos, dis;
friend bool operator < (const node &a, const node &b)
{
if(a.pos == b.pos) return a.dis > b.dis;
else return a.pos > b.pos;
}
};
int main()
{
int t;
scanf("%d", &t);
while(t --)
{
int n;
node tmp;
priority_queue<node> q;
scanf("%d", &n);
for(int i = 1; i <= n; i ++)
{
scanf("%d%d", &tmp.pos, &tmp.dis);
q.push(tmp);
}
int cnt = 0;
int ans = -1;
while(! q.empty())
{
cnt ++;
node h = q.top();
q.pop();
if(cnt % 2 == 0)
{
cnt = 0;
continue;
}
node next;
next.pos = h.pos + h.dis;
next.dis = h.dis;
q.push(next);
ans = max(ans, h.pos + h.dis);
}
printf("%d\n", ans);
}
return 0;
}