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 s;
int cor[100001], score[100001];
int check(int idx) {
  int& ans = cor[idx];
  if (ans != -1) return ans;
  int idx2 = idx + 1;
  while (0 <= idx2 && idx2 < s.length() && (s[idx2] == '(' || s[idx2] == '['))
    idx2 = check(idx2) + 1;
  if (0 > idx2 || idx2 >= s.length())
    ans = -2;
  else if ((s[idx] == '(' && s[idx2] == ')') ||
           (s[idx] == '[' && s[idx2] == ']'))
    ans = idx2;
  else
    ans = -2;
  while (ans != -2 && ans != s.length() && check(ans + 1) != -2) {
    ans = check(ans + 1);
  }
  return ans;
}
int main() {
  ios::sync_with_stdio(0);
  cin >> s;
  score[0] = 0;
  for (int i = 0; i < s.length(); ++i) score[i + 1] = score[i] + (s[i] == '[');
  memset(cor, -1, sizeof cor);
  int best = -1, bestVal = -1;
  for (int i = 0; i < s.length(); ++i)
    if (s[i] == '(' || s[i] == '[') {
      int j = check(i);
      if (j != -2 && bestVal < score[j + 1] - score[i])
        best = i, bestVal = score[j + 1] - score[i];
    }
  if (best == -1)
    cout << 0 << endl;
  else {
    cout << bestVal << endl;
    for (int i = best; i <= check(best); ++i) cout << s[i];
    cout << endl;
  }
}
