#include <bits/stdc++.h>   using namespace std;   char s[100010];   typedef struct record {     char ch;     int po;   } rec;   int main() {     int leng, ans, l, r;     rec tmp1, tmp2;     int tmp3;     bool flag;     stack<rec> st;     while (~scanf( %s , s)) {       flag = false;       while (!st.empty()) st.pop();       leng = strlen(s);       for (int i = 0; i < leng; i++) {         if (!st.empty()) tmp2 = st.top();         if (!st.empty() && ((tmp2.ch ==  (  && s[i] ==  ) ) ||                             (tmp2.ch ==  [  && s[i] ==  ] ))) {           st.pop();         } else {           tmp1.ch = s[i];           tmp1.po = i;           st.push(tmp1);         }       }       ans = 0;       if (st.empty()) {         for (int i = 0; i < leng; i++)           if (s[i] ==  [ ) ans++;         printf( %d n%s n , ans, s);       } else {         bool once = true;         flag = false;         ans = -1;         int tmpr, tmpl;         while (st.size() != 0) {           tmp3 = 0;           if (once) {             tmpr = leng - 1;             tmpl = st.top().po + 1;             once = false;           } else {             if (st.size() != 1) {               tmpr = st.top().po - 1;               st.pop();               tmpl = st.top().po + 1;             } else {               tmpr = st.top().po - 1;               tmpl = 0;               st.pop();             }           }           if (tmpl < tmpr) {             flag = true;             for (int j = tmpl; j <= tmpr; j++)               if (s[j] ==  [ ) tmp3++;           }           if (tmp3 > ans) {             ans = tmp3;             l = tmpl;             r = tmpr;           }         }         if (flag) {           printf( %d n , ans);           for (int i = l; i <= r; i++) printf( %c , s[i]);           printf(  n );         } else           printf( 0 n );       }     }     return 0;   }   