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;
string str;
long long int n, i, op[100001], cnt[100001], beg, fin, ctr, maxi;
stack<long long int> st;
int main() {
  cin >> str;
  n = str.length();
  for (i = 0; i < n; i++) op[i] = -1;
  for (i = 0; i < n; i++) {
    if (str[i] == '(' || str[i] == '[')
      st.push(i);
    else {
      if (!st.size()) {
        op[i] = -1;
      } else if (str[i] == ')' && str[st.top()] == '(') {
        op[i] = st.top();
        st.pop();
      } else if (str[i] == ']' && str[st.top()] == '[') {
        op[i] = st.top();
        st.pop();
      } else {
        op[i] = -1;
        while (st.size()) st.pop();
      }
    }
  }
  for (i = 0; i < n; i++) {
    if (op[i] > 0) {
      if ((op[op[i] - 1] != -1) &&
          (str[op[i] - 1] == ')' || str[op[i] - 1] == ']'))
        op[i] = op[op[i] - 1];
    }
  }
  cnt[0] = 0;
  if (str[0] == '[') cnt[0] = 1;
  for (i = 1; i < n; i++) {
    if (str[i] == '[')
      cnt[i] = cnt[i - 1] + 1;
    else
      cnt[i] = cnt[i - 1];
  }
  beg = 0;
  fin = -1;
  maxi = 0;
  for (i = 0; i < n; i++) {
    if (op[i] != -1) {
      ctr = cnt[i];
      if (op[i] > 0) ctr -= cnt[op[i] - 1];
      if (ctr >= maxi) {
        maxi = ctr;
        beg = op[i];
        fin = i;
      }
    }
  }
  cout << maxi << endl;
  if (!maxi) return 0;
  for (i = beg; i <= fin; i++) cout << str[i];
  return 0;
}
