#include <bits/stdc++.h>
using namespace std;
const int maxn = 200001;
vector<int> g[maxn];
bool was[maxn];
int d[maxn];
bool dfs(int v) {
  was[v] = 1;
  for (auto x : g[v]) {
    if (was[x]) {
      if (d[x] == d[v]) return false;
      continue;
    }
    d[x] = d[v] ^ 1;
    if (!dfs(x)) return false;
  }
  return true;
}
vector<pair<int, int> > edges;
int main() {
  int k;
  cin >> k;
  string s, t;
  cin >> s >> t;
  vector<int> a, b;
  for (auto x : s) {
    a.push_back(x - 'a');
  }
  for (auto x : t) {
    b.push_back(x - 'a');
  }
  reverse(a.begin(), a.end());
  reverse(b.begin(), b.end());
  vector<int> tmp;
  int c = 0;
  for (int i = 0; i < a.size(); i++) {
    tmp.push_back((a[i] + b[i] + c) % 26);
    c = (a[i] + b[i] + c) / 26;
  }
  if (c) tmp.push_back(c);
  vector<int> res;
  c = 0;
  while (tmp.size()) {
    int v = tmp.back();
    tmp.pop_back();
    int el = c * 26 + v;
    res.push_back(el / 2);
    c = el % 2;
  }
  reverse(res.begin(), res.end());
  if (res.size() > k) res.pop_back();
  c = 1;
  for (int i = 0; i < a.size(); i++) {
    tmp.push_back((res[i] + c) % 26);
    c = (res[i] + c) / 26;
  }
  reverse(res.begin(), res.end());
  for (auto x : res) {
    cout << (char)(x + 'a');
  }
  cout << endl;
  return 0;
}
