#include #include #include #include #include #define pb push_back #define mp make_pair #define xx first #define yy second #define rep(i,a,b) for(int i=(a),i##_end_=(b);i<=i##_end_;i++) #define dwn(i,a,b) for(int i=(a),i##_end_=(b);i>=i##_end_;i--) using namespace std; inline int read() { int x=0,f=1;char c=getchar(); for(;!isdigit(c);c=getchar()) if(c=='-') f=-1; for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f; } typedef long long ll; typedef pair pii; const int maxn=1000010; const int maxm=1010; const int inf=1e9; int l[maxm],r[maxm],tmp[maxm*6]; int n,m; int f[2][maxm*6]; void solve() { n=read();m=n*2; rep(i,1,n) { tmp[i]=l[i]=read(),tmp[i+n]=r[i]=read(); tmp[++m]=l[i]+1;tmp[++m]=r[i]-1; tmp[++m]=l[i]-1;tmp[++m]=r[i]+1; } sort(tmp+1,tmp+m+1); rep(i,1,n) { l[i]=lower_bound(tmp+1,tmp+m+1,l[i])-tmp; r[i]=lower_bound(tmp+1,tmp+m+1,r[i])-tmp; } int cur=0; memset(f,0,sizeof(f)); rep(i,1,n) { int mnodd=inf,mneven=inf; cur^=1; rep(j,1,m) f[cur][j]=inf; rep(j,1,r[i]) { if(tmp[j]%2) mnodd=min(mnodd,f[cur^1][j]-tmp[j]/2); else mneven=min(mneven,f[cur^1][j]-tmp[j]/2); if(l[i]<=j&&j<=r[i]) { if(tmp[j]%2) { f[cur][j]=min(f[cur][j],mnodd+tmp[j]/2); f[cur][j]=min(f[cur][j],mneven+tmp[j]/2+1); } else { f[cur][j]=min(f[cur][j],mnodd+tmp[j]/2); f[cur][j]=min(f[cur][j],mneven+tmp[j]/2); } } } mnodd=inf,mneven=inf; dwn(j,m,l[i]) { if(tmp[j]%2) mnodd=min(mnodd,f[cur^1][j]+tmp[j]/2); else mneven=min(mneven,f[cur^1][j]+tmp[j]/2); if(l[i]<=j&&j<=r[i]) { if(tmp[j]%2) { f[cur][j]=min(f[cur][j],mnodd-tmp[j]/2); f[cur][j]=min(f[cur][j],mneven-tmp[j]/2); } else { f[cur][j]=min(f[cur][j],mnodd-tmp[j]/2+1); f[cur][j]=min(f[cur][j],mneven-tmp[j]/2); } } } // rep(j,1,m) if(f[cur][j]!=inf) printf("%d %d: %d\n",i,tmp[j],f[cur][j]); } int ans=inf; rep(j,1,m) ans=min(ans,f[cur][j]); printf("%d\n",ans); } int main() { int T=read(); while(T--) solve(); return 0; }