#include <bits/stdc++.h>
using namespace std;
long long base = 10;
long long base_size = 1;
string ANS;
class Big_int {
 public:
  long long size;
  vector<long long> arr;
  Big_int(const string &b) {
    string s1 = b;
    reverse(s1.begin(), s1.end());
    while (!s1[s1.size() - 1]) {
      s1.pop_back();
    }
    reverse(s1.begin(), s1.end());
    arr.resize(s1.size(), 0);
    for (long long i = 0; i < s1.size(); i++) {
      arr[i] = s1[s1.size() - 1 - i] - '0';
    }
    size = s1.size();
  }
  Big_int() {}
  long long operator>(const Big_int &c) const {
    vector<long long> a = this->arr;
    vector<long long> b = c.arr;
    if (a.size() > b.size()) {
      return 1;
    }
    if (b.size() > a.size()) {
      return 0;
    }
    for (long long i = a.size() - 1; i >= 0; i--) {
      if (a[i] > b[i]) {
        return 1;
      }
      if (a[i] < b[i]) {
        return 0;
      }
    }
    return 0;
  }
  long long operator<(const Big_int &c) const { return (c > *this); }
  void operator=(const Big_int &b) {
    arr = b.arr;
    size = b.size;
  }
  long long operator==(const Big_int &c) const {
    return !(c > *this) && !(c < *this);
  }
  Big_int operator+(const Big_int &b) const {
    Big_int c;
    vector<long long> arr1 = this->arr;
    vector<long long> arr2 = b.arr;
    vector<long long> arr3(max(arr1.size(), arr2.size()) + 1, 0);
    if (arr1.size() > arr2.size()) {
      while (arr2.size() != arr1.size()) {
        arr2.push_back(0);
      }
    } else {
      while (arr2.size() != arr1.size()) {
        arr1.push_back(0);
      }
    }
    for (long long i = 0; i < arr1.size(); i++) {
      arr3[i] = arr1[i] + arr2[i] + arr3[i];
      arr3[i + 1] = arr3[i] / base;
      arr3[i] = arr3[i] % base;
    }
    if (!arr3.back()) {
      arr3.pop_back();
    }
    c.arr = arr3;
    c.size = arr3.size();
    return c;
  }
  Big_int operator-(const Big_int &b) const {
    Big_int c;
    vector<long long> arr1 = this->arr;
    vector<long long> arr2 = b.arr;
    for (long long i = 0; i < arr2.size(); i++) {
      arr2[i] *= -1;
    }
    vector<long long> arr3(max(arr1.size(), arr2.size()) + 1, 0);
    if (arr1.size() > arr2.size()) {
      while (arr2.size() != arr1.size()) {
        arr2.push_back(0);
      }
    } else {
      while (arr2.size() != arr1.size()) {
        arr1.push_back(0);
      }
    }
    for (long long i = 0; i < arr1.size(); i++) {
      arr3[i] = arr1[i] + arr2[i] + arr3[i];
      if (arr3[i] < 0) {
        arr3[i] += base;
        arr3[i + 1]--;
      }
    }
    for (long long i = 0; i < arr3.size(); i++) {
      arr3[i] = (arr3[i] + base) % base;
    }
    while (!arr3.back()) {
      arr3.pop_back();
    }
    if (arr3.size() == 0) arr3.push_back(0);
    c.arr = arr3;
    c.size = arr3.size();
    return c;
  }
  Big_int operator*(const Big_int &b) const {
    Big_int c;
    vector<long long> arr1 = this->arr;
    vector<long long> arr2 = b.arr;
    long long n = arr1.size();
    long long m = arr2.size();
    vector<long long> arr3(n + m, 0);
    if ((arr1.size() == 1 && arr1[0] == 0) ||
        (arr2.size() == 1 && arr2[0] == 0)) {
      arr3.resize(1, 0);
      c.arr = arr3;
      c.size = 1;
      return c;
    }
    for (long long i = 0; i < n; i++) {
      for (long long j = 0; j < m; j++) {
        arr3[i + j] += arr1[i] * arr2[j];
        arr3[i + j + 1] += arr3[i + j] / base;
        arr3[i + j] %= base;
      }
    }
    for (long long i = 0; i < n + m - 1; i++) {
      arr3[i + 1] += arr3[i] / base;
      arr3[i] %= base;
    }
    if (!arr3[n + m - 1]) {
      arr3.pop_back();
    }
    c.size = arr3.size();
    c.arr = arr3;
    return c;
  }
  Big_int operator/(const long long &k) const {
    Big_int c;
    vector<long long> arr1 = this->arr;
    vector<long long> arr3;
    reverse(arr1.begin(), arr1.end());
    long long now = 0;
    bool b = 0;
    for (long long i = 0; i < arr1.size(); i++) {
      now *= base;
      now += arr1[i];
      if (now >= k) {
        arr3.push_back(now / k);
        now %= k;
        b = 1;
      } else {
        if (b) {
          arr3.push_back(0);
        }
      }
    }
    if (arr3.size() == 0) {
      arr3.push_back(0);
    }
    reverse(arr3.begin(), arr3.end());
    c.arr = arr3;
    c.size = arr3.size();
    return c;
  }
  long long operator%(const long long &k) const {
    Big_int c;
    vector<long long> arr1 = this->arr;
    vector<long long> arr3;
    reverse(arr1.begin(), arr1.end());
    long long now = 0;
    bool b = 0;
    for (long long i = 0; i < arr1.size(); i++) {
      now *= base;
      now += arr1[i];
      if (now >= k) {
        arr3.push_back(now / k);
        now %= k;
        b = 1;
      } else {
        if (b) {
          arr3.push_back(0);
        }
      }
    }
    reverse(arr3.begin(), arr3.end());
    c.arr = arr3;
    c.size = arr3.size();
    return now;
  }
  Big_int operator/(const Big_int &b) const {
    Big_int a = *this;
    Big_int ed("1");
    Big_int zer("0");
    Big_int l = zer;
    Big_int r;
    if (a > b) {
      r = a;
    } else {
      r = b;
    }
    r = r + ed;
    Big_int l1 = l + ed;
    while (!(r == l1)) {
      Big_int m = l + r;
      m = m / 2;
      l1 = l + ed;
      Big_int mult = m * b;
      if (mult > a) {
        r = m;
      } else {
        l = m;
      }
    }
    return l;
  }
  Big_int operator%(const Big_int &b) const {
    Big_int a = *(this);
    Big_int c = a / b;
    Big_int ans = c * b;
    Big_int Ans = a - ans;
    return Ans;
  }
  friend istream &operator>>(istream &read, Big_int &a) {
    string b;
    read >> b;
    reverse(b.begin(), b.end());
    a.arr.resize(((b.size() - 1) / base_size) + 1, 0);
    for (long long i = 0; i < b.size() / base_size; i++) {
      string now = b.substr(base_size * i, base_size);
      reverse(now.begin(), now.end());
      a.arr[i] = now[0] - 'a';
    }
    string c;
    for (long long i = base_size * ((b.size() / base_size)); i < b.size();
         i++) {
      c.push_back(b[i]);
    }
    reverse(c.begin(), c.end());
    if (c.size()) {
      a.arr.back() = stoll(c);
    }
    a.size = b.size();
    return read;
  }
  friend ostream &operator<<(ostream &print, const Big_int &a) {
    ANS.push_back((char)(a.arr[a.arr.size() - 1] + 'a'));
    for (long long i = 1; i < a.arr.size(); i++) {
      ANS.push_back((char)(a.arr[a.arr.size() - i - 1] + 'a'));
    };
    return print;
  }
};
signed main() {
  long long k;
  cin >> k;
  base = 26;
  Big_int s, t;
  Big_int one("1");
  cin >> s >> t;
  Big_int c = s + t;
  c = c / 2;
  cout << c;
  for (long long i = 0; i < k - ANS.size(); i++) {
    cout << "a";
  }
  cout << ANS;
}

### Prompt

In Cpp, your task is to solve the following problem:

You are given two strings s and t, both consisting of exactly k lowercase Latin letters, s is lexicographically less than t.

Let's consider list of all strings consisting of exactly k lowercase Latin letters, lexicographically not less than s and not greater than t (including s and t) in lexicographical order. For example, for k=2, s="az" and t="bf" the list will be ["az", "ba", "bb", "bc", "bd", "be", "bf"].

Your task is to print the median (the middle element) of this list. For the example above this will be "bc".

It is guaranteed that there is an odd number of strings lexicographically not less than s and not greater than t.

Input

The first line of the input contains one integer k (1 ≤ k ≤ 2 ⋅ 10^5) — the length of strings.

The second line of the input contains one string s consisting of exactly k lowercase Latin letters.

The third line of the input contains one string t consisting of exactly k lowercase Latin letters.

It is guaranteed that s is lexicographically less than t.

It is guaranteed that there is an odd number of strings lexicographically not less than s and not greater than t.

Output

Print one string consisting exactly of k lowercase Latin letters — the median (the middle element) of list of strings of length k lexicographically not less than s and not greater than t.

Examples

Input


2
az
bf


Output


bc


Input


5
afogk
asdji


Output


alvuw


Input


6
nijfvj
tvqhwp


Output


qoztvz

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
long long base = 10;
long long base_size = 1;
string ANS;
class Big_int {
 public:
  long long size;
  vector<long long> arr;
  Big_int(const string &b) {
    string s1 = b;
    reverse(s1.begin(), s1.end());
    while (!s1[s1.size() - 1]) {
      s1.pop_back();
    }
    reverse(s1.begin(), s1.end());
    arr.resize(s1.size(), 0);
    for (long long i = 0; i < s1.size(); i++) {
      arr[i] = s1[s1.size() - 1 - i] - '0';
    }
    size = s1.size();
  }
  Big_int() {}
  long long operator>(const Big_int &c) const {
    vector<long long> a = this->arr;
    vector<long long> b = c.arr;
    if (a.size() > b.size()) {
      return 1;
    }
    if (b.size() > a.size()) {
      return 0;
    }
    for (long long i = a.size() - 1; i >= 0; i--) {
      if (a[i] > b[i]) {
        return 1;
      }
      if (a[i] < b[i]) {
        return 0;
      }
    }
    return 0;
  }
  long long operator<(const Big_int &c) const { return (c > *this); }
  void operator=(const Big_int &b) {
    arr = b.arr;
    size = b.size;
  }
  long long operator==(const Big_int &c) const {
    return !(c > *this) && !(c < *this);
  }
  Big_int operator+(const Big_int &b) const {
    Big_int c;
    vector<long long> arr1 = this->arr;
    vector<long long> arr2 = b.arr;
    vector<long long> arr3(max(arr1.size(), arr2.size()) + 1, 0);
    if (arr1.size() > arr2.size()) {
      while (arr2.size() != arr1.size()) {
        arr2.push_back(0);
      }
    } else {
      while (arr2.size() != arr1.size()) {
        arr1.push_back(0);
      }
    }
    for (long long i = 0; i < arr1.size(); i++) {
      arr3[i] = arr1[i] + arr2[i] + arr3[i];
      arr3[i + 1] = arr3[i] / base;
      arr3[i] = arr3[i] % base;
    }
    if (!arr3.back()) {
      arr3.pop_back();
    }
    c.arr = arr3;
    c.size = arr3.size();
    return c;
  }
  Big_int operator-(const Big_int &b) const {
    Big_int c;
    vector<long long> arr1 = this->arr;
    vector<long long> arr2 = b.arr;
    for (long long i = 0; i < arr2.size(); i++) {
      arr2[i] *= -1;
    }
    vector<long long> arr3(max(arr1.size(), arr2.size()) + 1, 0);
    if (arr1.size() > arr2.size()) {
      while (arr2.size() != arr1.size()) {
        arr2.push_back(0);
      }
    } else {
      while (arr2.size() != arr1.size()) {
        arr1.push_back(0);
      }
    }
    for (long long i = 0; i < arr1.size(); i++) {
      arr3[i] = arr1[i] + arr2[i] + arr3[i];
      if (arr3[i] < 0) {
        arr3[i] += base;
        arr3[i + 1]--;
      }
    }
    for (long long i = 0; i < arr3.size(); i++) {
      arr3[i] = (arr3[i] + base) % base;
    }
    while (!arr3.back()) {
      arr3.pop_back();
    }
    if (arr3.size() == 0) arr3.push_back(0);
    c.arr = arr3;
    c.size = arr3.size();
    return c;
  }
  Big_int operator*(const Big_int &b) const {
    Big_int c;
    vector<long long> arr1 = this->arr;
    vector<long long> arr2 = b.arr;
    long long n = arr1.size();
    long long m = arr2.size();
    vector<long long> arr3(n + m, 0);
    if ((arr1.size() == 1 && arr1[0] == 0) ||
        (arr2.size() == 1 && arr2[0] == 0)) {
      arr3.resize(1, 0);
      c.arr = arr3;
      c.size = 1;
      return c;
    }
    for (long long i = 0; i < n; i++) {
      for (long long j = 0; j < m; j++) {
        arr3[i + j] += arr1[i] * arr2[j];
        arr3[i + j + 1] += arr3[i + j] / base;
        arr3[i + j] %= base;
      }
    }
    for (long long i = 0; i < n + m - 1; i++) {
      arr3[i + 1] += arr3[i] / base;
      arr3[i] %= base;
    }
    if (!arr3[n + m - 1]) {
      arr3.pop_back();
    }
    c.size = arr3.size();
    c.arr = arr3;
    return c;
  }
  Big_int operator/(const long long &k) const {
    Big_int c;
    vector<long long> arr1 = this->arr;
    vector<long long> arr3;
    reverse(arr1.begin(), arr1.end());
    long long now = 0;
    bool b = 0;
    for (long long i = 0; i < arr1.size(); i++) {
      now *= base;
      now += arr1[i];
      if (now >= k) {
        arr3.push_back(now / k);
        now %= k;
        b = 1;
      } else {
        if (b) {
          arr3.push_back(0);
        }
      }
    }
    if (arr3.size() == 0) {
      arr3.push_back(0);
    }
    reverse(arr3.begin(), arr3.end());
    c.arr = arr3;
    c.size = arr3.size();
    return c;
  }
  long long operator%(const long long &k) const {
    Big_int c;
    vector<long long> arr1 = this->arr;
    vector<long long> arr3;
    reverse(arr1.begin(), arr1.end());
    long long now = 0;
    bool b = 0;
    for (long long i = 0; i < arr1.size(); i++) {
      now *= base;
      now += arr1[i];
      if (now >= k) {
        arr3.push_back(now / k);
        now %= k;
        b = 1;
      } else {
        if (b) {
          arr3.push_back(0);
        }
      }
    }
    reverse(arr3.begin(), arr3.end());
    c.arr = arr3;
    c.size = arr3.size();
    return now;
  }
  Big_int operator/(const Big_int &b) const {
    Big_int a = *this;
    Big_int ed("1");
    Big_int zer("0");
    Big_int l = zer;
    Big_int r;
    if (a > b) {
      r = a;
    } else {
      r = b;
    }
    r = r + ed;
    Big_int l1 = l + ed;
    while (!(r == l1)) {
      Big_int m = l + r;
      m = m / 2;
      l1 = l + ed;
      Big_int mult = m * b;
      if (mult > a) {
        r = m;
      } else {
        l = m;
      }
    }
    return l;
  }
  Big_int operator%(const Big_int &b) const {
    Big_int a = *(this);
    Big_int c = a / b;
    Big_int ans = c * b;
    Big_int Ans = a - ans;
    return Ans;
  }
  friend istream &operator>>(istream &read, Big_int &a) {
    string b;
    read >> b;
    reverse(b.begin(), b.end());
    a.arr.resize(((b.size() - 1) / base_size) + 1, 0);
    for (long long i = 0; i < b.size() / base_size; i++) {
      string now = b.substr(base_size * i, base_size);
      reverse(now.begin(), now.end());
      a.arr[i] = now[0] - 'a';
    }
    string c;
    for (long long i = base_size * ((b.size() / base_size)); i < b.size();
         i++) {
      c.push_back(b[i]);
    }
    reverse(c.begin(), c.end());
    if (c.size()) {
      a.arr.back() = stoll(c);
    }
    a.size = b.size();
    return read;
  }
  friend ostream &operator<<(ostream &print, const Big_int &a) {
    ANS.push_back((char)(a.arr[a.arr.size() - 1] + 'a'));
    for (long long i = 1; i < a.arr.size(); i++) {
      ANS.push_back((char)(a.arr[a.arr.size() - i - 1] + 'a'));
    };
    return print;
  }
};
signed main() {
  long long k;
  cin >> k;
  base = 26;
  Big_int s, t;
  Big_int one("1");
  cin >> s >> t;
  Big_int c = s + t;
  c = c / 2;
  cout << c;
  for (long long i = 0; i < k - ANS.size(); i++) {
    cout << "a";
  }
  cout << ANS;
}

```