#include <bits/stdc++.h>
using namespace std;
string str;
int cum[100005];
struct node {
  int l, r, c;
} ar[400005], br[400005];
stack<pair<int, int> > st;
vector<int> v;
pair<int, int> p;
bool cmp(node a, node b) { return a.c > b.c; }
bool cmp1(node a, node b) { return a.l < b.l; }
int main() {
  int len, i, cnt, now, id, tot, j;
  cin >> str;
  len = str.size();
  str = "#" + str;
  for (i = 1; i <= len; i++) {
    if (str[i] == '[') cum[i] = 1;
  }
  for (i = 1; i <= len; i++) cum[i] += cum[i - 1];
  cnt = 0;
  for (i = 1; i <= len; i++) {
    if (str[i] == '(' or str[i] == '[') {
      if (str[i] == '(') {
        st.push(make_pair(1, i));
      } else {
        st.push(make_pair(2, i));
      }
    } else {
      if (st.size() > 0) {
        p = st.top();
        st.pop();
        id = p.first;
        if (str[i] == ')') {
          if (id == 1) {
            ar[cnt].l = p.second;
            ar[cnt].r = i;
            ar[cnt].c = cum[i] - cum[p.second - 1];
            cnt++;
          } else {
            while (st.size() > 0) st.pop();
          }
        } else {
          if (id == 2) {
            ar[cnt].l = p.second;
            ar[cnt].r = i;
            ar[cnt].c = cum[i] - cum[p.second - 1];
            cnt++;
          } else {
            while (st.size() > 0) st.pop();
          }
        }
      }
    }
  }
  sort(ar, ar + cnt, cmp1);
  tot = 0;
  j = 0;
  now = 0;
  while (j < cnt) {
    now = ar[j].r;
    v.push_back(j);
    while (j + 1 < cnt and now >= ar[j + 1].r) j++;
    j++;
  }
  int sz = v.size();
  for (j = 0; j < sz; j++) {
    br[tot].l = ar[v[j]].l;
    while (j + 1 < sz and ar[v[j]].r + 1 == ar[v[j + 1]].l) {
      j++;
    }
    br[tot].r = ar[v[j]].r;
    br[tot].c = cum[br[tot].r] - cum[br[tot].l - 1];
    tot++;
  }
  sort(br, br + tot, cmp);
  cout << br[0].c << endl;
  if (tot > 0) {
    for (i = br[0].l; i <= br[0].r; i++) cout << str[i];
  }
}
