#include <bits/stdc++.h>
using namespace std;
using ll = long long;
constexpr ll mod = 1e9 + 7;
template <typename A, typename B>
string to_string(pair<A, B> p);
template <typename A, typename B, typename C>
string to_string(tuple<A, B, C> p);
template <typename A, typename B, typename C, typename D>
string to_string(tuple<A, B, C, D> p);
string to_string(const string& s) { return '"' + s + '"'; }
string to_string(const char c) { return string(1, c); }
string to_string(const char* s) { return to_string((string)s); }
string to_string(bool b) { return (b ? "true" : "false"); }
string to_string(vector<bool> v) {
  bool first = true;
  string res = "{";
  for (int i = 0; i < static_cast<int>(v.size()); i++) {
    if (!first) {
      res += ", ";
    }
    first = false;
    res += to_string(v[i]);
  }
  res += "}";
  return res;
}
template <size_t N>
string to_string(bitset<N> v) {
  string res = "";
  for (int i = int(N) - 1; i >= 0; --i) {
    res += static_cast<char>('0' + v[i]);
  }
  return res;
}
template <typename A>
string to_string(A v) {
  bool first = true;
  string res = "{";
  for (const auto& x : v) {
    if (!first) {
      res += ", ";
    }
    first = false;
    res += to_string(x);
  }
  res += "}";
  return res;
}
template <typename A, typename B>
string to_string(pair<A, B> p) {
  return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
}
template <typename A, typename B, typename C>
string to_string(tuple<A, B, C> p) {
  return "(" + to_string(get<0>(p)) + ", " + to_string(get<1>(p)) + ", " +
         to_string(get<2>(p)) + ")";
}
template <typename A, typename B, typename C, typename D>
string to_string(tuple<A, B, C, D> p) {
  return "(" + to_string(get<0>(p)) + ", " + to_string(get<1>(p)) + ", " +
         to_string(get<2>(p)) + ", " + to_string(get<3>(p)) + ")";
}
void debug_out() { cerr << '\n'; }
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << " " << to_string(H);
  debug_out(T...);
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  ll n, t;
  cin >> n >> t;
  string s1, s2;
  cin >> s1 >> s2;
  string s3 = s1;
  int n_similar = n - t;
  vector<bool> used(n);
  for (int i = 0; i < n && n_similar >= 1; ++i) {
    if (s1[i] == s2[i]) {
      used[i] = true;
      --n_similar;
    }
  }
  int n_similar_s1 = n_similar;
  int n_similar_s2 = n_similar;
  for (int i = 0; i < n; ++i) {
    if (used[i]) continue;
    if (s1[i] == s2[i] && n_similar_s1 && n_similar_s2) {
      assert(false);
    } else if (s1[i] != s2[i] && n_similar_s1) {
      s3[i] = s1[i];
      --n_similar_s1;
      assert(s3[i] != s2[i]);
    } else if (s1[i] != s2[i] && n_similar_s2) {
      s3[i] = s2[i];
      --n_similar_s2;
      assert(s3[i] != s1[i]);
    } else if (s1[i] != 'z' && s2[i] != 'z') {
      s3[i] = 'z';
    } else if (s1[i] != 'y' && s2[i] != 'y') {
      s3[i] = 'y';
    } else {
      assert(s1[i] != 'x' && s2[i] != 'x');
      s3[i] = 'x';
    }
  }
  if (n_similar_s1 || n_similar_s2) {
    cout << -1 << '\n';
  } else {
    cout << s3 << '\n';
  }
}

### Prompt

Please create a solution in CPP to the following 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

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
constexpr ll mod = 1e9 + 7;
template <typename A, typename B>
string to_string(pair<A, B> p);
template <typename A, typename B, typename C>
string to_string(tuple<A, B, C> p);
template <typename A, typename B, typename C, typename D>
string to_string(tuple<A, B, C, D> p);
string to_string(const string& s) { return '"' + s + '"'; }
string to_string(const char c) { return string(1, c); }
string to_string(const char* s) { return to_string((string)s); }
string to_string(bool b) { return (b ? "true" : "false"); }
string to_string(vector<bool> v) {
  bool first = true;
  string res = "{";
  for (int i = 0; i < static_cast<int>(v.size()); i++) {
    if (!first) {
      res += ", ";
    }
    first = false;
    res += to_string(v[i]);
  }
  res += "}";
  return res;
}
template <size_t N>
string to_string(bitset<N> v) {
  string res = "";
  for (int i = int(N) - 1; i >= 0; --i) {
    res += static_cast<char>('0' + v[i]);
  }
  return res;
}
template <typename A>
string to_string(A v) {
  bool first = true;
  string res = "{";
  for (const auto& x : v) {
    if (!first) {
      res += ", ";
    }
    first = false;
    res += to_string(x);
  }
  res += "}";
  return res;
}
template <typename A, typename B>
string to_string(pair<A, B> p) {
  return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
}
template <typename A, typename B, typename C>
string to_string(tuple<A, B, C> p) {
  return "(" + to_string(get<0>(p)) + ", " + to_string(get<1>(p)) + ", " +
         to_string(get<2>(p)) + ")";
}
template <typename A, typename B, typename C, typename D>
string to_string(tuple<A, B, C, D> p) {
  return "(" + to_string(get<0>(p)) + ", " + to_string(get<1>(p)) + ", " +
         to_string(get<2>(p)) + ", " + to_string(get<3>(p)) + ")";
}
void debug_out() { cerr << '\n'; }
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << " " << to_string(H);
  debug_out(T...);
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  ll n, t;
  cin >> n >> t;
  string s1, s2;
  cin >> s1 >> s2;
  string s3 = s1;
  int n_similar = n - t;
  vector<bool> used(n);
  for (int i = 0; i < n && n_similar >= 1; ++i) {
    if (s1[i] == s2[i]) {
      used[i] = true;
      --n_similar;
    }
  }
  int n_similar_s1 = n_similar;
  int n_similar_s2 = n_similar;
  for (int i = 0; i < n; ++i) {
    if (used[i]) continue;
    if (s1[i] == s2[i] && n_similar_s1 && n_similar_s2) {
      assert(false);
    } else if (s1[i] != s2[i] && n_similar_s1) {
      s3[i] = s1[i];
      --n_similar_s1;
      assert(s3[i] != s2[i]);
    } else if (s1[i] != s2[i] && n_similar_s2) {
      s3[i] = s2[i];
      --n_similar_s2;
      assert(s3[i] != s1[i]);
    } else if (s1[i] != 'z' && s2[i] != 'z') {
      s3[i] = 'z';
    } else if (s1[i] != 'y' && s2[i] != 'y') {
      s3[i] = 'y';
    } else {
      assert(s1[i] != 'x' && s2[i] != 'x');
      s3[i] = 'x';
    }
  }
  if (n_similar_s1 || n_similar_s2) {
    cout << -1 << '\n';
  } else {
    cout << s3 << '\n';
  }
}

```