#include <bits/stdc++.h>   using namespace std;   int n, k;   char s[200];   char p[200];   char ans[200];   bool used[200][30];   bool brute(int pos) {     if (pos == n) {       puts(ans);       exit(0);     }     if (ans[pos] != 0) {       if (pos >= strlen(s) - 1) {         if (p[pos - strlen(s) + 1] ==  0 ) {           bool ok = true;           for (int j = strlen(s) - 1; j >= 0; j--) {             if (ans[pos - j] != s[strlen(s) - 1 - j]) {               ok = false;               break;             }           }           if (ok) return false;         }       }       return brute(pos + 1);     }     memset(used[pos], 0, sizeof used[pos]);     int cnt = k;     bool need_check = false;     if (pos >= strlen(s) - 1) {       need_check = true;       for (int i = strlen(s) - 1; i > 0; i--) {         if (ans[pos - i] != s[strlen(s) - 1 - i]) {           need_check = false;           break;         }       }     }     for (int t = 0; t < k; t++) {       ans[pos] = (char)( a  + t);       if (!need_check) {         if (brute(pos + 1)) return true;       } else {         if (t != s[strlen(s) - 1] -  a ) {           if (brute(pos + 1)) return true;         }       }     }     ans[pos] = 0;     return false;   }   int main() {     scanf( %d %d n , &n, &k);     gets(s);     gets(p);     memset(ans, 0, sizeof ans);     for (int i = 0; i < strlen(p); i++) {       if (p[i] ==  1 ) {         for (int j = 0; j < strlen(s); j++) {           if (ans[i + j] == 0 || ans[i + j] == s[j]) {             ans[i + j] = s[j];           } else {             puts( No solution );             return 0;           }         }       }     }     for (int i = 0; i < strlen(p); i++) {       if (p[i] ==  0 ) {         bool ok = true;         for (int j = 0; j < strlen(s); j++) {           if (ans[i + j] != s[j]) {             ok = false;             break;           }         }         if (ok) {           puts( No solution );           return 0;         }       }     }     for (int i = 0; i < k; i++) {       bool ok = true;       for (int j = 0; j < strlen(s); j++) {         if (s[j] -  a  == i) {           ok = false;           break;         }       }       if (ok) {         for (int j = 0; j < n; j++) {           if (ans[j] == 0) ans[j] = (char)( a  + i);         }         puts(ans);         return 0;       }     }     brute(0);     puts( No solution );   }   