#include <bits/stdc++.h>
using namespace std;
vector<long long> lazy(4 * 1000005, -1), t(4 * 1000005), seg(1000005);
void build(long long v, long long tl, long long tr) {
  if (tl == tr) {
    t[v] = seg[tl];
  } else {
    long long tm = (tl + tr) / 2;
    build(v * 2, tl, tm);
    build(v * 2 + 1, tm + 1, tr);
    t[v] = max(t[v * 2], t[2 * v + 1]);
  }
}
void update(long long v, long long tl, long long tr, long long l, long long r,
            long long add) {
  if (l > r) return;
  if (l == tl && r == tr) {
    t[v] = max(t[v], add);
  } else {
    long long tm = (tl + tr) / 2;
    update(v * 2, tl, tm, l, min(r, tm), add);
    update(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r, add);
    t[v] = max(t[v * 2], t[v * 2 + 1]);
  }
}
long long get(long long v, long long tl, long long tr, long long l,
              long long r) {
  if (l > r) return 0;
  if (l == tl && r == tr) {
    return t[v];
  }
  long long tm = (tl + tr) / 2;
  return max(get(v * 2, tl, tm, l, min(r, tm)),
             get(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
}
const long long mx = 5;
long long fact[mx];
inline long long add(long long x, long long y) {
  if (x + y >= 998244353) return x + y - 998244353;
  return x + y;
}
inline long long sub(long long x, long long y) {
  if (x - y < 0) return x - y + 998244353;
  return x - y;
}
inline long long mul(long long x, long long y) {
  return 1LL * x * y % 998244353;
}
long long power(long long x, long long y) {
  long long res = 1;
  while (y) {
    if (y & 1) res = res * x % 998244353;
    y >>= 1;
    x = x * x % 998244353;
  }
  return res;
}
long long modExp(long long x, long long n, long long M) {
  long long result = 1;
  while (n > 0) {
    if (n % 2 == 1) result = (result * x) % M;
    x = (x * x) % M;
    n = n / 2;
  }
  return result;
}
long long invmod(long long x) { return power(x, 998244353 - 2); }
long long ncr(long long n, long long r) {
  if (n < 0) return 0;
  if (n < r) return 0;
  return fact[n] * invmod(1LL * fact[r] * fact[n - r] % 998244353) % 998244353;
}
void fac() {
  fact[0] = 1;
  for (long long i = 1; i < mx; i++) {
    fact[i] = 1LL * fact[i - 1] * i % 998244353;
  }
}
vector<long long> v[500005];
long long vis[500005];
vector<long long> z;
void dfs(long long x) {
  vis[x] = 1;
  z.push_back(x);
  for (long long u : v[x]) {
    if (!vis[u]) dfs(u);
  }
}
void solve() {
  long long n;
  cin >> n;
  string s;
  cin >> s;
  stack<long long> st;
  vector<long long> v(n);
  for (long long i = 0; i < n; i++) {
    if (s[i] == '(') {
      if (st.empty()) {
        st.push(0);
        v[i] = 0;
      } else {
        v[i] = 1 - st.top();
        st.push(1 - st.top());
      }
    } else {
      v[i] = st.top();
      st.pop();
    }
  }
  for (long long u : v) cout << u;
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long tc = 1;
  while (tc--) {
    solve();
  }
  return 0;
}
