#include <bits/stdc++.h>
#pragma GCC optimize(3, "Ofast", "inline")
using namespace std;
const int maxn = 1e6;
const int mod = 1000000007;
const int inf = 0x3f3f3f3f;
int maxx[maxn << 2], minn[maxn << 2], sum[maxn << 2];
void push_up(int st) {
  sum[st] = sum[st << 1] + sum[st << 1 | 1];
  minn[st] = min(minn[st << 1], minn[st << 1 | 1] + sum[st << 1]);
  maxx[st] = max(maxx[st << 1], maxx[st << 1 | 1] + sum[st << 1]);
}
void update(int st, int l, int r, int s, int e) {
  if (l == r && l == s) {
    sum[st] = minn[st] = maxx[st] = e;
    return;
  }
  int mid = (l + r) >> 1;
  if (s <= mid)
    update(st << 1, l, mid, s, e);
  else
    update(st << 1 | 1, mid + 1, r, s, e);
  push_up(st);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ;
  int n;
  string a;
  cin >> n >> a;
  int pos = 1;
  for (auto &i : a) {
    if (i == 'R')
      ++pos;
    else if (i == 'L')
      pos = max(1, pos - 1);
    else {
      if (i == '(')
        update(1, 1, n, pos, 1);
      else if (i == ')')
        update(1, 1, n, pos, -1);
      else
        update(1, 1, n, pos, 0);
    }
    if (sum[1] != 0 || minn[1] < 0)
      cout << -1 << ' ';
    else
      cout << maxx[1] << ' ';
  }
  return 0;
}
