Tutorial (en)
# include <bits/stdc++.h>
using namespace std;
using ll= long long ;
template < class T = int > T rd ( )
{
T res= 0 ; T fg= 1 ;
char ch= getchar ( ) ;
while ( ! isdigit ( ch) ) { if ( ch== '-' ) fg= - 1 ; ch= getchar ( ) ; }
while ( isdigit ( ch) ) res= ( res<< 1 ) + ( res<< 3 ) + ( ch^ 48 ) , ch= getchar ( ) ;
return res* fg;
}
const ll mod= 1e9 + 7 ;
ll qmi ( ll a, ll b)
{
ll v= 1 ;
while ( b)
{
if ( b& 1 ) v= v* a% mod;
a= a* a% mod;
b>>= 1 ;
}
return v;
}
const int N= 3000005 ;
ll fact[ N] , inv[ N] ;
ll f[ N] [ 3 ] , ans[ N] ;
int n, m, q;
ll C ( int n, int m)
{
return fact[ n] * inv[ m] % mod* inv[ n- m] % mod;
}
int main ( )
{
n= rd ( ) , q= rd ( ) ; m= 3 * ( n+ 1 ) ;
fact[ 0 ] = 1 ;
for ( int i= 1 ; i<= m; i++ ) fact[ i] = fact[ i- 1 ] * i% mod;
inv[ m] = qmi ( fact[ m] , mod- 2 ) ; inv[ 0 ] = 1 ;
for ( int i= m; i> 1 ; i-- ) inv[ i- 1 ] = inv[ i] * i% mod;
f[ 0 ] [ 0 ] = f[ 0 ] [ 1 ] = f[ 0 ] [ 2 ] = n;
ll DIV3= qmi ( 3 , mod- 2 ) ;
for ( int i= 1 ; i<= 3 * n; i++ )
{
f[ i] [ 0 ] = ( C ( 3 * n, i+ 1 ) - 2ll * f[ i- 1 ] [ 0 ] - f[ i- 1 ] [ 1 ] + 3 * mod) * DIV3% mod;
f[ i] [ 1 ] = ( f[ i] [ 0 ] + f[ i- 1 ] [ 0 ] ) % mod;
f[ i] [ 2 ] = ( f[ i] [ 1 ] + f[ i- 1 ] [ 0 ] ) % mod;
ans[ i] = ( f[ i] [ 0 ] + C ( 3 * n, i) ) % mod;
}
while ( q-- )
{
int x= rd ( ) ;
printf ( "%lld\n" , ans[ x] ) ;
}
}