Update for changing graph
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/IntermediateNodeWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/IntermediateNodeWritable.java
index da9104b..2787ef3 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/IntermediateNodeWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/IntermediateNodeWritable.java
@@ -139,11 +139,11 @@
     public String toString() {
         StringBuilder sbuilder = new StringBuilder();
         sbuilder.append('(');
+        sbuilder.append(nodeId.toString()).append('\t');
         sbuilder.append(forwardForwardList.toString()).append('\t');
         sbuilder.append(forwardReverseList.toString()).append('\t');
         sbuilder.append(reverseForwardList.toString()).append('\t');
-        sbuilder.append(reverseReverseList.toString()).append('\t');
-        sbuilder.append(nodeId.toString()).append(')');
+        sbuilder.append(reverseReverseList.toString()).append('\t').append(')');
         return sbuilder.toString();
     }
 }
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerListWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerListWritable.java
index a32c306..e19bb0f 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerListWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerListWritable.java
@@ -10,6 +10,7 @@
 import org.apache.hadoop.io.Writable;
 
 import edu.uci.ics.genomix.data.KmerUtil;
+import edu.uci.ics.genomix.data.Marshal;
 
 public class KmerListWritable implements Writable, Iterable<KmerBytesWritable>, Serializable{
     private static final long serialVersionUID = 1L;
@@ -158,4 +159,29 @@
     public int getLength() {
         return valueCount * kmerByteSize;
     }
+    
+    @Override
+    public String toString() {
+        StringBuilder sbuilder = new StringBuilder();
+        sbuilder.append('[');
+//        for (KmerBytesWritable kmer : this) {
+//            sbuilder.append(kmer.toString());
+//            sbuilder.append(',');
+//        }
+        for(int i = 0; i < valueCount; i++){
+            sbuilder.append(getPosition(i).toString());
+            sbuilder.append(',');
+        }
+        if (valueCount > 0) {
+            sbuilder.setCharAt(sbuilder.length() - 1, ']');
+        } else {
+            sbuilder.append(']');
+        }
+        return sbuilder.toString();
+    }
+    
+    @Override
+    public int hashCode() {
+        return Marshal.hashBytes(getByteArray(), getStartOffset(), getLength());
+    }
 }
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/ReadsKeyValueParserFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/ReadsKeyValueParserFactory.java
index 2ef5920..3084722 100644
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/ReadsKeyValueParserFactory.java
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/ReadsKeyValueParserFactory.java
@@ -112,36 +112,46 @@
                 nextKmer.set(kmer);
                 nextKmer.shiftKmerWithNextChar(array[kmerSize]);
                 kmerList.append(nextKmer);
-                nodeId.set(mateId, readID, 1);
-                interMediateNode.setNodeId(nodeId);
-                interMediateNode.setFFList(kmerList);
-                InsertToFrame(kmer, interMediateNode, writer);
+                nextKmer.toString();
+                kmerList.toString();
+//                nodeId.set(mateId, readID, 1);
+//                interMediateNode.setNodeId(nodeId);
+//                interMediateNode.setFFList(kmerList);
+                InsertToFrame(kmer, kmerList, writer);
 
                 /** middle kmer */
-                for (int i = kmerSize; i < array.length; i++) {
+                int i = kmerSize;
+                for (; i < array.length - 1; i++) {
                     kmer.shiftKmerWithNextChar(array[i]);
                     nextKmer.set(kmer);
                     nextKmer.shiftKmerWithNextChar(array[i+1]);
                     kmerList.append(nextKmer);
-                    nodeId.set(mateId, readID, i - kmerSize + 2);
-                    interMediateNode.setNodeId(nodeId);
-                    interMediateNode.setFFList(kmerList);
-                    InsertToFrame(kmer, interMediateNode, writer);
+//                    nodeId.set(mateId, readID, i - kmerSize + 2);
+//                    interMediateNode.setNodeId(nodeId);
+//                    interMediateNode.setFFList(kmerList);
+                    InsertToFrame(kmer, kmerList, writer);
                 }
+//                
+//                /** last kmer */
+//                kmer.shiftKmerWithNextChar(array[i]);
+//                nodeId.set(mateId, readID, i - kmerSize + 2);
+//                interMediateNode.setNodeId(nodeId);
+//                InsertToFrame(kmer, interMediateNode, writer);
             }
-
-            private void InsertToFrame(KmerBytesWritable kmer, IntermediateNodeWritable node, IFrameWriter writer) {
+            //IntermediateNodeWritable node
+            private void InsertToFrame(KmerBytesWritable kmer, KmerListWritable kmerList, IFrameWriter writer) {
                 try {
-                    if (Math.abs(node.getNodeId().getPosId()) > 32768) {
-                        throw new IllegalArgumentException("Position id is beyond 32768 at " + node.getNodeId().getReadId());
-                    }
+//                    if (Math.abs(node.getNodeId().getPosId()) > 32768) {
+//                        throw new IllegalArgumentException("Position id is beyond 32768 at " + node.getNodeId().getReadId());
+//                    }
                     tupleBuilder.reset();
                     tupleBuilder.addField(kmer.getBytes(), kmer.getOffset(), kmer.getLength());
-                    tupleBuilder.addField(node.getNodeId().getByteArray(), node.getNodeId().getStartOffset(), node.getNodeId().getLength());
-                    tupleBuilder.addField(node.getFFList().getByteArray(), node.getFFList().getStartOffset(), node.getFFList().getLength());
-                    tupleBuilder.addField(node.getFRList().getByteArray(), node.getFRList().getStartOffset(), node.getFRList().getLength());
-                    tupleBuilder.addField(node.getRFList().getByteArray(), node.getRFList().getStartOffset(), node.getRFList().getLength());
-                    tupleBuilder.addField(node.getRRList().getByteArray(), node.getRRList().getStartOffset(), node.getRRList().getLength());
+                    tupleBuilder.addField(kmerList.getByteArray(), kmer.getOffset(), kmer.getLength());
+                    //tupleBuilder.addField(node.getNodeId().getByteArray(), node.getNodeId().getStartOffset(), node.getNodeId().getLength());
+//                    tupleBuilder.addField(node.getFFList().getByteArray(), node.getFFList().getStartOffset(), node.getFFList().getLength());
+//                    tupleBuilder.addField(node.getFRList().getByteArray(), node.getFRList().getStartOffset(), node.getFRList().getLength());
+//                    tupleBuilder.addField(node.getRFList().getByteArray(), node.getRFList().getStartOffset(), node.getRFList().getLength());
+//                    tupleBuilder.addField(node.getRRList().getByteArray(), node.getRRList().getStartOffset(), node.getRRList().getLength());
                     
                     if (!outputAppender.append(tupleBuilder.getFieldEndOffsets(), tupleBuilder.getByteArray(), 0,
                             tupleBuilder.getSize())) {
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/job/JobGenCheckReader.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/job/JobGenCheckReader.java
index c371f6d..c4e7063 100644
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/job/JobGenCheckReader.java
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/job/JobGenCheckReader.java
@@ -23,6 +23,7 @@
 import edu.uci.ics.genomix.oldtype.PositionWritable;
 import edu.uci.ics.genomix.type.IntermediateNodeWritable;
 import edu.uci.ics.genomix.type.KmerBytesWritable;
+import edu.uci.ics.genomix.type.KmerListWritable;
 import edu.uci.ics.hyracks.api.client.NodeControllerInfo;
 import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
 import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
@@ -72,7 +73,8 @@
                         return new ITupleWriter() {
 
                             private KmerBytesWritable kmer = new KmerBytesWritable(kmerSize);
-                            private IntermediateNodeWritable intermediateNode = new IntermediateNodeWritable();
+                            private KmerListWritable kmerList = new KmerListWritable();
+                            //private IntermediateNodeWritable intermediateNode = new IntermediateNodeWritable();
 
                             @Override
                             public void open(DataOutput output) throws HyracksDataException {
@@ -89,25 +91,28 @@
                                     kmer.setNewReference(
                                             tuple.getFieldData(ReadsKeyValueParserFactory.OutputKmerField),
                                             tuple.getFieldStart(ReadsKeyValueParserFactory.OutputKmerField));
-                                    //nodeId
-                                    intermediateNode.getNodeId().setNewReference(tuple.getFieldData(ReadsKeyValueParserFactory.OutputNodeIdField), 
-                                            tuple.getFieldStart(ReadsKeyValueParserFactory.OutputForwardForwardField));
+                                    kmerList.setNewReference(tuple.getFieldLength(ReadsKeyValueParserFactory.OutputNodeIdField), 
+                                            tuple.getFieldData(ReadsKeyValueParserFactory.OutputNodeIdField), 
+                                            tuple.getFieldStart(ReadsKeyValueParserFactory.OutputNodeIdField));
+//                                    //nodeId
+//                                    intermediateNode.getNodeId().setNewReference(tuple.getFieldData(ReadsKeyValueParserFactory.OutputNodeIdField), 
+//                                            tuple.getFieldStart(ReadsKeyValueParserFactory.OutputNodeIdField));
                                     //FF list
-                                    intermediateNode.getFFList().setNewReference(tuple.getFieldLength(ReadsKeyValueParserFactory.OutputForwardForwardField / kmer.getLength()) ,
-                                            tuple.getFieldData(ReadsKeyValueParserFactory.OutputForwardForwardField), tuple.getFieldStart(ReadsKeyValueParserFactory.OutputForwardForwardField));
-                                    //FR list
-                                    intermediateNode.getFRList().setNewReference(tuple.getFieldLength(ReadsKeyValueParserFactory.OutputForwardReverseField / kmer.getLength()),
-                                            tuple.getFieldData(ReadsKeyValueParserFactory.OutputForwardReverseField), tuple.getFieldStart(ReadsKeyValueParserFactory.OutputForwardReverseField));
-                                    //RF list
-                                    intermediateNode.getRFList().setNewReference(tuple.getFieldLength(ReadsKeyValueParserFactory.OutputReverseForwardField / kmer.getLength()),
-                                            tuple.getFieldData(ReadsKeyValueParserFactory.OutputReverseForwardField), tuple.getFieldStart(ReadsKeyValueParserFactory.OutputReverseForwardField));
-                                    //RR list
-                                    intermediateNode.getRRList().setNewReference(tuple.getFieldLength(ReadsKeyValueParserFactory.OutputReverseReverseField / kmer.getLength()),
-                                            tuple.getFieldData(ReadsKeyValueParserFactory.OutputReverseReverseField), tuple.getFieldStart(ReadsKeyValueParserFactory.OutputReverseReverseField));
-                                    
+//                                    intermediateNode.getFFList().setNewReference(tuple.getFieldLength(ReadsKeyValueParserFactory.OutputForwardForwardField) / 2 ,
+//                                            tuple.getFieldData(ReadsKeyValueParserFactory.OutputForwardForwardField), tuple.getFieldStart(ReadsKeyValueParserFactory.OutputForwardForwardField));
+//                                    //FR list
+//                                    intermediateNode.getFRList().setNewReference(tuple.getFieldLength(ReadsKeyValueParserFactory.OutputForwardReverseField / kmer.getLength()),
+//                                            tuple.getFieldData(ReadsKeyValueParserFactory.OutputForwardReverseField), tuple.getFieldStart(ReadsKeyValueParserFactory.OutputForwardReverseField));
+//                                    //RF list
+//                                    intermediateNode.getRFList().setNewReference(tuple.getFieldLength(ReadsKeyValueParserFactory.OutputReverseForwardField / kmer.getLength()),
+//                                            tuple.getFieldData(ReadsKeyValueParserFactory.OutputReverseForwardField), tuple.getFieldStart(ReadsKeyValueParserFactory.OutputReverseForwardField));
+//                                    //RR list
+//                                    intermediateNode.getRRList().setNewReference(tuple.getFieldLength(ReadsKeyValueParserFactory.OutputReverseReverseField / kmer.getLength()),
+//                                            tuple.getFieldData(ReadsKeyValueParserFactory.OutputReverseReverseField), tuple.getFieldStart(ReadsKeyValueParserFactory.OutputReverseReverseField));
+//                                    
                                     output.write(kmer.toString().getBytes());
                                     output.writeByte('\t');
-                                    output.write(intermediateNode.toString().getBytes());
+                                    output.write(kmerList.toString().getBytes());
                                     output.writeByte('\n');
                                 } catch (IOException e) {
                                     throw new HyracksDataException(e);
diff --git a/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hyracks/newgraph/test/JobRun.java b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hyracks/newgraph/test/JobRun.java
index 239071c..dfae011 100644
--- a/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hyracks/newgraph/test/JobRun.java
+++ b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hyracks/newgraph/test/JobRun.java
@@ -37,7 +37,7 @@
     private static final String ACTUAL_RESULT_DIR = "actual";
     private static final String PATH_TO_HADOOP_CONF = "src/test/resources/hadoop/conf";
 
-    private static final String DATA_INPUT_PATH = "src/test/resources/data/webmap/text.txt";
+    private static final String DATA_INPUT_PATH = "src/test/resources/data/webmap/test1.txt";
     private static final String HDFS_INPUT_PATH = "/webmap";
     private static final String HDFS_OUTPUT_PATH = "/webmap_result";
 
diff --git a/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hyracks/test/JobRunStepByStepTest.java b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hyracks/test/JobRunStepByStepTest.java
index 4b22f01..bd761a5 100644
--- a/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hyracks/test/JobRunStepByStepTest.java
+++ b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hyracks/test/JobRunStepByStepTest.java
@@ -50,7 +50,7 @@
     private static final String ACTUAL_RESULT_DIR = "actual";
     private static final String PATH_TO_HADOOP_CONF = "src/test/resources/hadoop/conf";
 
-    private static final String DATA_INPUT_PATH = "src/test/resources/data/webmap/text.txt";
+    private static final String DATA_INPUT_PATH = "src/test/resources/data/webmap/test1.txt";
     private static final String HDFS_INPUT_PATH = "/webmap";
     private static final String HDFS_OUTPUT_PATH = "/webmap_result";
 
@@ -76,11 +76,11 @@
     @Test
     public void TestAll() throws Exception {
         TestReader();
-        TestGroupbyKmer();
-        TestMapKmerToRead();
-        TestGroupByReadID();
-        TestEndToEnd();
-        TestUnMergedNode();
+//        TestGroupbyKmer();
+//        TestMapKmerToRead();
+//        TestGroupByReadID();
+//        TestEndToEnd();
+//        TestUnMergedNode();
     }
 
     public void TestUnMergedNode() throws Exception {
diff --git a/genomix/genomix-hyracks/src/test/resources/data/webmap/test1.txt b/genomix/genomix-hyracks/src/test/resources/data/webmap/test1.txt
new file mode 100644
index 0000000..17770fa
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/resources/data/webmap/test1.txt
@@ -0,0 +1 @@
+1	AATAGAAG