#include <bits/stdc++.h>
using namespace std;
char s[100010];
typedef struct record {
  char ch;
  int po;
} rec;
int main() {
  int leng, ans, l, r;
  rec tmp1, tmp2;
  int tmp3;
  bool flag;
  stack<rec> st;
  while (~scanf("%s", s)) {
    flag = false;
    while (!st.empty()) st.pop();
    leng = strlen(s);
    for (int i = 0; i < leng; i++) {
      if (!st.empty()) tmp2 = st.top();
      if (!st.empty() && ((tmp2.ch == '(' && s[i] == ')') ||
                          (tmp2.ch == '[' && s[i] == ']'))) {
        st.pop();
      } else {
        tmp1.ch = s[i];
        tmp1.po = i;
        st.push(tmp1);
      }
    }
    ans = 0;
    if (st.empty()) {
      for (int i = 0; i < leng; i++)
        if (s[i] == '[') ans++;
      printf("%d\n%s\n", ans, s);
    } else {
      bool once = true;
      flag = false;
      ans = -1;
      int tmpr, tmpl;
      while (st.size() != 0) {
        tmp3 = 0;
        if (once) {
          tmpr = leng - 1;
          tmpl = st.top().po + 1;
          once = false;
        } else {
          if (st.size() != 1) {
            tmpr = st.top().po - 1;
            st.pop();
            tmpl = st.top().po + 1;
          } else {
            tmpr = st.top().po - 1;
            tmpl = 0;
            st.pop();
          }
        }
        if (tmpl < tmpr) {
          flag = true;
          for (int j = tmpl; j <= tmpr; j++)
            if (s[j] == '[') tmp3++;
        }
        if (tmp3 > ans) {
          ans = tmp3;
          l = tmpl;
          r = tmpr;
        }
      }
      if (flag) {
        printf("%d\n", ans);
        for (int i = l; i <= r; i++) printf("%c", s[i]);
        printf("\n");
      } else
        printf("0\n");
    }
  }
  return 0;
}
