	extract( var pq ) : integer;
	case pq is nil:
		Error;
	case pq is boolean array:
		Find last true entry;
		if only one entry remains then transform to SingleEntry;
	case pq is single element:
		return element;
		pq := nil;
	case pq is full node:
		return maximum;
		if bottom queue corresponding to maximum is single element
			then	extract from top queue;
				max := max of bottom[ max of top ];
		else	extract from bottom;
			max := max of bottom;
	end;
