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;
const int maxN = 100000 + 10;
char s[maxN];
int n, d[maxN];
int st[maxN], ns, bot;
int main() {
  scanf("%s", s + 1);
  n = strlen(s + 1);
  d[0] = 0;
  for (int i = 1; i <= n; i++) d[i] = d[i - 1] + (s[i] == '[');
  ns = 0;
  bot = 1;
  st[0] = 0;
  int res = -1, u = 0, v = 0, i = 1, j = 1, cc;
  while (i <= n && j <= n) {
    while (j <= n && s[j] == ']' || s[j] == ')') j++;
    if (j > n) break;
    if (s[i] == '(')
      st[++ns] = i, i++;
    else if (s[i] == '[')
      st[++ns] = -i, i++;
    else if (s[i] == ')') {
      if (ns == 0 || st[ns] < 0) {
        ns = 0;
        st[ns] = i;
        j = ++i;
        continue;
      }
      cc = abs(st[--ns]) + 1;
      if (d[i] - d[cc - 1] > res)
        res = d[i] - d[cc - 1], u = cc, v = i - cc + 1;
      i++;
    } else if (s[i] == ']') {
      if (ns == 0 || st[ns] > 0) {
        ns = 0;
        st[ns] = i;
        j = ++i;
        continue;
      }
      cc = abs(st[--ns]) + 1;
      if (d[i] - d[cc - 1] > res)
        res = d[i] - d[cc - 1], u = cc, v = i - cc + 1;
      i++;
    }
  }
  s[u + v] = 0;
  if (res == -1)
    printf("0\n");
  else
    printf("%d\n%s\n", res, s + u);
  return 0;
}
