             unsigned int log_v = std::min(32-__clz(v_len), 31);
             int binary_work_est = u_len*log_v;
             int intersect_work_est = u_len + v_len + log_u;
-            //const int WORK_FACTOR = 9999; // force balanced-only
+            //const int WORK_FACTOR = 9999; // force imbalanced-only
             //const int WORK_FACTOR = 0;
             const int WORK_FACTOR = 1;
             int METHOD = ((WORK_FACTOR*intersect_work_est >= binary_work_est) || (intersect_work_est > 1024));
+            //int METHOD = (WORK_FACTOR*intersect_work_est >= binary_work_est);
             bin_index = (METHOD*MAX_ADJ_UNIONS_BINS/2)+(log_u*BINS_1D_DIM+log_v); 
             //bin_index = MAX_ADJ_UNIONS_BINS/2+((src.id() + dst.id())%(MAX_ADJ_UNIONS_BINS/2));
             //bin_index = MAX_ADJ_UNIONS_BINS/2;

        if (size) {
            threads_per = 1 << (threads_log-1); 
            printf("threads_per=%d, size=%d\n", threads_per, size);
            TM.start();
            forAllEdgesAdjUnionImbalanced(hornet, hd_queue_info().d_edge_queue, start_index, end_index, op, threads_per, 1);
            TM.stop();

    TM.print("queueing and binning:");
    TM.reset();
    
    /*
    cudaMemcpy(hd_queue_info().queue_pos, hd_queue_info().d_queue_pos, (MAX_ADJ_UNIONS_BINS+1)*sizeof(unsigned long long), cudaMemcpyDeviceToHost);
    for (auto i = 0; i < MAX_ADJ_UNIONS_BINS+1; i++)
