#include <bits/stdc++.h>
using namespace std;
int n, pos[100007], cnt[100007];
char st[100007];
int get_cnt(int l, int r) {
  if (l == 0) {
    return cnt[r];
  }
  return cnt[r] - cnt[l - 1];
}
int main() {
  int i, l, r, best = 0, resl = 0, resr = -1;
  stack<int> S;
  scanf("%s", &st);
  n = strlen(st);
  memset(pos, -1, sizeof pos);
  for (i = 0; i < n; i++) {
    if (i != 0) {
      cnt[i] = cnt[i - 1];
    }
    if (st[i] == '[') {
      cnt[i]++;
    }
  }
  for (i = 0; i < n; i++) {
    if (st[i] == '(') {
      S.push(i);
    } else if (st[i] == ')') {
      if (!S.empty() && st[S.top()] == '(') {
        pos[S.top()] = i;
        S.pop();
      } else {
        while (!S.empty()) {
          S.pop();
        }
      }
    } else if (st[i] == '[') {
      S.push(i);
    } else {
      if (!S.empty() && st[S.top()] == '[') {
        pos[S.top()] = i;
        S.pop();
      } else {
        while (!S.empty()) {
          S.pop();
        }
      }
    }
  }
  l = 0;
  r = -1;
  for (i = 0; i < n; i++) {
    if (pos[i] == -1) {
      continue;
    }
    if (i == r + 1) {
      r = pos[i];
    } else {
      l = i;
      r = pos[i];
    }
    if (get_cnt(l, r) > best) {
      best = get_cnt(l, r);
      resl = l;
      resr = r;
    }
    i = r;
  }
  cout << best << endl;
  for (i = resl; i <= resr; i++) {
    cout << st[i];
  }
  cout << endl;
  return 0;
}
