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 JAVA):

Solution:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Queue;
import java.util.StringTokenizer;

public class C implements Runnable {

	final static boolean ONLINE_JUDGE = System.getProperty("ONLINE_JUDGE") != null;

	BufferedReader in;
	PrintWriter out;
	StringTokenizer tok = new StringTokenizer("");

	final static String fileName = "";

	void init() throws IOException {
		if (ONLINE_JUDGE) {
			in = new BufferedReader(new InputStreamReader(System.in));
			out = new PrintWriter(System.out);
		} else {
			if (fileName.isEmpty()) {
				in = new BufferedReader(new FileReader("input.txt"));
				out = new PrintWriter("output.txt");
			} else {
				in = new BufferedReader(new FileReader(fileName + ".in"));
				out = new PrintWriter(fileName + ".out");
			}
		}
	}

	public static void main(String[] args) {
		new C().run();
	}

	String readString() throws IOException {
		while (!tok.hasMoreTokens()) {
			tok = new StringTokenizer(in.readLine());
		}
		return tok.nextToken();
	}

	int readInt() throws NumberFormatException, IOException {
		return Integer.parseInt(readString());
	}

	long readLong() throws NumberFormatException, IOException {
		return Long.parseLong(readString());
	}

	int[] readIntArray(int size) throws NumberFormatException, IOException {
		int[] arr = new int[size];
		for (int i = 0; i < size; i++) {
			arr[i] = readInt();
		}
		return arr;
	}

	static long timeIn;

	void time() {
		System.err.println("Time = " + (System.currentTimeMillis() - timeIn));
	}

	@Override
	public void run() {
		try {
			timeIn = System.currentTimeMillis();
			init();
			solve();
			out.close();
			time();
		} catch (IOException e) {
			e.printStackTrace();
			System.exit(-1);
		}
	}

	char getDif(char x, char y) {
		for (char c = 'a'; c <= 'z'; c++) {
			if (x != c && y != c)
				return c;
		}
		return 'a';
	}

	int f(char[] a, char[] b, int n) {
		int res = 0;
		for (int i = 0; i < n; i++) {
			if (a[i] != b[i]) {
				res++;
			}
		}
		return res;
	}

	class Pair {
		char a, b;
		int index;

		public Pair(char a, char b, int index) {
			super();
			this.a = a;
			this.b = b;
			this.index = index;
		}
	}

	private void solve() throws IllegalArgumentException, IOException {

		int n = readInt();
		int t = readInt();

		char[] a = readString().toCharArray();
		char[] b = readString().toCharArray();

		int k = 0;
		for (int i = 0; i < n; i++) {
			if (a[i] != b[i])
				k++;
		}

		int T = t;

		char[] answer = new char[n];

		if (k == t) {
			for (int i = 0; i < n; i++) {
				if (a[i] != b[i]) {
					answer[i] = getDif(a[i], b[i]);
				} else {
					answer[i] = a[i];
				}
			}
		} else {
			if (k < t) {
				for (int i = 0; i < n; i++) {
					if (a[i] != b[i]) {
						answer[i] = getDif(a[i], b[i]);
						t--;
					}
				}
				for (int i = 0; i < n; i++) {
					if (a[i] == b[i]) {
						if (t > 0) {
							answer[i] = getDif(a[i], b[i]);
							t--;
						} else {
							answer[i] = a[i];
						}
					}
				}
			} else {
				Queue<Pair> list = new ArrayDeque<>();
				for (int i = 0; i < n; i++) {
					if (a[i] != b[i]) {
						list.add(new Pair(a[i], b[i], i));
					}
				}
				while (t < list.size()) {
					if (list.size() < 2) {
						out.println(-1);
						return;
					}
					Pair x = list.poll();
					Pair y = list.poll();
					answer[x.index] = x.a;
					answer[y.index] = y.b;
					t--;
				}
				if (t != list.size()) {
					out.println(-1);
					return;
				}

				for (int i = 0; i < n; i++) {
					if (answer[i] == 0) {
						if (a[i] != b[i]) {
							answer[i] = getDif(a[i], b[i]);
						} else {
							answer[i] = a[i];
						}
					}
				}

			}
		}

		int x = f(answer, a, n);
		int y = f(answer, b, n);

		for (int i = 0; i < n; i++) {
			if (answer[i] == 0) {
				out.println(-1);
				return;
			}
		}

		if (x == y && x == T) {
			out.println(new String(answer));
		} else {
			out.println(-1);
		}

	}
}