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 double pi = 3.14159265358979;
int main() {
  string s;
  deque<pair<int, char> > t;
  vector<pair<int, int> > a;
  cin >> s;
  int l = 0, r = -1, ans = 0, tl = s.length(), tr = -1, temp;
  for (int i = 0; i < s.length(); ++i) {
    if (s[i] == ']') {
      if (!t.empty() && t.back().second == '[') {
        tl = min(tl, t.back().first);
        tr = max(tr, i);
        t.pop_back();
      } else {
        if (tl <= tr) a.push_back(make_pair(tl, tr));
        tl = s.length();
        tr = -1;
        while (t.size()) t.pop_back();
      }
    } else if (s[i] == ')') {
      if (!t.empty() && t.back().second == '(') {
        tl = min(tl, t.back().first);
        tr = max(tr, i);
        t.pop_back();
      } else {
        if (tl <= tr) a.push_back(make_pair(tl, tr));
        tl = s.length();
        tr = -1;
        while (t.size()) t.pop_back();
      }
    } else {
      t.push_back(make_pair(i, s[i]));
      if (tl <= tr) {
        a.push_back(make_pair(tl, tr));
        tl = s.length();
        tr = -1;
      }
    }
  }
  if (tl <= tr) {
    a.push_back(make_pair(tl, tr));
    tl = s.length();
    tr = -1;
  }
  tl = s.length();
  tr = -1;
  sort(a.begin(), a.end());
  for (int i = 0; i < a.size(); ++i) {
    if (a[i].first >= tl && a[i].second <= tr) continue;
    if (tr == -1) {
      tl = a[i].first;
      tr = a[i].second;
    } else {
      if (tr == a[i].first - 1) {
        tr = a[i].second;
      } else {
        temp = 0;
        for (int j = tl; j <= tr; ++j) {
          if (s[j] == '[') {
            ++temp;
          }
        }
        if (temp > ans) {
          ans = temp;
          l = tl;
          r = tr;
        }
        tl = a[i].first;
        tr = a[i].second;
      }
    }
  }
  temp = 0;
  for (int j = tl; j <= tr; ++j) {
    if (s[j] == '[') {
      ++temp;
    }
  }
  if (temp > ans) {
    ans = temp;
    l = tl;
    r = tr;
  }
  cout << ans << endl;
  for (int j = l; j <= r; ++j) {
    cout << s[j];
  }
  return 0;
}
