Merge MergeBubbleMessageWritable to MessageWritable
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/MergeBubbleMessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/MergeBubbleMessageWritable.java
index c3b4710..3200e14 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/MergeBubbleMessageWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/MergeBubbleMessageWritable.java
@@ -41,7 +41,7 @@
             this.sourceVertexId.set(msg.getSourceVertexId());
         }
         if (chainVertexId != null) {
-            checkMessage |= CheckMessage.CHAIN;
+            checkMessage |= CheckMessage.ACUTUALKMER;
             this.chainVertexId.set(msg.getChainVertexId());
         }
         if (neighberNode != null) {
@@ -62,7 +62,7 @@
             this.sourceVertexId.set(sourceVertexId.getReadID(),sourceVertexId.getPosInRead());
         }
         if (chainVertexId != null) {
-            checkMessage |= CheckMessage.CHAIN;
+            checkMessage |= CheckMessage.ACUTUALKMER;
             this.chainVertexId.set(chainVertexId);
         }
         if (neighberNode != null) {
@@ -100,7 +100,7 @@
 
     public void setChainVertexId(KmerBytesWritable chainVertexId) {
         if (chainVertexId != null) {
-            checkMessage |= CheckMessage.CHAIN;
+            checkMessage |= CheckMessage.ACUTUALKMER;
             this.chainVertexId.set(chainVertexId);
         }
     }
@@ -144,7 +144,7 @@
         out.writeByte(checkMessage);
         if ((checkMessage & CheckMessage.SOURCE) != 0)
             sourceVertexId.write(out);
-        if ((checkMessage & CheckMessage.CHAIN) != 0)
+        if ((checkMessage & CheckMessage.ACUTUALKMER) != 0)
             chainVertexId.write(out);
         if ((checkMessage & CheckMessage.NEIGHBER) != 0)
             neighberNode.write(out);
@@ -159,7 +159,7 @@
         checkMessage = in.readByte();
         if ((checkMessage & CheckMessage.SOURCE) != 0)
             sourceVertexId.readFields(in);
-        if ((checkMessage & CheckMessage.CHAIN) != 0)
+        if ((checkMessage & CheckMessage.ACUTUALKMER) != 0)
             chainVertexId.readFields(in);
         if ((checkMessage & CheckMessage.NEIGHBER) != 0)
             neighberNode.readFields(in);
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/MessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/MessageWritable.java
index 66dd474..1eba346 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/MessageWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/MessageWritable.java
@@ -25,13 +25,15 @@
     private boolean isFlip;
     private int kmerlength = 0;
     private boolean updateMsg = false;
-
+    private KmerBytesWritable startVertexId;
+    
     private byte checkMessage;
 
     public MessageWritable() {
         sourceVertexId = new KmerBytesWritable();
         kmer = new KmerBytesWritable(0);
         neighberNode = new AdjacencyListWritable();
+        startVertexId = new KmerBytesWritable();
         flag = Message.NON;
         isFlip = false;
         checkMessage = (byte) 0;
@@ -39,9 +41,10 @@
     
     public MessageWritable(int kmerSize) {
         kmerlength = kmerSize;
-        sourceVertexId = new KmerBytesWritable();
+        sourceVertexId = new KmerBytesWritable(kmerSize);
         kmer = new KmerBytesWritable(0);
         neighberNode = new AdjacencyListWritable(kmerSize);
+        startVertexId = new KmerBytesWritable(kmerSize);
         flag = Message.NON;
         isFlip = false;
         checkMessage = (byte) 0;
@@ -55,13 +58,17 @@
             this.sourceVertexId.set(msg.getSourceVertexId());
         }
         if (kmer != null) {
-            checkMessage |= CheckMessage.CHAIN;
+            checkMessage |= CheckMessage.ACUTUALKMER;
             this.kmer.set(msg.getActualKmer());
         }
         if (neighberNode != null) {
             checkMessage |= CheckMessage.NEIGHBER;
             this.neighberNode.set(msg.getNeighberNode());
         }
+        if (startVertexId != null) {
+            checkMessage |= CheckMessage.START;
+            this.startVertexId.set(msg.getStartVertexId());
+        }
         checkMessage |= CheckMessage.ADJMSG;
         this.flag = msg.getFlag();
         updateMsg = msg.isUpdateMsg();
@@ -75,7 +82,7 @@
             this.sourceVertexId.set(sourceVertexId);
         }
         if (chainVertexId != null) {
-            checkMessage |= CheckMessage.CHAIN;
+            checkMessage |= CheckMessage.ACUTUALKMER;
             this.kmer.set(chainVertexId);
         }
         if (neighberNode != null) {
@@ -94,6 +101,7 @@
         kmerlength = kmerSize;
         kmer.reset(1);
         neighberNode.reset(kmerSize);
+        startVertexId.reset(kmerSize);
         flag = Message.NON;
         isFlip = false;
     }
@@ -115,7 +123,7 @@
 
     public void setAcutalKmer(KmerBytesWritable actualKmer) {
         if (actualKmer != null) {
-            checkMessage |= CheckMessage.CHAIN;
+            checkMessage |= CheckMessage.ACUTUALKMER;
             this.kmer.set(actualKmer);
         }
     }
@@ -126,7 +134,7 @@
 
     public void setCreatedVertexId(KmerBytesWritable actualKmer) {
         if (actualKmer != null) {
-            checkMessage |= CheckMessage.CHAIN;
+            checkMessage |= CheckMessage.ACUTUALKMER;
             this.kmer.set(actualKmer);
         }
     }
@@ -142,6 +150,17 @@
         }
     }
     
+    public KmerBytesWritable getStartVertexId() {
+        return startVertexId;
+    }
+
+    public void setStartVertexId(KmerBytesWritable startVertexId) {
+        if(startVertexId != null){
+            checkMessage |= CheckMessage.START;
+            this.startVertexId.set(startVertexId);
+        }
+    }
+
     public int getLengthOfChain() {
         return kmer.getKmerLength();
     }
@@ -188,12 +207,14 @@
         out.writeByte(checkMessage);
         if ((checkMessage & CheckMessage.SOURCE) != 0)
             sourceVertexId.write(out);
-        if ((checkMessage & CheckMessage.CHAIN) != 0)
+        if ((checkMessage & CheckMessage.ACUTUALKMER) != 0)
             kmer.write(out);
         if ((checkMessage & CheckMessage.NEIGHBER) != 0)
             neighberNode.write(out);
         if ((checkMessage & CheckMessage.NODEIDLIST) != 0)
             nodeIdList.write(out);
+        if ((checkMessage & CheckMessage.START) != 0)
+            startVertexId.write(out);
         out.writeBoolean(isFlip);
         out.writeByte(flag); 
         out.writeBoolean(updateMsg);
@@ -206,12 +227,14 @@
         checkMessage = in.readByte();
         if ((checkMessage & CheckMessage.SOURCE) != 0)
             sourceVertexId.readFields(in);
-        if ((checkMessage & CheckMessage.CHAIN) != 0)
+        if ((checkMessage & CheckMessage.ACUTUALKMER) != 0)
             kmer.readFields(in);
         if ((checkMessage & CheckMessage.NEIGHBER) != 0)
             neighberNode.readFields(in);
         if ((checkMessage & CheckMessage.NODEIDLIST) != 0)
             nodeIdList.readFields(in);
+        if ((checkMessage & CheckMessage.START) != 0)
+            startVertexId.readFields(in);
         isFlip = in.readBoolean();
         flag = in.readByte();
         updateMsg = in.readBoolean();
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicGraphCleanVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicGraphCleanVertex.java
index 8112b58..d4a2355 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicGraphCleanVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicGraphCleanVertex.java
@@ -124,23 +124,7 @@
             return null;
         }
     }
-
-    /**
-     * head send message to all next nodes
-     */
-    public void sendMsgToAllNextNodes(VertexValueWritable value) {
-        kmerIterator = value.getFFList().iterator(); // FFList
-        while(kmerIterator.hasNext()){
-            destVertexId.set(kmerIterator.next());
-            sendMsg(destVertexId, outgoingMsg);
-        }
-        kmerIterator = value.getFRList().iterator(); // FRList
-        while(kmerIterator.hasNext()){
-            destVertexId.set(kmerIterator.next());
-            sendMsg(destVertexId, outgoingMsg);
-        }
-    }
-
+    
     /**
      * head send message to all previous nodes
      */
@@ -156,6 +140,22 @@
             sendMsg(destVertexId, outgoingMsg);
         }
     }
+    
+    /**
+     * head send message to all next nodes
+     */
+    public void sendMsgToAllNextNodes(VertexValueWritable value) {
+        kmerIterator = value.getFFList().iterator(); // FFList
+        while(kmerIterator.hasNext()){
+            destVertexId.set(kmerIterator.next());
+            sendMsg(destVertexId, outgoingMsg);
+        }
+        kmerIterator = value.getFRList().iterator(); // FRList
+        while(kmerIterator.hasNext()){
+            destVertexId.set(kmerIterator.next());
+            sendMsg(destVertexId, outgoingMsg);
+        }
+    }
 
     /**
      * one vertex send message to previous and next vertices (neighbor)
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/CheckMessage.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/CheckMessage.java
index 73ab533..4b32a51 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/CheckMessage.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/CheckMessage.java
@@ -3,7 +3,7 @@
 public class CheckMessage {
 
     public static final byte SOURCE = 1 << 0;
-    public static final byte CHAIN = 1 << 1;
+    public static final byte ACUTUALKMER = 1 << 1;
     public static final byte NEIGHBER = 1 << 2;
     public static final byte MESSAGE = 1 << 3;
     public static final byte NODEIDLIST = 1 << 4;
@@ -18,8 +18,8 @@
                 case SOURCE:
                     r = "SOURCE";
                     break;
-                case CHAIN:
-                    r = "CHAIN";
+                case ACUTUALKMER:
+                    r = "ACUTUALKMER";
                     break;
                 case NEIGHBER:
                     r = "NEIGHBER";