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
import java.util.*;

public class Main {

  public static void main(String args[]) {
    (new Main()).solve();
  }

  void solve() {

    Scanner cin = new Scanner(System.in);
    String s = cin.next();

    List<int[]> valid = new ArrayList<int[]>();
    int N = s.length();

    for(int i=0; i<N; ++i) {

      int L = i;
      int R = i + 1;
      int score = 0;

      while( L >= 0 && R < N ) {
        if( (s.charAt(L) == '(' && s.charAt(R) == ')') ||
            (s.charAt(L) == '[' && s.charAt(R) == ']') ) {
          if( s.charAt(L) == '[' ) { ++score; }
          --L;
          ++R;
        }
        else {
          if( valid.size() > 0 ) {
            int last[] = valid.get(valid.size() - 1);
            if( last[1] == L ) {
              L = last[0] - 1;
              score += last[2];
              valid.remove(valid.size() - 1);
              continue;
            }
          }
          break;
        }
      }

      ++L;
      --R;

      if( L < R ) {
        if( valid.size() > 0 ) {
          int last[] = valid.get(valid.size() - 1);
          if( last[1] == L - 1 ) {
            last[1] = R;
            last[2] += score;
            continue;
          }
        }
        valid.add(new int[] { L, R, score });
        i = R;
      }

    }

    int ret[] = new int[] { 0, -1, 0 };
    for( int ans[] : valid ) {
      if( ans[2] >= ret[2] ) {
        ret = ans;
      }
    }

    System.out.println(ret[2]);
    System.out.println(s.substring(ret[0], ret[1] + 1));

  }

}
