#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
char x[maxn];
int n, cntOpen[maxn], bracket[maxn];
vector<int> posNormal, posSquare;
int main() {
  scanf("%s", x);
  n = strlen(x);
  for (int i = 0; i < n; i++) {
    if (i) cntOpen[i] = cntOpen[i - 1];
    if (x[i] == '[') cntOpen[i]++;
  }
  memset(bracket, -1, sizeof(bracket));
  for (int i = 0; i < n; i++) {
    if (x[i] == '[')
      posSquare.push_back(i);
    else if (x[i] == '(')
      posNormal.push_back(i);
    else if (x[i] == ']') {
      if (posSquare.empty() ||
          (!posNormal.empty() && posNormal.back() > posSquare.back())) {
        posNormal.clear();
        posSquare.clear();
      } else {
        bracket[posSquare.back()] = i;
        posSquare.pop_back();
      }
    } else {
      if (posNormal.empty() ||
          (!posSquare.empty() && posSquare.back() > posNormal.back())) {
        posNormal.clear();
        posSquare.clear();
      } else {
        bracket[posNormal.back()] = i;
        posNormal.pop_back();
      }
    }
  }
  for (int i = 0; i < n; i++) {
    if (bracket[i] == -1) continue;
    while (bracket[i] + 1 < n && bracket[bracket[i] + 1] != -1)
      bracket[i] = bracket[bracket[i] + 1];
  }
  int size = 0, pos;
  for (int i = 0; i < n; i++)
    if (bracket[i] != -1) {
      int temp = cntOpen[bracket[i]];
      if (i) temp -= cntOpen[i - 1];
      if (temp <= size) continue;
      size = temp;
      pos = i;
    }
  printf("%d\n", size);
  if (size)
    for (int i = pos; i <= bracket[pos]; i++) printf("%c", x[i]);
  return 0;
}
