#include<iostream> #include<vector> #include<queue> using namespace std; int N,M; int A[1<<17]; int X[1<<17]; bool ok(bool f) { vector<int>indeg(M,0); vector<vector<int> >G(M); for(int i=0;i+1<N;i++) { if(f==(i%2==0)) { G[A[i]].push_back(A[i+1]); indeg[A[i+1]]++; } else { G[A[i+1]].push_back(A[i]); indeg[A[i]]++; } } queue<int>P; for(int i=0;i<M;i++)if(indeg[i]==0)P.push(i); int sz=0; while(!P.empty()) { int u=P.front();P.pop(); X[u]=++sz; for(int v:G[u])if(!--indeg[v])P.push(v); } return sz==M; } main() { cin>>N>>M; for(int i=0;i<N;i++) { cin>>A[i]; A[i]--; } for(int i=0;i+2<N;i++)if(A[i]==A[i+2]) { cout<<"No"<<endl; return 0; } if(ok(false)||ok(true)) { cout<<"Yes"<<endl; for(int i=0;i<M;i++)cout<<X[i]<<(i+1==N?"\n":" "); } else cout<<"No"<<endl; }