#include <bits/stdc++.h>
using namespace std;
const int maxN = 50010;
struct tt {
  int x, vt;
};
char s[maxN];
int a[maxN], b[maxN];
int n = 0, m = 0;
struct hd {
  bool operator()(tt x, tt y) { return x.x < y.x; }
};
void nhap() {
  scanf("%s", &s);
  n = strlen(s);
  for (int i = 0; i < n; i++)
    if (s[i] == '?') ++m;
  for (int i = 0; i < m; i++) scanf("%i%i", &a[i], &b[i]);
}
void xuly() {
  priority_queue<tt, vector<tt>, hd> heap;
  while (!heap.empty()) heap.pop();
  int open = 0;
  long long ans = 0;
  int j = 0;
  for (int i = 0; i < n; i++) {
    if (s[i] == '(')
      ++open;
    else if (s[i] == ')')
      --open;
    else {
      s[i] = ')';
      --open;
      tt tam;
      tam.x = b[j] - a[j];
      tam.vt = i;
      heap.push(tam);
      ans += b[j];
      j++;
    }
    if (open < 0) {
      if (heap.empty()) {
        printf("-1");
        return;
      }
      tt tam = heap.top();
      heap.pop();
      s[tam.vt] = '(';
      ans -= tam.x;
      open = 1;
    }
  }
  if (open != 0) {
    printf("-1");
    return;
  }
  printf("%I64d\n", ans);
  printf("%s", s);
}
int main() {
  nhap();
  xuly();
  return 0;
}
