#include <bits/stdc++.h>
 
#define ll long long
#define X first
#define Y second
#define MP make_pair
 
using namespace std;
 
const int N = 4e5, INF = 1e9 + 7, bl = 300;
 
int n, k, p[N], clr[N], was[N], ans[N], maxx;
vector<int> g[N], gr[N], topsort, cmp, gg[N];
 
void dfs(int v){
    was[v] = 1;
    for(int u: g[v]){
        if(!was[u])
            dfs(u);
    }
    topsort.push_back(v);
}
 
void rdfs(int v){
    was[v] = 1;
    for(int u: gr[v]){
        if(!was[u])
            rdfs(u);
    }
    cmp.push_back(v);
}
 
void vdfs(int v, int cc = 26){
    maxx = max(maxx, 26 - cc + 1);
    was[v] = 1, ans[v] = cc;
    for(int u: gg[v]){
        if(!was[u]){
            vdfs(u, max(cc - 1, 1));
        }
    }
}
 
int main () {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    cin >> n >> k;
    for(int i = 1;i <= n;i++){
        cin >> p[i];
        if(i != 1){
            g[p[i]].push_back(p[i - 1]);
            gr[p[i - 1]].push_back(p[i]);
        }
    }
    for(int i = 1;i <= n;i++){
        cin >> p[i];
        if(i != 1){
            g[p[i]].push_back(p[i - 1]);
            gr[p[i - 1]].push_back(p[i]);
        }
    }
    for(int i = 1;i <= n;i++){
        if(!was[i])
            dfs(i);
    }
    vector<int> tt;
    
    reverse(topsort.begin(), topsort.end());
    memset(was, 0, sizeof(was));
    for(int i = 0, j = 0;i < n;i++){
        int v = topsort[i];
        if(!was[v]){
            cmp.clear();
            rdfs(v);
            j += 1;
            for(int u: cmp){
                clr[u] = j;
            }
            tt.push_back(j);
        }
    }
    for(int i = 1;i <= n;i++){
        for(int u: g[i]){
            if(clr[i] != clr[u])
                gg[clr[i]].push_back(clr[u]);
        }
    }
    memset(was, 0, sizeof(was));
    for(int i = 0;i < tt.size();i++){
        int v = tt[i];
        if(!was[v]){
            vdfs(v);
        }
    }
    
    if(maxx < k)
        return cout << "NO", 0;
    cout << "YES\n";
    
    for(int i = 1;i <= n;i++){
        char c = ans[clr[i]] - 1 + 'a';
        cout << c;
    }
}