         m[2*3+1] = 0.0;
         m[2*3+2] = GAP_EXTENSION_PROBABILITY;
 
-//        fprintf(stderr, "referenceStart = %u\n", referenceStart);
-//        fprintf(stderr, "queryStart = %u queryLen = %u\n", queryStart, queryLen);
+//        printf("referenceStart = %u\n", referenceStart);
+//        printf("queryStart = %u queryLen = %u\n", queryStart, queryLen);
 
         queryBases = batch.reads + idx.read_start + queryStart;
         referenceBases = ctx.reference.bases + referenceStart;


                sum += fi[u] + fi[u+1] + fi[u+2];

    //            fprintf(stderr, "(%d,%d;%d): %.4f,%.4f,%.4f\n", i, k, u, fi[u], fi[u+1], fi[u+2]);
    //            fprintf(stderr, " .. u = %d v11 = %d v01 = %d v10 = %d e = %f\n", u, v11, v01, v10, e);
            }

            // rescale

        setup(hmm_index);

//        const uint32 read_index    = thrust::get<0>(hmm_index);
//        printf("read %d: hmm_glocal(l_ref=%d qstart=%d, l_query=%d)\n", read_index, referenceLength, queryStart, queryLen);
//        printf("read %d: ref = { ", read_index);
//        for(int c = 0; c < referenceLength; c++)
//        {
//            printf("%c ", from_nvbio::iupac16_to_char(referenceBases[c]));
//        }
//        printf("\n");
//
//        printf("read %d: que = { ", read_index);
//        for(int c = 0; c < queryLen; c++)
//        {
//            printf("%c ", from_nvbio::iupac16_to_char(queryBases[c]));
//        }
//        printf("\n");
//
//        printf("read %d: _iqual = { % 3d % 3d % 3d % 3d % 3d ... % 3d % 3d % 3d % 3d % 3d }\n", read_index,
//                inputQualities[0], inputQualities[1], inputQualities[2], inputQualities[3], inputQualities[4],
//                inputQualities[queryLen - 5], inputQualities[queryLen - 4], inputQualities[queryLen - 3], inputQualities[queryLen - 2], inputQualities[queryLen - 1]);
//        printf("read %d: c->bw = %d, bw = %d, l_ref = %d, l_query = %d\n", read_index, MIN_BAND_WIDTH, bandWidth, referenceLength, queryLen);

        /*** forward ***/
        // f[0]
