Problem: Marina loves strings of the same length and Vasya loves when there is a third string, different from them in exactly t characters. Help Vasya find at least one such string.

More formally, you are given two strings s1, s2 of length n and number t. Let's denote as f(a, b) the number of characters in which strings a and b are different. Then your task will be to find any string s3 of length n, such that f(s1, s3) = f(s2, s3) = t. If there is no such string, print  - 1.

Input

The first line contains two integers n and t (1 ≤ n ≤ 105, 0 ≤ t ≤ n).

The second line contains string s1 of length n, consisting of lowercase English letters.

The third line contain string s2 of length n, consisting of lowercase English letters.

Output

Print a string of length n, differing from string s1 and from s2 in exactly t characters. Your string should consist only from lowercase English letters. If such string doesn't exist, print -1.

Examples

Input

3 2
abc
xyc


Output

ayd

Input

1 0
c
b


Output

-1

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
void merge(long long arr[], long long int l, long long int m, long long int r) {
  int i, j, k;
  int n1 = m - l + 1;
  int n2 = r - m;
  int L[n1], R[n2];
  for (i = 0; i < n1; i++) L[i] = arr[l + i];
  for (j = 0; j < n2; j++) R[j] = arr[m + 1 + j];
  i = 0;
  j = 0;
  k = l;
  while (i < n1 && j < n2) {
    if (L[i] <= R[j]) {
      arr[k] = L[i];
      i++;
    } else {
      arr[k] = R[j];
      j++;
    }
    k++;
  }
  while (i < n1) {
    arr[k] = L[i];
    i++;
    k++;
  }
  while (j < n2) {
    arr[k] = R[j];
    j++;
    k++;
  }
}
void mergeSort(long long int arr[], long long int l, long long int r) {
  if (l < r) {
    int m = l + (r - l) / 2;
    mergeSort(arr, l, m);
    mergeSort(arr, m + 1, r);
    merge(arr, l, m, r);
  }
}
long long int fact(int n) {
  if (n == 1 || n == 0)
    return 1;
  else
    return (n)*fact(n - 1);
}
int min(int a[], int n) {
  int i = 0, max = 10000, c;
  for (i = 0; i < n; i++) {
    if (a[i] < max) {
      max = a[i];
      c = i;
    }
  }
  return c;
}
int max(int a[], int n) {
  int i = 0, max = -1, c;
  for (i = 0; i < n; i++) {
    if (a[i] > max) {
      max = a[i];
      c = i;
    }
  }
  return c;
}
long long int ifitis(int n, int v, int r) {
  long long int sum = v, flag = 0;
  while ((v / r) != 0) {
    sum += floor(v / r);
    v = v / r;
  }
  printf("\n");
  return sum;
}
int isprime(long long int n) {
  long long int i = 0;
  for (i = 2; i <= sqrt(n); i++) {
    if (n % i == 0) return 0;
  }
  return 1;
}
int divisors(int n) {
  int i = 0;
  if (isprime(n))
    return 1;
  else {
    for (i = n - 1; i >= 2; i--) {
      if (n % i == 0) {
        break;
      }
    }
  }
  return divisors(i) + 1;
}
long long int com(int n) { return (n * (n - 1) * (n - 2) / 6); }
long long int func(long long int arr[], long long int n, long long int l) {
  int i = 0;
  if (n < arr[0])
    return -1;
  else {
    while (arr[i] <= n) {
      if (i == l - 1) return i;
      i++;
    }
  }
  return i - 1;
}
int main() {
  long long int u, w, v, n = 0, y, z, m = 0, min = 99999, r, o = 0, e = 0,
                         sum = 0, flag = 0, count = 0, x = -1, b[100000] = {0},
                         c[100] = {0}, k = 0, d, i = 0, j = 0;
  long long int top = -1;
  char stack[100002], ch;
  long long int a[100002];
  scanf("%I64d %I64d", &n, &m);
  char s[100002], s1[100002], s2[100000];
  scanf("%s", s);
  scanf("%s", s1);
  m = n - m;
  m *= 2;
  flag = 1;
  for (i = 0; i < strlen(s); i++) {
    if (s[i] == s1[i] && m > 1) {
      s2[i] = s[i];
      m -= 2;
    }
  }
  for (i = 0; i < strlen(s); i++) {
    if (s2[i] == s[i]) continue;
    if (m > 0) {
      if (flag == 1) {
        s2[i] = s[i];
        flag = 0;
      } else {
        s2[i] = s1[i];
        flag = 1;
      }
      m--;
    } else {
      ch = 'a';
      while (ch == s[i] || ch == s1[i]) {
        if (ch == 'z')
          ch == 'a';
        else
          ch++;
      }
      s2[i] = ch;
    }
  }
  s2[strlen(s)] = '\0';
  if (m <= 0)
    puts(s2);
  else
    printf("-1");
  return 0;
}