#include "bits/stdc++.h"
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
#define ll long long
#define ld long double
#define pii pair<int, int>
#define pll pair<long long, long long>
#define pipii pair<int, pair<int, int>>
#define plpll pair<long long, pair<long long, long long>>
#define vvi vector<vector<int>>
#define vvl vector<vector<long long>>
#define vii vector<pii>
#define vll vector<pll>
#define vl vector<long long>
#define vi vector<int>
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define endl "\n"
#define rsz resize
#define sz(a) ((int)(a).size())
typedef tree<long long, null_type, less<long long>, rb_tree_tag, tree_order_statistics_node_update > oset; // find_by_order, order_of_key
#define fbo find_by_order
#define ook order_of_key
#define bitcount __builtin_popcount
#ifdef Etherite_Local
#define DBG1(x) cerr << (#x) << ": " << (x) << endl;
#define DBG2(x, y) cerr << (#x) << " " << (#y) << ": " << (x) << " " << y << endl;
#define DBG3(x, y, z) cerr << (#x) << " " << (#y) << " " << (#z) << ": " << (x) << " " << y << " " << z << endl;
#define DBG4(a, b, c, d) cerr << (#a) << " " << (#b) << " " << (#c) << " " << (#d) << ": " << a << " " << b << " " << c << " " << d << endl;
#define DBG5(a, b, c, d, e) cerr << (#a) << " " << (#b) << " " << (#c) << " " << (#d) << " " << (#e) << ": " << a << " " << b << " " << c << " " << d << " " << e << endl;
#define DBG6(a, b, c, d, e, f) cerr << (#a) << " " << (#b) << " " << (#c) << " " << (#d) << " " << (#e) << " " << (#f) << ": " << a << " " << b << " " << c << " " << d << " " << e << " " << f << endl;
template<class T> void DBGpair(T a, string s = "") {cerr << s << (s == ""? "" : ": ") << a.first << ", " << a.second << endl;}
template <class T> void DBGvec(vector<T> a){for(T i : a) cerr << i << " "; cerr << endl;}
template <class T> void DBGset(set<T> a){for(T i : a) cerr << i << " "; cerr << endl;}
mt19937 rnd(228);
#else
#define DBG1(x)
#define DBG2(x, y)
#define DBG3(x, y, z)
#define DBG4(a, b, c, d)
#define DBG5(a, b, c, d, e)
#define DBG6(a, b, c, d, e, f)
template<class T> void DBGpair(T a, string s = "") {return;}
template <class T> void DBGvec(vector<T> &a){}
template <class T> void DBGset(set<T> &a){}
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
#endif
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
char dir[] = {'R', 'L', 'D', 'U'};
const int MOD = 1e9 + 7;
long long binpow(long long a, long long b, long long m = 1e9 + 7)
{
a %= m;
long long res = 1;
while(b > 0)
{
if(b & 1) res = res * a % m;
a = a * a % m;
b >>= 1;
}
return res;
}
long long modinv(long long a, long long m = 1e9 + 7)
{
return binpow(a, m - 2, m);
}
ll add(ll a, ll b) {return (a + b) % MOD;}
ll sub(ll a, ll b)
{
ll x = a - b;
while(x < 0) x += MOD;
return x;
}
ll mul(ll a, ll b) {return (a * b) % MOD;}
ll divi(ll a, ll b) {return (a * modinv(b, MOD)) % MOD;}
void setIO(string filename)
{
if(fopen((filename + ".in").c_str(), "r"))
{
freopen((filename + ".in").c_str(), "r", stdin);
freopen((filename + ".out").c_str(), "w", stdout);
}
}
void solve()
{
/* dp[i][no change / higher]
last stayed same, different from current:
if(a[i] != a[i - 1]) dp[i][nc] = dp[i - 1][nc];
last stayed same, equal to current:
if(a[i] == a[i - 1]) dp[i][h] = dp[i - 1][nc] + 1;
last is 1 higher than second last, different from current:
if(a[i - 2] + 1 != a[i]) dp[i][nc] = dp[i - 1][h];
last is 1 higher than second last, same as current:
if(a[i - 1] + 1 == a[i]) dp[i][h] = dp[i - 1][h] + 1;
*/
int n; cin >> n;
vl a(n + 1), c(n + 1);
for(int i = 1; i <= n; i++) cin >> a[i] >> c[i];
vvl dp(n + 10, vl(3, 1e18));
dp[1][0] = 0;
dp[1][1] = c[1];
dp[1][2] = 2 * c[1];
for(int i = 2; i <= n; i++)
{
for(int j = 0; j <= 2; j++)
{
for(int k = 0; k <= 2; k++)
{
if(a[i] + j == a[i - 1] + k) continue;
dp[i][j] = min(dp[i][j], dp[i - 1][k] + c[i] * j);
}
}
}
cout << min({dp[n][0], dp[n][1], dp[n][2]}) << endl;
}
int main()
{
ios_base::sync_with_stdio(false); cin.tie(0);
int t = 1;
cin >> t;
for(int i = 1; i <= t; i++) solve();
return 0;
}
767A - Snacktower | 1365A - Matrix Game |
714B - Filya and Homework | 31A - Worms Evolution |
1691A - Beat The Odds | 433B - Kuriyama Mirai's Stones |
892A - Greed | 32A - Reconnaissance |
1236D - Alice and the Doll | 1207B - Square Filling |
1676D - X-Sum | 1679A - AvtoBus |
1549A - Gregor and Cryptography | 918C - The Monster |
4B - Before an Exam | 545B - Equidistant String |
1244C - The Football Season | 1696B - NIT Destroys the Universe |
1674A - Number Transformation | 1244E - Minimizing Difference |
1688A - Cirno's Perfect Bitmasks Classroom | 219A - k-String |
952A - Quirky Quantifiers | 451B - Sort the Array |
1505H - L BREAK into program | 171E - MYSTERIOUS LANGUAGE |
630D - Hexagons | 1690D - Black and White Stripe |
1688D - The Enchanted Forest | 1674C - Infinite Replacement |