#include <bits/stdc++.h>


//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
//using namespace __gnu_pbds;

//typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;

#define typeof(x) __typeof__(x)
#define bit(x,i) (x&(1<<i))  //select the bit of position i of x
#define lowbit(x) ((x)&((x)^((x)-1))) //get the lowest bit of x
#define hBit(msb,n) asm("bsrl %1,%0" : "=r"(msb) : "r"(n)) //get the highest bit of x, maybe the fastest
#define max(a,b) (a<b?b:a)
//#define abs(x) (x<0?(-x):x) // big bug here if "-x" is not surrounded by "()"
#define IN(i,l,r) (l<i&&i<r) //the next for are for checking bound
#define LINR(i,l,r) (l<=i&&i<=r)
#define LIN(i,l,r) (l<=i&&i<r)
#define INR(i,l,r) (l<i&&i<=r)
#define F(i,L,R) for (int i = L; i < R; i++) //next four are for "for loops"
#define FIN(i,L,R) for (int i = L; i <= R; i++)
#define FF(i,L,R) for (int i = L; i > R; i--)
#define FFIN(i,L,R) for (int i = L; i >= R; i--)
#define getI(a) scanf("%d", &a) //next three are handy ways to get ints, it's also force you to use '&' sign
#define getII(a,b) scanf("%d%d", &a, &b)
#define getIII(a,b,c) scanf("%d%d%d", &a, &b, &c)

#define getLL(a) scanf("%lld", &a) 
#define get2LL(a,b) scanf("%lld %lld", &a,&b)
#define g_s(n) int (n); scanf("%d",&(n)) //handy if the input is right after the definition of a variable
#define g_s2(n,m) int (n),(m); scanf("%d %d",&(n),&(m))
#define g_s3(n,m,k) int (n),(m),(k); scanf("%d %d %d",&(n),&(m),&(k))
#define TESTS g_s(testow);while(testow--) //for multilple cases problems
#define whileZ int T; getI(T); while(T--) // the same as above
#define getS(x) scanf("%s", x) //get a char* string
#define MEM(a,x) memset(a,x,sizeof(a)) //set elements of array to some value
#define char2Int(c) (c-'0')
#define lastEle(vec) vec[vec.size()-1]
#define SZ(x) ((int)((x).size()))
#define REMAX(a,b) (a)=max((a),(b)) // set a to the maximum of a and b
#define REMIN(a,b) (a)=min((a),(b));
#define FOREACH(i,t) for (typeof(t.begin()) i=t.begin(); i!=t.end(); i++) // traverse an STL data structure
#define ALL(c) (c).begin(),(c).end() //handy for function like "sort()"
#define PRESENT(c,x) ((c).find(x) != (c).end())
#define CPRESENT(c,x) (find(ALL(c),x) != (c).end())
#define ll long long //data types used often, but you don't want to type them time by time
#define ull unsigned long long
#define ui unsigned int
#define us unsigned short
#define IOS ios_base::sync_with_stdio(0); //to synchronize the input of cin and scanf
#define INF 1001001001
#define PI 3.1415926535897932384626
//for map, pair
#define mp make_pair
#define fi first
#define se second
// for debug
inline void pisz(int n) { printf("%d\n",n); }
#define DBG(vari) cerr<<#vari<<" = "<<(vari)<<endl;
#define printA(a,L,R) FIN(jk,L,R) cout << a[jk] << (jk==R?'\n':' ')
#define printV(a) printA(a,0,a.size()-1)

#define sf scanf
#define pf printf
//for vectors
#define pb push_back
typedef int elem_t;
typedef vector<int> vi;
typedef vector<string> vstr;
typedef vector<set<int> > vset;
typedef vector<vi> vvi;
typedef vector<bool> vb;
typedef vector<vector<bool> > vvb;
typedef pair<int,int> ii;
typedef vector<ii> vii;
// directions
const int dr[4] = {-1,0,1,0};
const int dc[4] = {0,-1,0,1};
const int drr[8] = {-1,-1,0,1,1,1,0,-1};
const int dcc[8] = {0,-1,-1,-1,0,1,1,1};
template<typename T,typename TT> ostream& operator<<(ostream &s,pair<T,TT> t) {return s<<"("<<t.first<<","<<t.second<<")";}
template<typename T> ostream& operator<<(ostream &s,vector<T> t){F(i,0,SZ(t))s<<t[i]<<" ";return s; }

class UnionFind{
    private: vi rank,p;
    public: 
        UnionFind(int n){
            F(i,0,n)p.pb(i);
            rank.assign(n,0);
        }

        int findSet(int s){
            return (p[s]==s) ? s : (p[s]=findSet(p[s]));
        }

        bool isSameSet(int i,int j){
            return findSet(i)==findSet(j);
        }

        void unionSet(int i,int j){
            if(isSameSet(i,j))return;

            int x=findSet(i),y=findSet(j);
            if(rank[x]>rank[y])p[y]=x;
            else {
                p[x]=y;
                if(rank[x]==rank[y])rank[y]++;
            }
            
        }
};

bool fcomp (double A, double B) 
{
	double EPSILON=numeric_limits<double>::epsilon();
    double diff = A - B;
    return fabs(diff)<EPSILON;
}

double x_y(int x1,int y1,int x2,int y2){
    return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}

int main(){
    //ios::sync_with_stdio(false);
    //cin.tie(nullptr);
	TESTS{
		g_s(n);
		int dt[n],freq[2*n+2];
		MEM(freq,0);
		
		F(i,0,n){
			getI(dt[i]);
			freq[dt[i]]=1;
		}
		
		int mx=0,mn=0,have=0,cur=0;
		//while(freq[cur]){
			//mx++;
			//cur--;
		//}
		
		//cur=1;
		//while(freq[cur]){
			//mn++;
			//cur++;
		//}
		
		FFIN(i,2*n,1){
			if(freq[i])have++;
			else {
				if(cur<have)cur++;
				else mn++;
			}
		}
		
		have=0,cur=0;
		
		FIN(i,1,2*n){
			if(freq[i])have++;
			else {
				if(cur<have)cur++;
				else mx++;
			}
		}
		
		int ans=n+1-mx-mn;
		cout<<ans<<endl;
	}
		

    return 0;
}

### Prompt

Please formulate a CPP solution to the following problem:

You have 2n integers 1, 2, ..., 2n. You have to redistribute these 2n elements into n pairs. After that, you choose x pairs and take minimum elements from them, and from the other n - x pairs, you take maximum elements.

Your goal is to obtain the set of numbers \\{b_1, b_2, ..., b_n\} as the result of taking elements from the pairs.

What is the number of different x-s (0 ≤ x ≤ n) such that it's possible to obtain the set b if for each x you can choose how to distribute numbers into pairs and from which x pairs choose minimum elements?

Input

The first line contains a single integer t (1 ≤ t ≤ 1000) — the number of test cases.

The first line of each test case contains the integer n (1 ≤ n ≤ 2 ⋅ 10^5).

The second line of each test case contains n integers b_1, b_2, ..., b_n (1 ≤ b_1 < b_2 < ... < b_n ≤ 2n) — the set you'd like to get.

It's guaranteed that the sum of n over test cases doesn't exceed 2 ⋅ 10^5.

Output

For each test case, print one number — the number of different x-s such that it's possible to obtain the set b.

Example

Input


3
1
1
5
1 4 5 9 10
2
3 4


Output


1
3
1

Note

In the first test case, x = 1 is the only option: you have one pair (1, 2) and choose the minimum from this pair.

In the second test case, there are three possible x-s. If x = 1, then you can form the following pairs: (1, 6), (2, 4), (3, 5), (7, 9), (8, 10). You can take minimum from (1, 6) (equal to 1) and the maximum elements from all other pairs to get set b.

If x = 2, you can form pairs (1, 2), (3, 4), (5, 6), (7, 9), (8, 10) and take the minimum elements from (1, 2), (5, 6) and the maximum elements from the other pairs.

If x = 3, you can form pairs (1, 3), (4, 6), (5, 7), (2, 9), (8, 10) and take the minimum elements from (1, 3), (4, 6), (5, 7).

In the third test case, x = 0 is the only option: you can form pairs (1, 3), (2, 4) and take the maximum elements from both of them.

### Response

```cpp
#include <bits/stdc++.h>


//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
//using namespace __gnu_pbds;

//typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;

#define typeof(x) __typeof__(x)
#define bit(x,i) (x&(1<<i))  //select the bit of position i of x
#define lowbit(x) ((x)&((x)^((x)-1))) //get the lowest bit of x
#define hBit(msb,n) asm("bsrl %1,%0" : "=r"(msb) : "r"(n)) //get the highest bit of x, maybe the fastest
#define max(a,b) (a<b?b:a)
//#define abs(x) (x<0?(-x):x) // big bug here if "-x" is not surrounded by "()"
#define IN(i,l,r) (l<i&&i<r) //the next for are for checking bound
#define LINR(i,l,r) (l<=i&&i<=r)
#define LIN(i,l,r) (l<=i&&i<r)
#define INR(i,l,r) (l<i&&i<=r)
#define F(i,L,R) for (int i = L; i < R; i++) //next four are for "for loops"
#define FIN(i,L,R) for (int i = L; i <= R; i++)
#define FF(i,L,R) for (int i = L; i > R; i--)
#define FFIN(i,L,R) for (int i = L; i >= R; i--)
#define getI(a) scanf("%d", &a) //next three are handy ways to get ints, it's also force you to use '&' sign
#define getII(a,b) scanf("%d%d", &a, &b)
#define getIII(a,b,c) scanf("%d%d%d", &a, &b, &c)

#define getLL(a) scanf("%lld", &a) 
#define get2LL(a,b) scanf("%lld %lld", &a,&b)
#define g_s(n) int (n); scanf("%d",&(n)) //handy if the input is right after the definition of a variable
#define g_s2(n,m) int (n),(m); scanf("%d %d",&(n),&(m))
#define g_s3(n,m,k) int (n),(m),(k); scanf("%d %d %d",&(n),&(m),&(k))
#define TESTS g_s(testow);while(testow--) //for multilple cases problems
#define whileZ int T; getI(T); while(T--) // the same as above
#define getS(x) scanf("%s", x) //get a char* string
#define MEM(a,x) memset(a,x,sizeof(a)) //set elements of array to some value
#define char2Int(c) (c-'0')
#define lastEle(vec) vec[vec.size()-1]
#define SZ(x) ((int)((x).size()))
#define REMAX(a,b) (a)=max((a),(b)) // set a to the maximum of a and b
#define REMIN(a,b) (a)=min((a),(b));
#define FOREACH(i,t) for (typeof(t.begin()) i=t.begin(); i!=t.end(); i++) // traverse an STL data structure
#define ALL(c) (c).begin(),(c).end() //handy for function like "sort()"
#define PRESENT(c,x) ((c).find(x) != (c).end())
#define CPRESENT(c,x) (find(ALL(c),x) != (c).end())
#define ll long long //data types used often, but you don't want to type them time by time
#define ull unsigned long long
#define ui unsigned int
#define us unsigned short
#define IOS ios_base::sync_with_stdio(0); //to synchronize the input of cin and scanf
#define INF 1001001001
#define PI 3.1415926535897932384626
//for map, pair
#define mp make_pair
#define fi first
#define se second
// for debug
inline void pisz(int n) { printf("%d\n",n); }
#define DBG(vari) cerr<<#vari<<" = "<<(vari)<<endl;
#define printA(a,L,R) FIN(jk,L,R) cout << a[jk] << (jk==R?'\n':' ')
#define printV(a) printA(a,0,a.size()-1)

#define sf scanf
#define pf printf
//for vectors
#define pb push_back
typedef int elem_t;
typedef vector<int> vi;
typedef vector<string> vstr;
typedef vector<set<int> > vset;
typedef vector<vi> vvi;
typedef vector<bool> vb;
typedef vector<vector<bool> > vvb;
typedef pair<int,int> ii;
typedef vector<ii> vii;
// directions
const int dr[4] = {-1,0,1,0};
const int dc[4] = {0,-1,0,1};
const int drr[8] = {-1,-1,0,1,1,1,0,-1};
const int dcc[8] = {0,-1,-1,-1,0,1,1,1};
template<typename T,typename TT> ostream& operator<<(ostream &s,pair<T,TT> t) {return s<<"("<<t.first<<","<<t.second<<")";}
template<typename T> ostream& operator<<(ostream &s,vector<T> t){F(i,0,SZ(t))s<<t[i]<<" ";return s; }

class UnionFind{
    private: vi rank,p;
    public: 
        UnionFind(int n){
            F(i,0,n)p.pb(i);
            rank.assign(n,0);
        }

        int findSet(int s){
            return (p[s]==s) ? s : (p[s]=findSet(p[s]));
        }

        bool isSameSet(int i,int j){
            return findSet(i)==findSet(j);
        }

        void unionSet(int i,int j){
            if(isSameSet(i,j))return;

            int x=findSet(i),y=findSet(j);
            if(rank[x]>rank[y])p[y]=x;
            else {
                p[x]=y;
                if(rank[x]==rank[y])rank[y]++;
            }
            
        }
};

bool fcomp (double A, double B) 
{
	double EPSILON=numeric_limits<double>::epsilon();
    double diff = A - B;
    return fabs(diff)<EPSILON;
}

double x_y(int x1,int y1,int x2,int y2){
    return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}

int main(){
    //ios::sync_with_stdio(false);
    //cin.tie(nullptr);
	TESTS{
		g_s(n);
		int dt[n],freq[2*n+2];
		MEM(freq,0);
		
		F(i,0,n){
			getI(dt[i]);
			freq[dt[i]]=1;
		}
		
		int mx=0,mn=0,have=0,cur=0;
		//while(freq[cur]){
			//mx++;
			//cur--;
		//}
		
		//cur=1;
		//while(freq[cur]){
			//mn++;
			//cur++;
		//}
		
		FFIN(i,2*n,1){
			if(freq[i])have++;
			else {
				if(cur<have)cur++;
				else mn++;
			}
		}
		
		have=0,cur=0;
		
		FIN(i,1,2*n){
			if(freq[i])have++;
			else {
				if(cur<have)cur++;
				else mx++;
			}
		}
		
		int ans=n+1-mx-mn;
		cout<<ans<<endl;
	}
		

    return 0;
}

```