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.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Stack;

public class R138qCBracketSequence {

	public static void main(String args[] ) throws Exception {
		   
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	    PrintWriter w = new PrintWriter(System.out);
	    
	    char s[] = br.readLine().toCharArray();
	    Stack<Character> s1 = new Stack<Character>();
	    Stack<Integer> s2 = new Stack<Integer>();
	    int n = s.length,lastUn = -1,ans = 0,ansRight = 0,ansLeft = 0;
	    
	    int count[] = new int[n];
	    count[0] = s[0] == '[' ? 1 : 0;
	    for(int i=1;i<n;i++)
	    	count[i] = count[i-1] + (s[i] == '[' ? 1 : 0);
	    
	    for(int i=0;i<n;i++){
	    	if(s[i] == '('){
	    		s1.push('(');
	    		s2.push(i);
	    	}
	    	else if(s[i] == '['){
	    		s1.push('[');
	    		s2.push(i);
	    	}
	    	else if(s[i] == ')'){
	    		if(s1.isEmpty())
	    			lastUn = i;
	    		else{
	    			if(s1.peek() == '('){
	    				s1.pop();
	    				s2.pop();
	    			}
	    			else{
	    				lastUn = i;
	    				s1.clear();
	    				s2.clear();
	    			}
	    		}
	    	}
	    	else{
	    		if(s1.isEmpty())
	    			lastUn = i;
	    		else{
	    			if(s1.peek() == '['){
	    				s1.pop();
	    				s2.pop();
	    			}
	    			else{
	    				lastUn = i;
	    				s1.clear();
	    				s2.clear();
	    			}
	    		}
	    	}
	    	
	    	int t = s2.isEmpty() ? -1 : s2.peek();
	    	int left = Math.max(lastUn, t);
	    	int der = count[i] - (left >= 0 ? count[left] : 0);
	    	
	    	if(der > ans){
	    		ans = der;
	    		ansLeft = left;
	    		ansRight = i;
	    	}
	    }
	    
	    w.println(ans);
	    for(int i=ansLeft+1;i<=ansRight;i++)
	    	w.print(s[i]);
	    w.println();
	   
	    w.close(); 
	}
	
	public static int ip(String s){
		return Integer.parseInt(s);
	}
	
}
