#include using namespace std; int l[5050], r[5050]; long long f[5010], g[5010]; typedef long long LL; LL as(LL a) { return (abs(a) + 1) / 2; } int main() { #ifdef TEST freopen("input.txt", "r", stdin); #endif int T; scanf("%d", &T); while (T--) { int n; scanf("%d", &n); vector all; for (int i = 0; i < n; ++i) { scanf("%d%d", &l[i], &r[i]); all.push_back(l[i]); all.push_back(r[i]); all.push_back(l[i] + 1); all.push_back(r[i] - 1); } sort(all.begin(), all.end()); all.resize(unique(all.begin(), all.end()) - all.begin()); for (int i = 0; i < all.size(); ++i) { f[i] = 0; } for (int i = 0; i < n; ++i) { l[i] = lower_bound(all.begin(), all.end(), l[i]) - all.begin(); r[i] = lower_bound(all.begin(), all.end(), r[i]) - all.begin(); for (int i = 0; i < all.size(); ++i) { g[i] = 1e9 + 7; } for (int j = 0; j < all.size(); ++j) { if (l[i] <= j && j <= r[i]) { g[j] = min(g[j], f[j]); } g[l[i]] = min(g[l[i]], f[j] + as(all[j] - all[l[i]])); g[r[i]] = min(g[r[i]], f[j] + as(all[j] - all[r[i]])); if (l[i] < r[i]) { int l = ::l[i] + 1; int r = ::r[i] - 1; g[l] = min(g[l], f[j] + as(all[j] - all[l])); g[r] = min(g[r], f[j] + as(all[j] - all[r])); } } for (int i = 0; i < all.size(); ++i) { f[i] = g[i]; } } printf("%lld\n", *min_element(f, f + all.size())); } return 0; }