the newest version of log algorthm for path merge and pass all the test cases
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LoadGraphVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LoadGraphVertex.java
index e22b20d..580e1fe 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LoadGraphVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LoadGraphVertex.java
@@ -49,6 +49,7 @@
 	 */
 	@Override
 	public void compute(Iterator<MessageWritable> msgIterator) {
+		deleteVertex(getVertexId());
 		voteToHalt();
 	}
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphVertex.java
index d55e64e..bd368cb 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphVertex.java
@@ -132,42 +132,17 @@
 		}
 		//head node sends message to path node
 		else if(getSuperstep()%3 == 0 && getSuperstep() <= maxIteration){
-			if(getSuperstep() == 3){
-				tmpMsg = new LogAlgorithmMessageWritable();
-				if(Kmer.GENE_CODE.getGeneCodeFromBitMap((byte)(tmpVal.getValue() & 0x0F)) == -1)
-					voteToHalt();
-				else{
-					tmpDestVertexId = KmerUtil.shiftKmerWithNextCode(kmerSize, tmpVertexId, 
-							0, tmpVertexId.length, 
-							Kmer.GENE_CODE.getGeneCodeFromBitMap((byte)(tmpVal.getValue() & 0x0F)));
-					destVertexId.set(tmpDestVertexId, 0, tmpDestVertexId.length);
-					if(tmpVal.getState() == State.START_VERTEX){
-						tmpMsg.setMessage(Message.START);
-						tmpMsg.setSourceVertexId(getVertexId().getBytes());
-						sendMsg(destVertexId, tmpMsg);
-						voteToHalt();
-					}
-					else if(tmpVal.getState() != State.END_VERTEX && tmpVal.getState() != State.FINAL_DELETE){
-						tmpMsg.setMessage(Message.NON);
-						tmpMsg.setSourceVertexId(getVertexId().getBytes());
-						sendMsg(destVertexId,tmpMsg);
-						voteToHalt();
-					}
-				}
-			}
+			if(tmpVal.getState() == State.TODELETE || tmpVal.getState() == State.KILL_SELF)
+				voteToHalt();
 			else{
-				if(msgIterator.hasNext()){
-					tmpMsg = msgIterator.next();
-					byte[] lastKmer = KmerUtil.getLastKmerFromChain(kmerSize,
-							tmpVal.getLengthOfMergeChain(),
-							tmpVal.getMergeChain(),
-							0, tmpVal.getMergeChain().length);
-					if(Kmer.GENE_CODE.getGeneCodeFromBitMap((byte)(tmpVal.getValue() & 0x0F)) == -1 || lastKmer == null)
+				if(getSuperstep() == 3){
+					tmpMsg = new LogAlgorithmMessageWritable();
+					if(Kmer.GENE_CODE.getGeneCodeFromBitMap((byte)(tmpVal.getValue() & 0x0F)) == -1)
 						voteToHalt();
 					else{
-						tmpDestVertexId = KmerUtil.shiftKmerWithNextCode(kmerSize, lastKmer, 
-								0, lastKmer.length,
-								Kmer.GENE_CODE.getGeneCodeFromBitMap((byte)(tmpVal.getValue() & 0x0F))); 
+						tmpDestVertexId = KmerUtil.shiftKmerWithNextCode(kmerSize, tmpVertexId, 
+								0, tmpVertexId.length, 
+								Kmer.GENE_CODE.getGeneCodeFromBitMap((byte)(tmpVal.getValue() & 0x0F)));
 						destVertexId.set(tmpDestVertexId, 0, tmpDestVertexId.length);
 						if(tmpVal.getState() == State.START_VERTEX){
 							tmpMsg.setMessage(Message.START);
@@ -179,6 +154,35 @@
 							tmpMsg.setMessage(Message.NON);
 							tmpMsg.setSourceVertexId(getVertexId().getBytes());
 							sendMsg(destVertexId,tmpMsg);
+							voteToHalt();
+						}
+					}
+				}
+				else{
+					if(msgIterator.hasNext()){
+						tmpMsg = msgIterator.next();
+						byte[] lastKmer = KmerUtil.getLastKmerFromChain(kmerSize,
+								tmpVal.getLengthOfMergeChain(),
+								tmpVal.getMergeChain(),
+								0, tmpVal.getMergeChain().length);
+						if(Kmer.GENE_CODE.getGeneCodeFromBitMap((byte)(tmpVal.getValue() & 0x0F)) == -1 || lastKmer == null)
+							voteToHalt();
+						else{
+							tmpDestVertexId = KmerUtil.shiftKmerWithNextCode(kmerSize, lastKmer, 
+									0, lastKmer.length,
+									Kmer.GENE_CODE.getGeneCodeFromBitMap((byte)(tmpVal.getValue() & 0x0F))); 
+							destVertexId.set(tmpDestVertexId, 0, tmpDestVertexId.length);
+							if(tmpVal.getState() == State.START_VERTEX){
+								tmpMsg.setMessage(Message.START);
+								tmpMsg.setSourceVertexId(getVertexId().getBytes());
+								sendMsg(destVertexId, tmpMsg);
+								voteToHalt();
+							}
+							else if(tmpVal.getState() != State.END_VERTEX && tmpVal.getState() != State.FINAL_DELETE){
+								tmpMsg.setMessage(Message.NON);
+								tmpMsg.setSourceVertexId(getVertexId().getBytes());
+								sendMsg(destVertexId,tmpMsg);
+							}
 						}
 					}
 				}
@@ -187,53 +191,55 @@
 		
 		//path node sends message back to head node
 		else if(getSuperstep()%3 == 1 && getSuperstep() <= maxIteration){
-			if(msgIterator.hasNext()){
-				tmpMsg = msgIterator.next();
-				int message = tmpMsg.getMessage();
-				if(tmpVal.getLengthOfMergeChain() == 0){
-					tmpVal.setLengthOfMergeChain(kmerSize);
-					tmpVal.setMergeChain(tmpVertexId);
-					setVertexValue(tmpVal);
-				}
-				tmpMsg.setLengthOfChain(tmpVal.getLengthOfMergeChain());
-				tmpMsg.setChainVertexId(tmpVal.getMergeChain());
-				
-				tmpMsg.setNeighberInfo(tmpVal.getValue()); //set neighber
-				tmpMsg.setSourceVertexState(tmpVal.getState());
-				
-				//kill Message because it has been merged by the head
-				if(tmpVal.getState() == State.END_VERTEX || tmpVal.getState() == State.FINAL_DELETE){
-					tmpMsg.setMessage(Message.END);
-					tmpVal.setState(State.FINAL_DELETE);
-					setVertexValue(tmpVal);
-					//deleteVertex(getVertexId());
-				}
-				else
-					tmpMsg.setMessage(Message.NON);
-				
-				if(message == Message.START){
-					tmpVal.setState(State.TODELETE);
-					setVertexValue(tmpVal);
-				}
-				destVertexId.set(tmpMsg.getSourceVertexId(), 0, tmpMsg.getSourceVertexId().length);
-				sendMsg(destVertexId,tmpMsg);
-				//voteToHalt();
-			}
+			if(tmpVal.getState() == State.TODELETE || tmpVal.getState() == State.KILL_SELF)
+				voteToHalt();
 			else{
-				if(getVertexValue().getState() != State.START_VERTEX && getVertexValue().getState() != State.NON_EXIST
-						&& getVertexValue().getState() != State.END_VERTEX && getVertexValue().getState() != State.FINAL_DELETE){
-					tmpVal.setState(State.NON_EXIST);
-					setVertexValue(tmpVal);
-					deleteVertex(getVertexId()); //killSelf because it doesn't receive any message
+				if(msgIterator.hasNext()){
+					tmpMsg = msgIterator.next();
+					int message = tmpMsg.getMessage();
+					if(tmpVal.getLengthOfMergeChain() == 0){
+						tmpVal.setLengthOfMergeChain(kmerSize);
+						tmpVal.setMergeChain(tmpVertexId);
+						setVertexValue(tmpVal);
+					}
+					tmpMsg.setLengthOfChain(tmpVal.getLengthOfMergeChain());
+					tmpMsg.setChainVertexId(tmpVal.getMergeChain());
+					
+					tmpMsg.setNeighberInfo(tmpVal.getValue()); //set neighber
+					tmpMsg.setSourceVertexState(tmpVal.getState());
+					
+					//kill Message because it has been merged by the head
+					if(tmpVal.getState() == State.END_VERTEX || tmpVal.getState() == State.FINAL_DELETE){
+						tmpMsg.setMessage(Message.END);
+						tmpVal.setState(State.FINAL_DELETE);
+						setVertexValue(tmpVal);
+						//deleteVertex(getVertexId());
+					}
+					else
+						tmpMsg.setMessage(Message.NON);
+					
+					if(message == Message.START){
+						tmpVal.setState(State.TODELETE);
+						setVertexValue(tmpVal);
+					}
+					destVertexId.set(tmpMsg.getSourceVertexId(), 0, tmpMsg.getSourceVertexId().length);
+					sendMsg(destVertexId,tmpMsg);
+					//voteToHalt();
+				}
+				else{
+					if(getVertexValue().getState() != State.START_VERTEX //&& getVertexValue().getState() != State.NON_EXIST
+							&& getVertexValue().getState() != State.END_VERTEX && getVertexValue().getState() != State.FINAL_DELETE){
+						tmpVal.setState(State.KILL_SELF);
+						setVertexValue(tmpVal);
+						voteToHalt();
+						//deleteVertex(getVertexId()); //killSelf because it doesn't receive any message
+					}
 				}
 			}
 		}
 		else if(getSuperstep()%3 == 2 && getSuperstep() <= maxIteration){
-			if(tmpVal.getState() == State.TODELETE && getVertexValue().getState() != State.NON_EXIST){
-				tmpVal.setState(State.NON_EXIST);
-				setVertexValue(tmpVal);
-				deleteVertex(getVertexId()); //killSelf
-			}
+			if(tmpVal.getState() == State.TODELETE || tmpVal.getState() == State.KILL_SELF)
+				voteToHalt(); //deleteVertex(getVertexId()); //killSelf
 			else{
 				if(msgIterator.hasNext()){
 					tmpMsg = msgIterator.next();
@@ -274,7 +280,7 @@
 						sendMsg(getVertexId(),tmpMsg);
 					}
 				}
-				if(tmpVal.getState() == State.END_VERTEX || tmpVal.getState() == State.FINAL_DELETE || tmpVal.getState() == State.NON_EXIST)
+				if(tmpVal.getState() == State.END_VERTEX || tmpVal.getState() == State.FINAL_DELETE)
 					voteToHalt();
 				if(tmpVal.getState() == State.FINAL_VERTEX){
 					//String source = Kmer.recoverKmerFrom(tmpVal.getLengthOfMergeChain(), tmpVal.getMergeChain(), 0, tmpVal.getMergeChain().length);
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForMergeGraphOutputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForMergeGraphOutputFormat.java
index 24fca7b..9cea793 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForMergeGraphOutputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForMergeGraphOutputFormat.java
@@ -40,7 +40,9 @@
             public void writeVertex(Vertex<BytesWritable, ValueStateWritable, NullWritable, ?> vertex) throws IOException,
                     InterruptedException {
             	if(vertex.getVertexValue().getState() != State.FINAL_DELETE
-            			&& vertex.getVertexValue().getState() != State.END_VERTEX)
+            			&& vertex.getVertexValue().getState() != State.END_VERTEX
+            			&& vertex.getVertexValue().getState() != State.TODELETE
+            			&& vertex.getVertexValue().getState() != State.KILL_SELF)
                     getRecordWriter().write(vertex.getVertexId(),vertex.getVertexValue());
             }
         }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java
index 8ab6990..a054ede 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java
@@ -16,7 +16,7 @@
 public class GenerateTextFile {
 
 	public static void generate() throws IOException{
-		BufferedWriter bw = new BufferedWriter(new FileWriter("text/naive_CyclePath"));
+		BufferedWriter bw = new BufferedWriter(new FileWriter("text/new_SimplePath"));
 		Configuration conf = new Configuration();
 		FileSystem fileSys = FileSystem.get(conf);
 		for(int i = 0; i < 2; i++){
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java
index 999b431..61bcb0c 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java
@@ -8,7 +8,7 @@
 	public static final int TODELETE = 4;
 	public static final int FINAL_VERTEX = 5;
 	public static final int FINAL_DELETE = 6;
-	public static final int NON_EXIST = 7;
+	public static final int KILL_SELF = 7;
 	
 	public final static class STATE_CONTENT{
 
@@ -36,8 +36,8 @@
 			case FINAL_DELETE:
 				r = "FINAL_DELETE";
 				break;
-			case NON_EXIST:
-				r = "NON_EXIST";
+			case KILL_SELF:
+				r = "KILL_SELF";
 				break;
 			}
 			return r;