#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <queue>
#include <iostream>
#include <set>
#include <sstream>
#include <algorithm>
#include <vector>
using namespace std ;
int n , m , tests , zeros;
vector <int > ans ;
set<int > s ;
int last[1<<20] , ev[1<<20] ;
bool flag;
int main(void){
cin >> tests ;
for (;tests;--tests){
cin >> n >>m ;
flag = true ;
zeros = 0 ;
for(int i = 1 ; i <= n ; ++i) last[i] = 0 ;
s.clear() ;
ans.clear();
for(int i = 1 ; i <= m ; ++i){
cin >> ev[i] ;
if(ev[i] == 0) s.insert(i) , zeros += 1;
else {
if(s.empty()) {
puts("NO") ;
flag = false ;
break ;
}
set<int>::iterator iter = s.lower_bound(last[ev[i]]) ;
if(iter == s.end()){
puts("NO") ;
flag = false ;
break ;
}
else if(*iter >= last[ev[i]]){
ans.push_back(ev[i]) ;
last[ev[i]] = i ;
s.erase(iter) ;
}
else{
puts("NO") ;
flag = false ;
break ;
}
}
}
if(!flag) continue ;
else {
puts("YES");
ans.resize(zeros) ;
for(int i = 0 ; i < ans.size() ; ++i){
if(i == ans.size() - 1) cout << ans[i] << endl ;
else cout << ans[i] << " " ;
}
}
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDx2ZWN0b3I+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkIDsgCgppbnQgbiAsIG0gLCB0ZXN0cyAsIHplcm9zOyAKdmVjdG9yIDxpbnQgPiBhbnMgOwpzZXQ8aW50ID4gcyA7IAppbnQgbGFzdFsxPDwyMF0gLCBldlsxPDwyMF0gOwpib29sIGZsYWc7CgppbnQgbWFpbih2b2lkKXsKICAgIGNpbiA+PiB0ZXN0cyA7IAogICAgZm9yICg7dGVzdHM7LS10ZXN0cyl7CiAgICAgICAgY2luID4+IG4gPj5tIDsgCiAgICAgICAgZmxhZyA9IHRydWUgOwogICAgICAgIHplcm9zID0gMCAgOwogICAgICAgIGZvcihpbnQgaSA9IDEgOyBpIDw9IG4gOyArK2kpIGxhc3RbaV0gPSAwIDsKICAgICAgICBzLmNsZWFyKCkgOwogICAgICAgIGFucy5jbGVhcigpOwogICAgICAgIGZvcihpbnQgaSA9IDEgOyBpIDw9IG0gOyArK2kpewogICAgICAgICAgICBjaW4gPj4gZXZbaV0gOyAKICAgICAgICAgICAgaWYoZXZbaV0gPT0gMCkgcy5pbnNlcnQoaSkgLCB6ZXJvcyArPSAxOyAKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZihzLmVtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBwdXRzKCJOTyIpIDsKICAgICAgICAgICAgICAgICAgICBmbGFnID0gZmFsc2UgOyAgCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgOwogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgIHNldDxpbnQ+OjppdGVyYXRvciBpdGVyID0gcy5sb3dlcl9ib3VuZChsYXN0W2V2W2ldXSkgOyAKICAgICAgICAgICAgICAgIGlmKGl0ZXIgPT0gcy5lbmQoKSl7CiAgICAgICAgICAgICAgICAgICAgcHV0cygiTk8iKSA7IAogICAgICAgICAgICAgICAgICAgIGZsYWcgPSBmYWxzZSA7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZigqaXRlciA+PSBsYXN0W2V2W2ldXSl7CiAgICAgICAgICAgICAgICAgICAgYW5zLnB1c2hfYmFjayhldltpXSkgOwogICAgICAgICAgICAgICAgICAgIGxhc3RbZXZbaV1dID0gaSA7CiAgICAgICAgICAgICAgICAgICAgcy5lcmFzZShpdGVyKSA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgICAgIHB1dHMoIk5PIikgOyAKICAgICAgICAgICAgICAgICAgICBmbGFnID0gZmFsc2UgOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZighZmxhZykgY29udGludWUgOyAKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcHV0cygiWUVTIik7CiAgICAgICAgICAgIGFucy5yZXNpemUoemVyb3MpIDsgCiAgICAgICAgICAgIGZvcihpbnQgaSA9IDAgOyBpIDwgYW5zLnNpemUoKSA7ICsraSl7CiAgICAgICAgICAgICAgICBpZihpID09IGFucy5zaXplKCkgLSAxKSBjb3V0IDw8IGFuc1tpXSA8PCBlbmRsIDsgCiAgICAgICAgICAgICAgICBlbHNlIGNvdXQgPDwgYW5zW2ldIDw8ICIgIiA7IAogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKCXJldHVybiAwOwp9CgoKCgoK