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.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class MarinaAndVasya {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter out = new PrintWriter(System.out);
        StringTokenizer st;

        st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int t = Integer.parseInt(st.nextToken());
        char[] s1 = br.readLine().toCharArray();
        char[] s2 = br.readLine().toCharArray();
        char[] s3 = new char[n];

        ArrayList<Integer> similarIndexList = new ArrayList<>(n);
        ArrayList<Integer> differingIndexList = new ArrayList<>(n);
        for (int i = 0; i < n; i++) {
            if (s1[i] == s2[i]) {
                similarIndexList.add(i);
            } else {
                differingIndexList.add(i);
            }
        }

        int nSame = similarIndexList.size();
        int nDiff = differingIndexList.size();
        if (t < Math.ceil(nDiff / 2.0) || t > n) {
            out.println(-1);
            out.close();
            return;
        }

        if ((nDiff & 1) == 1) {
            s3[differingIndexList.get(nDiff - 1)] = getDifferingCharacter(s1[differingIndexList.get(nDiff - 1)], s2[differingIndexList.get(nDiff - 1)]);
            t--;
        }
        for (int i = 0, l = nDiff - (nDiff & 1), flag = 0; i < l && t > 0; i++) {
            int p = differingIndexList.get(i);
            if (flag == 0) {
                s3[p] = s1[p];
                flag = 1;

            } else {
                s3[p] = s2[p];
                flag = 0;

                t--;
            }
        }
        if (t > 0) {
            for (int i = 0; i < nSame && t > 0; i++, t--) {
                int p = similarIndexList.get(i);
                s3[p] = getDifferingCharacter(s1[p], s2[p]);
            }
        }
        if (t > 0) {
            for (int i = 0, l = nDiff - (nDiff & 1); i < l && t > 0; i += 2) {
                int p = differingIndexList.get(i);
                s3[p] = getDifferingCharacter(s1[p], s2[p]);
                p = differingIndexList.get(i + 1);
                s3[p] = getDifferingCharacter(s1[p], s2[p]);
                t--;
            }
        }

        for (int i = 0; i < n; i++) {
            if (!(s3[i] >= 'a' && s3[i] <= 'z')) {
                s3[i] = s1[i];
            }
        }
        out.println(new String(s3));
        out.close();
    }

    private static char getDifferingCharacter(char a, char b) {
        if (Math.abs(a - b) < 2) {
            return (char) (((Math.max(a, b) - 97 + 1) % 26) + 97);
        }
        return (char) ((a + b) >> 1);
    }
}