             if (src.id() >= dst.id()) return; // imposes ordering
             degree_t src_len = dst.degree();
             degree_t dst_len = dst.degree();
-            int i = 3;
-            
+            int i = MAX_ADJ_UNIONS_BINS-1;
+            /*
+            if (i > 3)
+                i = 3;
+            */
+            /*
             total_work = src_len + dst_len - 1;
             int W;
             while (i > 0) {

                if ((u_len+W-1)/W >= 4)
                    break;
                i-=1;
            }*/

            //int imbalanced_work_est = ((u_len+W-1)/W)*log_v;
            //int balanced_work_est = ((total_work+W-1)/W) + log_u;
            //bin_index = (K*balanced_work_est > imbalanced_work_est);
            bin_index=i;
            // Either count or add the item to the appropriate queue
            if (countOnly)
                atomicAdd(&(d_queue_info.ptr()->queue_sizes[bin_index]), 1ULL);

//==============================================================================
//==============================================================================
// stub
#define MAX_ADJ_UNIONS_BINS 6
namespace adj_unions {
    struct queue_info {
        unsigned long long queue_sizes[MAX_ADJ_UNIONS_BINS] = {0,};
        vid_t *d_queues[MAX_ADJ_UNIONS_BINS] = {NULL,};
        unsigned long long queue_pos[MAX_ADJ_UNIONS_BINS] = {0,};
        int queue_threads_per[MAX_ADJ_UNIONS_BINS] = {32, 64, 128, 256, 512, 1024};
    };

    struct bin_edges {
