#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using lld = double;
#define srt(a) sort(a.begin(),a.end());
#define rsrt(a) sort(a.rbegin(),a.rend());
#define pb push_back
using pll=pair<ll,ll>;
#define fi(a,b,c) for(ll a=b;a<c;a++)
#define f(a,c) for(ll a=0;a<c;a++)
#define rf(a,c) for(ll a=c;a>=0;a--)
#define cye cout<<"Yes\n"
#define cno cout<<"No\n"
#define vll vector<ll>
ll mod=676767677,N=1e6;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
ll t;
cin>>t;
while(t--){
ll n,m,fl=0,ans=1,c=0;
cin>>n>>m;
map<ll,ll> mp;
map<ll,vll> b;
vll a(n),si(m);
f(i,n){cin>>a[i];mp[a[i]]++;}
cout<<fl<<' ';
f(i,n){
b[a[i]].pb(i);
}
f(i,m){
si[i]=b[i].size();
if(mp[i]==0){fl=1;break;}
}
cout<<fl<<' ';
fi(i,1,n-1){
if(a[i]<=a[i-1]&&a[i]<=a[i+1]&&a[i]!=0){fl=1;break;}
}
cout<<fl<<' ';
if(n!=1){
if(a[0]<a[1]&&a[0]!=0)fl=1;
if(a[n-1]<a[n-2]&&a[n-1]!=0)fl=1;
}
cout<<fl<<' ';
if(fl){cout<<"0\n";continue;}
f(i,m){
if(i==0){
c+=b[i].size();
continue;
}
for(auto u:b[i]){
ll mi=1e10;
if(u>0)mi=min(mi,a[u-1]);
if(u<n-1)mi=min(mi,a[u+1]);
if(mi==i-1)ans=(ans*c)%mod;
else ans=(ans*si[i-1])%mod;
}
c+=si[i];
}
cout<<ans<<'\n';
}
return 0;
}
I3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk9mYXN0IikKI3ByYWdtYSBHQ0Mgb3B0aW1pemUoInVucm9sbC1sb29wcyIpCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBsbCA9IGxvbmcgbG9uZzsKdXNpbmcgbGxkID0gZG91YmxlOwojZGVmaW5lIHNydChhKSBzb3J0KGEuYmVnaW4oKSxhLmVuZCgpKTsKI2RlZmluZSByc3J0KGEpIHNvcnQoYS5yYmVnaW4oKSxhLnJlbmQoKSk7CiNkZWZpbmUgcGIgcHVzaF9iYWNrCnVzaW5nIHBsbD1wYWlyPGxsLGxsPjsKI2RlZmluZSBmaShhLGIsYykgZm9yKGxsIGE9YjthPGM7YSsrKQojZGVmaW5lIGYoYSxjKSBmb3IobGwgYT0wO2E8YzthKyspCiNkZWZpbmUgcmYoYSxjKSBmb3IobGwgYT1jO2E+PTA7YS0tKQojZGVmaW5lIGN5ZSBjb3V0PDwiWWVzXG4iCiNkZWZpbmUgY25vIGNvdXQ8PCJOb1xuIgojZGVmaW5lIHZsbCB2ZWN0b3I8bGw+IApsbCBtb2Q9Njc2NzY3Njc3LE49MWU2OwppbnQgbWFpbigpewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwogICAgY291dC50aWUoTlVMTCk7CiAgICBsbCB0OwogICAgY2luPj50OwogICAgd2hpbGUodC0tKXsKICAgIGxsIG4sbSxmbD0wLGFucz0xLGM9MDsKICAgIGNpbj4+bj4+bTsKICAgIG1hcDxsbCxsbD4gbXA7CiAgICBtYXA8bGwsdmxsPiBiOwogICAgdmxsIGEobiksc2kobSk7CiAgICBmKGksbil7Y2luPj5hW2ldO21wW2FbaV1dKys7fQogICAgY291dDw8Zmw8PCcgJzsKICAgIGYoaSxuKXsKICAgICAgICBiW2FbaV1dLnBiKGkpOwogICAgfQogICAgZihpLG0pewogICAgICAgIHNpW2ldPWJbaV0uc2l6ZSgpOwogICAgICAgIGlmKG1wW2ldPT0wKXtmbD0xO2JyZWFrO30KICAgIH0KICAgIGNvdXQ8PGZsPDwnICc7CiAgICBmaShpLDEsbi0xKXsKICAgICAgICBpZihhW2ldPD1hW2ktMV0mJmFbaV08PWFbaSsxXSYmYVtpXSE9MCl7Zmw9MTticmVhazt9CiAgICB9CiAgICBjb3V0PDxmbDw8JyAnOwogICAgaWYobiE9MSl7CiAgICAgICAgaWYoYVswXTxhWzFdJiZhWzBdIT0wKWZsPTE7CiAgICAgICAgaWYoYVtuLTFdPGFbbi0yXSYmYVtuLTFdIT0wKWZsPTE7CiAgICB9CiAgICBjb3V0PDxmbDw8JyAnOwogICAgaWYoZmwpe2NvdXQ8PCIwXG4iO2NvbnRpbnVlO30KICAgIGYoaSxtKXsKICAgICAgICBpZihpPT0wKXsKICAgICAgICAgICAgYys9YltpXS5zaXplKCk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBmb3IoYXV0byB1OmJbaV0pewogICAgICAgICAgICBsbCBtaT0xZTEwOwogICAgICAgICAgICBpZih1PjApbWk9bWluKG1pLGFbdS0xXSk7CiAgICAgICAgICAgIGlmKHU8bi0xKW1pPW1pbihtaSxhW3UrMV0pOwogICAgICAgICAgICBpZihtaT09aS0xKWFucz0oYW5zKmMpJW1vZDsKICAgICAgICAgICAgZWxzZSBhbnM9KGFucypzaVtpLTFdKSVtb2Q7CiAgICAgICAgfQogICAgICAgIGMrPXNpW2ldOwogICAgfQogICAgY291dDw8YW5zPDwnXG4nOwogICAgfQogICAgcmV0dXJuIDA7Cn0=