int N,M,A[1d5+1],I[1d5]={},ans[1d5]; VI E[1d5],V; { rd(N,M,A(N)--); rep(i,N-2) if(A[i]==A[i+2]) wt("No"),exit(0); rep(i,N-1){ if(i%2){ E[A[i+1]].push_back(A[i]); I[A[i]]++; } else{ E[A[i]].push_back(A[i+1]); I[A[i+1]]++; } } queue Q; rep(i,M) if(I[i]==0) Q.push(i); while(Q.size()){ int p=Q.front(); Q.pop(); V.push_back(p); for(int e:E[p]) if(0==--I[e]) Q.push(e); } if(V.size()!=M) wt("No"),exit(0); wt("Yes"); rep(i,M) ans[V[i]]=i+1; wt(ans(M)); }