function divnn(n, m){ var key = n << 8 | m;
  if(divnn[key]) return divnn[key];
  if(m < 2) return divnn[key] = [[n]];
  for(var r = [], x = 0, left = n - m + 1, min = n / m; left >= min; left--)
    for(var d = divnn(n - left, m - 1), i = 0, l = d.length; i < l; i++)
      if(left >= d[i][0]) r[x++] = [left].concat(d[i]);
  return divnn[key] = r;
}

function young(n, p){
  for(var rects = [], i = n + 1; --i;) rects[i] = Array(i + 1).join('□');
  for(var r = [], x = 0, m = 1; m <= n; m++) for(var d = divnn(n, m), i = 0, l = d.length; i < l;){
    for(var y = d[i++], j = y.length; j--;) y[j] = rects[y[j]];
    r[x++] = y.join('\n');
  }
  p(r.join('\n\n'));
}

function young_num(n, p){
  for(var num = 0, m = 1; m <= n; m++) num += divnn(n, m).length;
  p(num);
}

var p = typeof print == 'function' ? print : function($){ WSH.echo($) }, t = new Date;
young(50, p), p((new Date - t) / 1000);