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.util.*;
import java.io.*;

import static java.lang.Math.*;


public class C implements Runnable{
	
	Random rnd = new Random();
	
	void solve() throws IOException {
		int n = readInt();
		int t = readInt();
		
		char[] s1 = readString().toCharArray();
		char[] s2 = readString().toCharArray();
		
		char[] s3 = new char[n];
		
		int[] first3LettersUsed = new int[26];
		Arrays.fill(first3LettersUsed, -1);
		
		for (int i = 0; i < n; ++i) {
			if (s1[i] == s2[i]) {
				s3[i] = s1[i];
			} else {
				first3LettersUsed[s1[i] - 'a'] = i;
				first3LettersUsed[s2[i] - 'a'] = i;
				
				for (int j = 0; j < 26; ++j) {
					if (first3LettersUsed[j] != i) {
						s3[i] = (char)(j + 'a');
						break;
					}
				}
			}
		}
		
		int t1 = getDelta(s3, s1);
		int t2 = getDelta(s3, s2);
		
		if (t1 != t2) {
			throw new RuntimeException();
		}
		
		if (t1 < t) {
			Arrays.fill(first3LettersUsed, -1);
			
			for (int i = 0; i < n && (t1 < t || t2 < t); ++i) {
				if (s1[i] == s2[i]) {
					++t1;
					++t2;
					
					first3LettersUsed[s1[i] - 'a'] = i;
					first3LettersUsed[s2[i] - 'a'] = i;
					
					for (int j = 0; j < 26; ++j) {
						if (first3LettersUsed[j] != i) {
							s3[i] = (char)(j + 'a');
							break;
						}
					}
				}
			}
		} else if (t1 > t) {
			for (int i = 0; i < n && (t1 > t || t2 > t); ++i) {
				if (s1[i] != s2[i]) {
					if (t1 > t2) {
						s3[i] = s1[i];
						--t1;
					} else {
						s3[i] = s2[i];
						--t2;
					} 
				}
			}
		}
		
		if (t1 != t || t2 != t) {
			out.println(-1);
		} else {
			for (char ch : s3) {
				out.print(ch);
			}
			out.println();
		}
	}
	
	int getDelta(char[] s3, char[] s) {
		int delta = 0;
		for (int i = 0; i < s.length; ++i) {
			if (s3[i] != s[i]) ++delta;
		}
		
		return delta;
	}
	
	final boolean ONLINE_JUDGE = System.getProperty("ONLINE_JUDGE") != null;
	
	BufferedReader in;
	PrintWriter out;
	StringTokenizer tok = new StringTokenizer("");
	
	public static void main(String[] args){
		new C().run();
	}
	
	public void run(){
		try{
			long timeBegin = System.currentTimeMillis();
			Locale.setDefault(Locale.US);
			
			init();
			solve();
			
			out.close();
			
			long timeEnd = System.currentTimeMillis();
			System.err.println("Time = " + (timeEnd - timeBegin));
		}catch (Exception e){
			e.printStackTrace(System.err);
			System.exit(-1);
		}
	}
	
	String readString() throws IOException{
		while(!tok.hasMoreTokens()){
			try{
				tok = new StringTokenizer(in.readLine());
			}catch (Exception e){
				return null;
			}
		}
		
		return tok.nextToken();
	}
	
	int readInt() throws IOException {
		return Integer.parseInt(readString());
	}
	
	void init() throws FileNotFoundException{
		Locale.setDefault(Locale.US);
		
		if (ONLINE_JUDGE){
			in = new BufferedReader(new InputStreamReader(System.in));
			out = new PrintWriter(System.out);
		}else{
			in = new BufferedReader(new FileReader("input.txt"));
			out = new PrintWriter("output.txt");
		}
	}
}