#include <bits/stdc++.h>
using namespace std;
#define maxn -20000000000 //negative value to break code and force you to put right constraint
#define mod 1000000007
#define md(x) (x) % mod;
#define sc scanf
#define pr printf
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define ps push
#define prt(x) cout << (#x) << " is " << (x) << endl
#define EPS 1e-9
#define INF 100000000000
#define INFd 1e9
typedef long long ll;
typedef long double ld;
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<ll> vll;
typedef vector<double> vd;
int main()
{
ll m;
cin>>m;
while(m)
{
m--;
ll n,k;
cin>>n>>k;
vector<ll> v(n+1);
for(ll i=1;i<=n;i++)
cin>>v[i];
ll dp[10005][105]={0};
memset(dp,0LL,sizeof dp);
dp[0][0]=1;
for(ll i=1;i<=(n);i++)
{
for(ll j=0;j<k;j++)
{
dp[i][j]=dp[i-1][((j-v[i])%k+k)%k]+dp[i-1][((j+v[i])%k+k)%k];
cout<<dp[i][j]<<" ";
}
cout<<endl;
}
if(dp[n][0]>0)
cout<<"Divisible\n";
else
cout<<"Not divisible\n";
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbWF4biAtMjAwMDAwMDAwMDAgLy9uZWdhdGl2ZSB2YWx1ZSB0byBicmVhayBjb2RlIGFuZCBmb3JjZSB5b3UgdG8gcHV0IHJpZ2h0IGNvbnN0cmFpbnQKI2RlZmluZSBtb2QgMTAwMDAwMDAwNwojZGVmaW5lIG1kKHgpICh4KSAlIG1vZDsKI2RlZmluZSBzYyBzY2FuZgojZGVmaW5lIHByIHByaW50ZgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgcHMgcHVzaAojZGVmaW5lIHBydCh4KSBjb3V0IDw8ICgjeCkgPDwgIiBpcyAiIDw8ICh4KSA8PCBlbmRsCiNkZWZpbmUgRVBTIDFlLTkKI2RlZmluZSBJTkYgMTAwMDAwMDAwMDAwCiNkZWZpbmUgSU5GZCAxZTkKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgbG9uZyBkb3VibGUgbGQ7CnR5cGVkZWYgcGFpcjxpbnQsIGludD4gaWk7CnR5cGVkZWYgdmVjdG9yPGludD4gdmk7CnR5cGVkZWYgdmVjdG9yPGlpPiB2aWk7CnR5cGVkZWYgdmVjdG9yPGxsPiB2bGw7CnR5cGVkZWYgdmVjdG9yPGRvdWJsZT4gdmQ7CgppbnQgbWFpbigpCnsKCWxsIG07CgljaW4+Pm07Cgl3aGlsZShtKQoJewoJCW0tLTsKCQlsbCBuLGs7CgkJY2luPj5uPj5rOwoJCXZlY3RvcjxsbD4gdihuKzEpOwoJCWZvcihsbCBpPTE7aTw9bjtpKyspCgkJCWNpbj4+dltpXTsKCQlsbCBkcFsxMDAwNV1bMTA1XT17MH07CgkJbWVtc2V0KGRwLDBMTCxzaXplb2YgZHApOwoJCWRwWzBdWzBdPTE7CgkJZm9yKGxsIGk9MTtpPD0obik7aSsrKQoJCXsKCQkJZm9yKGxsIGo9MDtqPGs7aisrKQoJCQl7CgkJCQlkcFtpXVtqXT1kcFtpLTFdWygoai12W2ldKSVrK2spJWtdK2RwW2ktMV1bKChqK3ZbaV0pJWsraykla107CgkJCQljb3V0PDxkcFtpXVtqXTw8IiAiOwoJCQl9CgkJCWNvdXQ8PGVuZGw7CgkJfQoJCWlmKGRwW25dWzBdPjApCgkJCWNvdXQ8PCJEaXZpc2libGVcbiI7CgkJZWxzZQoJCQljb3V0PDwiTm90IGRpdmlzaWJsZVxuIjsKCX0KfQoJCg==