#include "bits/stdc++.h"
using namespace std;
#define sim template < class c
#define ris return * this
#define dor > debug & operator <<
#define eni(x) sim > typename \
  enable_if<sizeof dud<c>(0) x 1, debug&>::type operator<<(c i) {
sim > struct rge { c b, e; };
sim > rge<c> range(c i, c j) { return rge<c> {i, j}; }
sim > auto dud(c* x) -> decltype(cerr << *x, 0);
sim > char dud(...);
struct debug {
#ifdef LOCAL
    ~debug() { cerr << endl; }
    eni( != ) cerr << boolalpha << i; ris;
}
eni( == ) ris << range(begin(i), end(i));
}
sim, class b dor(pair < b, c > d) {
    ris << "(" << d.first << ", " << d.second << ")";
}
sim dor(rge<c> d) {
    *this << "[";
    for (auto it = d.b; it != d.e; ++it)
        *this << ", " + 2 * (it == d.b) << *it;
    ris << "]";
}
#else
    sim dor(const c&) { ris; }
#endif
};
#define imie(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////

// if right - left >= 2 -- > ans is right + 1
// else ans is right

bool f(string a, string b) {
    string res(a.length(), '0');
    for (int i = 0; i < a.length(); i++) {
        if (a[i] != b[i]) {
            res[i] = '1';
        }
        else {
            res[i] = '0';
        }
    }

    for (int i = 0; i < a.length() - 1; i++) {
        if (res[i] == '1' && res[i + 1] == '0') {
            return false;
        }
    }
    return true;

}

int32_t main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;
    cin >> n;
    string left, right;
    cin >> left;
    cin >> right;

    if (right[0] != left[0]) {// if right has a greater power of two -- > ans is 111111
        cout << string(n, '1') << '\n';
        return 0;
    }
    if (f(left, right)) {
        cout << right << '\n';
    }
    else {
        right[n - 1] = '1';
        cout << right << '\n';
    }
}