#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define pb push_back
#define vll vector<ll>
#define pll pair<ll, ll>
typedef long long ll;
const ll mxN=18;
bool dp[(1LL<<mxN)];
ll par[(1LL<<mxN)];
ll c[(1LL<<mxN)];
void solve(){
ll n, m;
cin>>n>>m;
ll mask=0;
for(ll i=0;i<m;i++){
ll tar;
cin>>tar;
tar--;
mask|=(1LL<<tar);
}
if(!dp[mask]){
cout<<-1<<'\n';
return;
}
vll re;
while(__builtin_popcount(mask)<n){
re.pb(c[mask]);
mask=par[mask];
}
reverse(re.begin(), re.end());
cout<<re.size()<<'\n';
for(auto &it:re){
cout<<it+1<<' ';
}
cout<<'\n';
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
dp[(1LL<<mxN)-1]=1;
par[(1LL<<mxN)-1]=-1;
c[(1LL<<mxN)-1]=-1;
for(ll mask=(1LL<<mxN)-1;mask>=0;mask--){
if(!dp[mask]) continue;
vll tep;
for(ll i=0;i<mxN;i++){
if((mask>>i)&1){
tep.pb(i);
}
}
for(ll i=1;i<(ll) tep.size()-1;i++){
ll nxt=mask^(1LL<<tep[i-1]);
nxt^=(1LL<<tep[i+1]);
dp[nxt]=1;
par[nxt]=mask;
c[nxt]=tep[i];
}
}
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |