A bracket sequence is a string, containing only characters "(", ")", "[" and "]".

A correct bracket sequence is a bracket sequence that can be transformed into a correct arithmetic expression by inserting characters "1" and "+" between the original characters of the sequence. For example, bracket sequences "()[]", "([])" are correct (the resulting expressions are: "(1)+[1]", "([1+1]+1)"), and "](" and "[" are not. The empty string is a correct bracket sequence by definition.

A substring s[l... r] (1 ≤ l ≤ r ≤ |s|) of string s = s1s2... s|s| (where |s| is the length of string s) is the string slsl + 1... sr. The empty string is a substring of any string by definition.

You are given a bracket sequence, not necessarily correct. Find its substring which is a correct bracket sequence and contains as many opening square brackets «[» as possible.

Input

The first and the only line contains the bracket sequence as a string, consisting only of characters "(", ")", "[" and "]". It is guaranteed that the string is non-empty and its length doesn't exceed 105 characters.

Output

In the first line print a single integer — the number of brackets «[» in the required bracket sequence. In the second line print the optimal sequence. If there are more than one optimal solutions print any of them.

Examples

Input

([])


Output

1
([])


Input

(((


Output

0
#include <bits/stdc++.h>
using namespace std;
void FastIO() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
}
stack<pair<int, int> > stk;
string ip;
int length;
int main() {
  FastIO();
  cin >> ip;
  length = ip.length();
  int prev[length + 10], open[length + 10];
  pair<int, int> ppp;
  memset(open, 0, sizeof(open));
  if (ip[0] == '[') open[0]++;
  for (int i = 1; i < length; i++) {
    open[i] = open[i - 1];
    if (ip[i] == '[') open[i]++;
  }
  for (int i = 0; i < length; i++) {
    prev[i] = -1;
    if (ip[i] == '(')
      stk.push(make_pair(1, i));
    else if (ip[i] == '[')
      stk.push(make_pair(2, i));
    else if (ip[i] == ']' && !stk.empty()) {
      ppp = stk.top();
      if (ppp.first != 2) {
        stk.push(make_pair(-1, -1));
      }
      if (ppp.first == 2) {
        stk.pop();
        prev[i] = ppp.second;
      }
    } else if (ip[i] == ')' && !stk.empty()) {
      ppp = stk.top();
      if (ppp.first != 1) {
        stk.push(make_pair(-1, -1));
      }
      if (ppp.first == 1) {
        stk.pop();
        prev[i] = ppp.second;
      }
    }
  }
  string anssubsr;
  int ans = 0, t;
  for (int i = 0; i < length; i++) {
    if (prev[i] != -1) {
      t = prev[i];
      while (prev[t - 1] != -1 && t > 0) {
        t = prev[t - 1];
        if (t <= 0) break;
      }
      prev[i] = t;
    }
  }
  int at, from;
  for (int i = 0; i < length; i++) {
    if (prev[i] != -1) {
      t = prev[i];
      prev[i]--;
      if (prev[i] >= 0) open[i] -= open[prev[i]];
      if (open[i] > ans) {
        ans = open[i];
        from = t;
        at = i;
      }
    }
  }
  if (ans != 0) {
    cout << ans << endl;
    for (int k = from; k <= at; k++) cout << ip[k];
    cout << endl;
  } else
    cout << 0 << endl;
  return 0;
}
