Task:

 Generate a string with   N   opening brackets   [   and with   N   closing brackets   ],   in some arbitrary order. 
 Determine whether the generated string is balanced; that is, whether it consists entirely of pairs of opening/closing brackets (in that order), none of which mis-nest.


Examples

   (empty)      OK
   []           OK   
   [][]         OK   
   [[][]]       OK 
   ][         NOT OK
   ][][       NOT OK
   []][[]     NOT OK



unbalanced(data s)
{
    integer b, i;
 
    b = i = 0;
    while (i + ~s && -1 < b) {
        b += s[i -= 1] == '[' ? -1 : 1;
    }
 
    b;
}
 
generate(data b, integer d)
{
    if (d) {
        d.times(l_bill, list(), -1, '[', ']').l_rand().ucall(b_append, 1, b);
    }
}
 
main(void)
{
    integer i;
 
    i = 0;
    while (i < 10) {
        data s;
 
        generate(s, i);
        o_(s, " is ", unbalanced(s) ? "un" : "", "balanced\n");
 
        i += 1;
    }
 
    0;
}