#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1000000;
struct idk {
  int suma, minim, maxim;
};
idk arbint[4 * NMAX + 5];
void update(int nod, int st, int dr, int poz, int val) {
  if (poz < st or poz > dr) return;
  if (st == dr) {
    arbint[nod].suma = arbint[nod].minim = arbint[nod].maxim = val;
    return;
  }
  int mij = (st + dr) / 2;
  if (poz <= mij)
    update(2 * nod, st, mij, poz, val);
  else
    update(2 * nod + 1, mij + 1, dr, poz, val);
  arbint[nod].suma = arbint[2 * nod].suma + arbint[2 * nod + 1].suma;
  arbint[nod].minim = min(arbint[2 * nod].minim,
                          arbint[2 * nod].suma + arbint[2 * nod + 1].minim);
  arbint[nod].maxim = max(arbint[2 * nod].maxim,
                          arbint[2 * nod].suma + arbint[2 * nod + 1].maxim);
}
char c[NMAX];
int main() {
  int n, poz = 1;
  cin >> n;
  cin >> (c + 1);
  for (int i = 1; i <= n; i++) {
    if (c[i] == 'L') {
      if (poz > 1) poz--;
    } else if (c[i] == 'R')
      poz++;
    else if (c[i] == '(')
      update(1, 1, NMAX, poz, 1);
    else if (c[i] == ')')
      update(1, 1, NMAX, poz, -1);
    else
      update(1, 1, NMAX, poz, 0);
    if (arbint[1].suma == 0 and arbint[1].minim >= 0)
      cout << arbint[1].maxim << ' ';
    else
      cout << "-1" << ' ';
  }
  return 0;
}
