/*
1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20 35
1 5 15 35 70
先打表,然后 ,总数减去通过被破坏的点到达终点的数
*/
#include<cstdio>
#include<cstring>
#include<algorithm>
#define Maxn 1000000007
using namespace std;
typedef long long LL;
LL grid[31][31];
LL n,x,y,i,j;
void Reset()
{
for(i=1;i<31;i++)
grid[i][1]=1;
for(i=1;i<31;i++)
grid[1][i]=1;
for(i=2;i<31;i++)
for(j=2;j<31;j++)
grid[i][j]=grid[i-1][j]+grid[i][j-1];
return ;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld%lld",&n,&x,&y);
Reset();
if(x==1&&y==1||x==n&&y==n)
{
printf("-1\n");
continue;
}
LL ans=grid[n][n]-grid[x][y]*grid[n-x+1][n-y+1];//总数减去通过被破坏的点到达终点的数
printf("%lld\n",ans%Maxn);
}
return 0;
}