delete unuse function
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/GraphVertexOperation.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/GraphVertexOperation.java
index c8aea7c..6a5299b 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/GraphVertexOperation.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/GraphVertexOperation.java
@@ -1,32 +1,23 @@
 package edu.uci.ics.genomix.pregelix;
 
-import java.io.DataOutputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.util.ArrayList;
-
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.io.ByteWritable;
 import org.apache.hadoop.io.BytesWritable;
-import org.apache.hadoop.io.SequenceFile;
-import org.apache.hadoop.io.SequenceFile.CompressionType;
 
 import edu.uci.ics.genomix.type.Kmer;
 import edu.uci.ics.genomix.type.KmerUtil;
-import edu.uci.ics.genomix.pregelix.bitwise.BitwiseOperation;
-import edu.uci.ics.genomix.pregelix.io.LogAlgorithmMessageWritable;
-import edu.uci.ics.genomix.pregelix.io.MessageWritable;
-import edu.uci.ics.genomix.pregelix.io.ValueStateWritable;
-import edu.uci.ics.genomix.pregelix.sequencefile.GenerateSequenceFile;
 
 public class GraphVertexOperation {
-	public static final int k = 5; //kmer, k: the length of kmer
-	public static final int numBytes = (GraphVertexOperation.k-1)/4 + 1;
-	static private final Path TMP_DIR = new Path(
-			GenerateSequenceFile.class.getSimpleName() + "_INTERIM");
+	
+	/**
+	 *  generate the valid data(byte[]) from BytesWritable
+	 */
+	public static byte[] generateValidDataFromBytesWritable(BytesWritable bw){
+		byte[] wholeBytes = bw.getBytes();
+		int validNum = bw.getLength();
+		byte[] validBytes = new byte[validNum];
+		for(int i = 0; i < validNum; i++)
+			validBytes[i] = wholeBytes[i];
+		return validBytes;
+	}
 	/**
 	 * Single Vertex: in-degree = out-degree = 1
 	 * @param vertexValue 
@@ -54,218 +45,15 @@
 			return true;
 		return false;
 	}
-	/** 
-	 * Head Vertex:  in-degree != 1, out-degree = 1, 
-	 * @param vertexValue 
-	 */
-	public static boolean isHead(byte value){
-		if(KmerUtil.inDegree(value) != 1 && KmerUtil.outDegree(value) == 1)
-			return true;
-		return false;
-	}
 	/**
-	 * Rear Vertex:  in-degree = 1, out-degree != 1, 
-	 * @param vertexValue 
+	 * update right neighber based on next vertexId
 	 */
-	public static boolean isRear(byte value){
-		if(KmerUtil.inDegree(value) == 1 && KmerUtil.outDegree(value) != 1)
-			return true;
-		return false;
-	}
-	/**
-	 * write Kmer to Sequence File for test
-	 * @param arrayOfKeys
-	 * @param arrayOfValues
-	 * @param step
-	 * @throws IOException
-	 */
-	public void writeKmerToSequenceFile(ArrayList<BytesWritable> arrayOfKeys, ArrayList<ByteWritable> arrayOfValues, long step) throws IOException{
+	public static byte updateRightNeighberByVertexId(byte oldVertexValue, byte[] neighberVertexId, int k){
 		
-		Configuration conf = new Configuration();
-	    Path outDir = new Path(TMP_DIR, "out");
-	    Path outFile = new Path(outDir, "B" + Long.toString(step));
-	    FileSystem fileSys = FileSystem.get(conf);
-	    SequenceFile.Writer writer = SequenceFile.createWriter(fileSys, conf,
-	        outFile, BytesWritable.class, ByteWritable.class, 
-	        CompressionType.NONE);
-	    
-	     //wirte to sequence file
-	     for(int i = 0; i < arrayOfKeys.size(); i++)
-	    	 writer.append(arrayOfKeys.get(i), arrayOfValues.get(i));
-	     writer.close();
-	}
-	/**
-	 * check what kind of succeed node
-	 * return 0:A 1:C 2:G 3:T 4:nothing
-	 */
-	public static int findSucceedNode(byte vertexValue){
-		String firstBit = "00000001"; //A
-		String secondBit = "00000010"; //C
-		String thirdBit = "00000100"; //G
-		String fourthBit = "00001000"; //T
-		int first = BitwiseOperation.convertBinaryStringToByte(firstBit) & 0xff;
-		int second = BitwiseOperation.convertBinaryStringToByte(secondBit) & 0xff;
-		int third = BitwiseOperation.convertBinaryStringToByte(thirdBit) & 0xff;
-		int fourth = BitwiseOperation.convertBinaryStringToByte(fourthBit) & 0xff;
-		int value = vertexValue & 0xff;
-		int tmp = value & first;
-		if(tmp != 0)
-			return Kmer.GENE_CODE.A;
-		else{
-			tmp = value & second;
-			if(tmp != 0)
-				return Kmer.GENE_CODE.C;
-			else{
-				tmp = value & third;
-				if(tmp != 0)
-					return Kmer.GENE_CODE.G;
-				else{
-					tmp = value & fourth;
-					if(tmp != 0)
-						return Kmer.GENE_CODE.T;
-					else
-						return 4;
-				}
-			}
-		}
-	}
-	/**
-	 * check what kind of precursor node
-	 * return 0:A 1:C 2:G 3:T 4:nothing
-	 */
-	public static int findPrecursorNode(byte vertexValue){
-		String firstBit = "00010000"; //A
-		String secondBit = "00100000"; //C
-		String thirdBit = "01000000"; //G
-		String fourthBit = "10000000"; //T
-		int first = BitwiseOperation.convertBinaryStringToByte(firstBit) & 0xff;
-		int second = BitwiseOperation.convertBinaryStringToByte(secondBit) & 0xff;
-		int third = BitwiseOperation.convertBinaryStringToByte(thirdBit) & 0xff;
-		int fourth = BitwiseOperation.convertBinaryStringToByte(fourthBit) & 0xff;
-		int value = vertexValue & 0xff;
-		int tmp = value & first;
-		if(tmp != 0)
-			return Kmer.GENE_CODE.A;
-		else{
-			tmp = value & second;
-			if(tmp != 0)
-				return Kmer.GENE_CODE.C;
-			else{
-				tmp = value & third;
-				if(tmp != 0)
-					return Kmer.GENE_CODE.G;
-				else{
-					tmp = value & fourth;
-					if(tmp != 0)
-						return Kmer.GENE_CODE.T;
-					else
-						return 4;
-				}
-			}
-		}
-	}
-	/**
-	 * replace last two bits based on n
-	 * Ex. 01 10 00(nothing)	->	01 10 00(A)/01(C)/10(G)/11(T)		
-	 */
-	public static byte[] replaceLastTwoBits(byte[] vertexId, int n){
-		String binaryStringVertexId = BitwiseOperation.convertBytesToBinaryStringKmer(vertexId, k);
-		String resultString = "";
-		for(int i = 0; i < binaryStringVertexId.length()-2; i++)
-			resultString += binaryStringVertexId.charAt(i);
-		switch(n){
-		case 0:
-			resultString += "00";
-			break;
-		case 1:
-			resultString += "01";
-			break;
-		case 2:
-			resultString += "10";
-			break;
-		case 3:
-			resultString += "11";
-			break;
-		default:
-			break;
-		}
-	
-		return BitwiseOperation.convertBinaryStringToBytes(resultString);
-	}
-	/**
-	 * replace first two bits based on n
-	 * Ex. 01 10 00(nothing)	->	00(A)/01(C)/10(G)/11(T) 10 00	
-	 */
-	public static byte[] replaceFirstTwoBits(byte[] vertexId, int n){
-		String binaryStringVertexId = BitwiseOperation.convertBytesToBinaryStringKmer(vertexId, k);
-		String resultString = "";
-		switch(n){
-		case 0:
-			resultString += "00";
-			break;
-		case 1:
-			resultString += "01";
-			break;
-		case 2:
-			resultString += "10";
-			break;
-		case 3:
-			resultString += "11";
-			break;
-		default:
-			break;
-		}
-		for(int i = 2; i < binaryStringVertexId.length(); i++)
-			resultString += binaryStringVertexId.charAt(i);
-		return BitwiseOperation.convertBinaryStringToBytes(resultString);
-	}
-	/**
-	 * find the vertexId of the destination node - left neighber
-	 */
-	public static byte[] getDestVertexId(byte[] sourceVertexId, byte vertexValue){
-		byte[] destVertexId = BitwiseOperation.shiftBitsLeft(sourceVertexId, 2);
-		return replaceLastTwoBits(destVertexId, findSucceedNode(vertexValue));
-	}
-	/**
-	 * find the vertexId of the destination node - right neighber
-	 */
-	public static byte[] getLeftDestVertexId(byte[] sourceVertexId, byte vertexValue){
-		byte[] destVertexId = BitwiseOperation.shiftBitsRight(sourceVertexId, 2);
-		return replaceFirstTwoBits(destVertexId, findPrecursorNode(vertexValue));
-	}
-	/**
-	 * update the chain vertexId
-	 */
-	public static byte[] updateChainVertexId(byte[] chainVertexId, int lengthOfChainVertex, byte[] newVertexId){
-		return BitwiseOperation.addLastTwoBits(chainVertexId,lengthOfChainVertex,BitwiseOperation.getLastTwoBits(newVertexId,k));
-	}
-	/**
-	 * get the first kmer from chainVertexId
-	 */
-	public static byte[] getFirstKmer(byte[] chainVertexId){
-		String originalVertexId = BitwiseOperation.convertBytesToBinaryString(chainVertexId);
-		return BitwiseOperation.convertBinaryStringToBytes(originalVertexId.substring(0,k-1));
-	}
-	/**
-	 * get the last kmer from chainVertexId
-	 */
-	public static byte[] getLastKmer(byte[] chainVertexId, int lengthOfChainVertex){
-		String originalVertexId = BitwiseOperation.convertBytesToBinaryString(chainVertexId);
-		return BitwiseOperation.convertBinaryStringToBytes(originalVertexId.substring(2*(lengthOfChainVertex-k),2*lengthOfChainVertex));
-	}
-	/**
-	 * read vertexId from RecordReader
-	 */
-	public static BytesWritable readVertexIdFromRecordReader(BytesWritable currentKey){
-		String finalBinaryString = BitwiseOperation.convertBytesToBinaryStringKmer(currentKey.getBytes(),k);
-		return new BytesWritable(BitwiseOperation.convertBinaryStringToBytes(finalBinaryString));
-	}
-	/**
-	 * merge two BytesWritable. Ex. merge two vertexId
-	 */
-	public static byte[] mergeTwoChainVertex(byte[] b1, int length, byte[] b2, int length2){
-		String s2 = BitwiseOperation.convertBytesToBinaryString(b2).substring(2*k-2,2*length2);
-		return BitwiseOperation.mergeTwoBytesArray(b1, length, BitwiseOperation.convertBinaryStringToBytes(s2), length2-k+1);
+		String neighberVertex = Kmer.recoverKmerFrom(k, neighberVertexId, 0, neighberVertexId.length);
+		
+		byte newBit = Kmer.GENE_CODE.getAdjBit((byte)neighberVertex.charAt(neighberVertex.length() - 1));
+		return (byte) ((byte)(oldVertexValue & 0xF0) | (byte) (newBit & 0x0F));
 	}
 	/**
 	 * update right neighber
@@ -273,321 +61,4 @@
 	public static byte updateRightNeighber(byte oldVertexValue, byte newVertexValue){
 		return (byte) ((byte)(oldVertexValue & 0xF0) | (byte) (newVertexValue & 0x0F));
 	}
-	/**
-	 * update right neighber based on next vertexId
-	 */
-	public static byte updateRightNeighberByVertexId(byte oldVertexValue, byte[] neighberVertexId){
-		
-		String neighberVertex = Kmer.recoverKmerFrom(GraphVertexOperation.k, neighberVertexId, 0, neighberVertexId.length);
-		
-		byte newBit = Kmer.GENE_CODE.getAdjBit((byte)neighberVertex.charAt(neighberVertex.length() - 1));
-		return (byte) ((byte)(oldVertexValue & 0xF0) | (byte) (newBit & 0x0F));
-		/*String oldVertex = BitwiseOperation.convertByteToBinaryString(oldVertexValue);
-		String neighber = BitwiseOperation.convertBytesToBinaryStringKmer(neighberVertexId, k);
-		String lastTwoBits = neighber.substring(2*k-2,2*k);
-		if(lastTwoBits.compareTo("00") == 0)
-			return BitwiseOperation.convertBinaryStringToByte(oldVertex.substring(0,4) + "0001");
-		else if(lastTwoBits.compareTo("01") == 0)
-			return BitwiseOperation.convertBinaryStringToByte(oldVertex.substring(0,4) + "0010");
-		else if(lastTwoBits.compareTo("10") == 0)
-			return BitwiseOperation.convertBinaryStringToByte(oldVertex.substring(0,4) + "0100");
-		else if(lastTwoBits.compareTo("11") == 0)
-			return BitwiseOperation.convertBinaryStringToByte(oldVertex.substring(0,4) + "1000");
-		
-		return (Byte) null;*/
-	}
-	/**
-	 * get precursor in vertexValue from gene code
-	 */
-	public static byte getPrecursorFromGeneCode(byte vertexValue, char precursor){
-		String oldVertex = BitwiseOperation.convertByteToBinaryString(vertexValue);
-		switch(precursor){
-		case 'A':
-			return BitwiseOperation.convertBinaryStringToByte("0001" + oldVertex.substring(0,4));
-		case 'C':
-			return BitwiseOperation.convertBinaryStringToByte("0010" + oldVertex.substring(0,4));
-		case 'G':
-			return BitwiseOperation.convertBinaryStringToByte("0100" + oldVertex.substring(0,4));
-		case 'T':
-			return BitwiseOperation.convertBinaryStringToByte("1000" + oldVertex.substring(0,4));
-			default:
-				return (Byte) null;
-		}
-	}
-	/**
-	 * get succeed in vertexValue from gene code
-	 */
-	public static byte getSucceedFromGeneCode(byte vertexValue, char succeed){
-		String oldVertex = BitwiseOperation.convertByteToBinaryString(vertexValue);
-		switch(succeed){
-		case 'A':
-			return BitwiseOperation.convertBinaryStringToByte(oldVertex.substring(0,4) + "0001");
-		case 'C':
-			return BitwiseOperation.convertBinaryStringToByte(oldVertex.substring(0,4) + "0010");
-		case 'G':
-			return BitwiseOperation.convertBinaryStringToByte(oldVertex.substring(0,4) + "0100");
-		case 'T':
-			return BitwiseOperation.convertBinaryStringToByte(oldVertex.substring(0,4) + "1000");
-			default:
-				return (Byte) null;
-		}
-	}
-	/**
-	 * convert gene code to binary string
-	 */
-	public static String convertGeneCodeToBinaryString(String gene){
-		String result = "";
-		for(int i = 0; i < gene.length(); i++){
-			switch(gene.charAt(i)){
-			case 'A':
-				result += "00";
-				break;
-			case 'C':
-				result += "01";
-				break;
-			case 'G':
-				result += "10";
-				break;
-			case 'T':
-				result += "11";
-				break;
-				default:
-				break;
-			}
-		}
-		return result;
-	}
-	/**
-	 * flush chainVertexId to file -- local file and hdfs file
-	 * @throws IOException 
-	 */
-	public static void flushChainToFile(byte[] chainVertexId, int lengthOfChain, byte[] vertexId) throws IOException{
-		 DataOutputStream out = new DataOutputStream(new 
-                 FileOutputStream("data/ChainVertex"));
-		 out.write(vertexId);
-		 out.writeInt(lengthOfChain);
-		 out.write(chainVertexId);
-		 out.close();
-		 //String srcFile = "data/ChainVertex";
-		 //String dstFile = "testHDFS/output/ChainVertex";
-		 //HDFSOperation.copyFromLocalFile(srcFile, dstFile);
-	}
-	/**
-	 * convert binaryString to geneCode
-	 */
-	public static String convertBinaryStringToGenecode(String kmer){
-		String result = "";
-		for(int i = 0; i < kmer.length() ; ){
-			String substring = kmer.substring(i,i+2);
-			if(substring.compareTo("00") == 0)
-				result += "A";
-			else if(substring.compareTo("01") == 0)
-				result += "C";
-			else if(substring.compareTo("10") == 0)
-				result += "G";
-			else if(substring.compareTo("11") == 0)
-				result += "T";
-			i = i+2;
-		}
-		return result;
-	}
-	/**
-	 *  generate the valid data(byte[]) from BytesWritable
-	 */
-	public static byte[] generateValidDataFromBytesWritable(BytesWritable bw){
-		byte[] wholeBytes = bw.getBytes();
-		int validNum = bw.getLength();
-		byte[] validBytes = new byte[validNum];
-		for(int i = 0; i < validNum; i++)
-			validBytes[i] = wholeBytes[i];
-		return validBytes;
-	}
-	/**
-	 *  output test for message communication
-	 */
-	public static void testMessageCommunication(OutputStreamWriter writer, long step, byte[] tmpSourceVertextId,
-			byte[] tmpDestVertexId, MessageWritable tmpMsg){
-		//test
-    	String kmer = BitwiseOperation.convertBytesToBinaryStringKmer(
-    			tmpSourceVertextId,GraphVertexOperation.k);
-    	try {
-    		writer.write("Step: " + step + "\r\n");
-			writer.write("Source Key: " + kmer + "\r\n");
-		
-        	writer.write("Source Code: " + 
-		    		GraphVertexOperation.convertBinaryStringToGenecode(kmer) + "\r\n");
-        	writer.write("Send Message to: " + 
-		    		GraphVertexOperation.convertBinaryStringToGenecode(
-		    				BitwiseOperation.convertBytesToBinaryStringKmer(
-		    						tmpDestVertexId,GraphVertexOperation.k)) + "\r\n");
-        	writer.write("Chain Message: " + 
-		    		GraphVertexOperation.convertBinaryStringToGenecode(
-		    						BitwiseOperation.convertBytesToBinaryString(
-		    								tmpMsg.getChainVertexId())) + "\r\n");
-        	writer.write("Chain Length: " + tmpMsg.getLengthOfChain() + "\r\n"); 
-        	writer.write("\r\n");
-    	} catch (IOException e) { e.printStackTrace(); }
-    	return;
-	}
-	/**
-	 *  output test for message communication
-	 */
-	public static void testMessageCommunication2(OutputStreamWriter writer, long step, byte[] tmpSourceVertextId,
-			byte[] tmpDestVertexId, LogAlgorithmMessageWritable tmpMsg, byte[] myownId){
-		//test
-    	String kmer = BitwiseOperation.convertBytesToBinaryStringKmer(
-    			tmpSourceVertextId,GraphVertexOperation.k);
-    	try {
-    		writer.write("Step: " + step + "\r\n");
-			writer.write("Source Key: " + kmer + "\r\n");
-		
-        	writer.write("Source Code: " + 
-		    		GraphVertexOperation.convertBinaryStringToGenecode(kmer) + "\r\n");
-        	writer.write("Send Message to: " + 
-		    		GraphVertexOperation.convertBinaryStringToGenecode(
-		    				BitwiseOperation.convertBytesToBinaryStringKmer(
-		    						tmpDestVertexId,GraphVertexOperation.k)) + "\r\n");
-        	if(tmpMsg.getLengthOfChain() != 0){
-        		writer.write("Chain Message: " + 
-		    		GraphVertexOperation.convertBinaryStringToGenecode(
-		    						BitwiseOperation.convertBytesToBinaryString(
-		    								tmpMsg.getChainVertexId())) + "\r\n");
-        		writer.write("Chain Length: " + tmpMsg.getLengthOfChain() + "\r\n"); 
-        	}
-        	if(myownId != null)
-        		writer.write("My own Id is: " + 
-        				GraphVertexOperation.convertBinaryStringToGenecode(
-	    						BitwiseOperation.convertBytesToBinaryStringKmer(
-	    								myownId,GraphVertexOperation.k)) + "\r\n");
-        	if(tmpMsg.getMessage() != 0)
-        		writer.write("Message is: " + tmpMsg.getMessage() + "\r\n");
-        	writer.write("\r\n");
-    	} catch (IOException e) { e.printStackTrace(); }
-    	return;
-	}
-	/**
-	 *  output test for last message communication -- flush
-	 */
-	public static void testLastMessageCommunication(OutputStreamWriter writer, long step, byte[] tmpVertextId,
-			byte[] tmpSourceVertextId,  MessageWritable tmpMsg){
-		String kmer = BitwiseOperation.convertBytesToBinaryStringKmer(
-    			tmpVertextId,GraphVertexOperation.k);
-    	try {
-    		writer.write("Step: " + step + "\r\n");
-    		writer.write("Over!" + "\r\n");
-			writer.write("Source Key: " + kmer + "\r\n");
-			
-        	writer.write("Source Code: " + 
-		    		GraphVertexOperation.convertBinaryStringToGenecode(kmer) + "\r\n");
-        
-        	writer.write("Flush Chain Message: " + 
-		    		GraphVertexOperation.convertBinaryStringToGenecode(
-		    						BitwiseOperation.convertBytesToBinaryString(
-		    								tmpMsg.getChainVertexId())) + "\r\n");
-        	writer.write("Chain Length: " + tmpMsg.getLengthOfChain() + "\r\n"); 
-        	writer.write("\r\n");
-    	} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-	}
-	/**
-	 *  output test for log message communication
-	 */
-	public static void testLogMessageCommunication(OutputStreamWriter writer, long step, byte[] tmpSourceVertextId,
-			byte[] tmpDestVertexId, LogAlgorithmMessageWritable tmpMsg){
-		//test
-    	String kmer = BitwiseOperation.convertBytesToBinaryStringKmer(
-    			tmpSourceVertextId,GraphVertexOperation.k);
-    	try {
-    		writer.write("Step: " + step + "\r\n");
-			writer.write("Source Key: " + kmer + "\r\n");
-		
-        	writer.write("Source Code: " + 
-		    		GraphVertexOperation.convertBinaryStringToGenecode(kmer) + "\r\n");
-        	writer.write("Send Message to: " + 
-		    		GraphVertexOperation.convertBinaryStringToGenecode(
-		    				BitwiseOperation.convertBytesToBinaryStringKmer(
-		    						tmpDestVertexId,GraphVertexOperation.k)) + "\r\n");
-        	writer.write("Message is: " +
-        			tmpMsg.getMessage() + "\r\n");
-        	writer.write("\r\n");
-    	} catch (IOException e) { e.printStackTrace(); }
-    	return;
-	}	
-	/**
-	 *  test set vertex state
-	 */
-	public static void testSetVertexState(OutputStreamWriter writer, long step,byte[] tmpSourceVertextId,
-			byte[] tmpDestVertexId, LogAlgorithmMessageWritable tmpMsg, ValueStateWritable tmpVal){
-		//test
-    	String kmer = BitwiseOperation.convertBytesToBinaryStringKmer(
-    			tmpSourceVertextId,GraphVertexOperation.k);
-    	try {
-    		writer.write("Step: " + step + "\r\n");
-			writer.write("Source Key: " + kmer + "\r\n");
-		
-        	writer.write("Source Code: " + 
-		    		GraphVertexOperation.convertBinaryStringToGenecode(kmer) + "\r\n");
-        	if(tmpDestVertexId != null && tmpMsg != null){
-	        	writer.write("Send Message to: " + 
-			    		GraphVertexOperation.convertBinaryStringToGenecode(
-			    				BitwiseOperation.convertBytesToBinaryStringKmer(
-			    						tmpDestVertexId,GraphVertexOperation.k)) + "\r\n");
-	        	writer.write("Message is: " +
-	        			tmpMsg.getMessage() + "\r\n");
-        	}
-        	writer.write("Set vertex state to " +
-        			tmpVal.getState() + "\r\n");
-        	writer.write("\r\n");
-
-    	} catch (IOException e) { e.printStackTrace(); }
-    	return;
-	}
-	/**
-	 *  test delete vertex information
-	 */
-	public static void testDeleteVertexInfo(OutputStreamWriter writer, long step, byte[] vertexId, String reason){
-		try {
-    		writer.write("Step: " + step + "\r\n");
-			writer.write(reason + "\r\n");
-			writer.write("delete " + BitwiseOperation.convertBytesToBinaryStringKmer(vertexId, GraphVertexOperation.k) 
-				 + "\t" + GraphVertexOperation.convertBinaryStringToGenecode(
-		    				BitwiseOperation.convertBytesToBinaryStringKmer(
-		    						vertexId,GraphVertexOperation.k)) + "\r\n");
-			writer.write("\r\n");
-    	} catch (IOException e) { e.printStackTrace(); }
-    	return;
-	}
-	/**
-	 *  test voteToHalt vertex information
-	 */
-	public static void testVoteVertexInfo(OutputStreamWriter writer, long step, byte[] vertexId, String reason){
-		try {
-    		writer.write("Step: " + step + "\r\n");
-			writer.write(reason + "\r\n");
-			writer.write("voteToHalt " + BitwiseOperation.convertBytesToBinaryStringKmer(vertexId, GraphVertexOperation.k) 
-				 + "\t" + GraphVertexOperation.convertBinaryStringToGenecode(
-		    				BitwiseOperation.convertBytesToBinaryStringKmer(
-		    						vertexId,GraphVertexOperation.k)) + "\r\n");
-			writer.write("\r\n");
-    	} catch (IOException e) { e.printStackTrace(); }
-    	return;
-	}
-	/**
-	 *  test merge chain vertex
-	 */
-	public static void testMergeChainVertex(OutputStreamWriter writer, long step, byte[] mergeChain,
-			int lengthOfChain){
-		try {
-    		writer.write("Step: " + step + "\r\n");
-        	writer.write("Merge Chain: " + 
-		    		GraphVertexOperation.convertBinaryStringToGenecode(
-		    						BitwiseOperation.convertBytesToBinaryString(
-		    								mergeChain)) + "\r\n");
-        	writer.write("Chain Length: " + lengthOfChain + "\r\n");
-			writer.write("\r\n");
-    	} catch (IOException e) { e.printStackTrace(); }
-    	return;
-	}
 }
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 2264301..7034239 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
@@ -46,7 +46,9 @@
  * The details about message are in edu.uci.ics.pregelix.example.io.MessageWritable. 
  */
 public class LogAlgorithmForMergeGraphVertex extends Vertex<BytesWritable, ValueStateWritable, NullWritable, LogAlgorithmMessageWritable>{
-
+	public static final String KMER_SIZE = "LogAlgorithmForMergeGraphVertex.kmerSize";
+	public static int kmerSize = -1;
+	
 	private byte[] tmpVertexId;
 	private byte[] tmpDestVertexId;
 	private BytesWritable destVertexId = new BytesWritable();
@@ -59,9 +61,17 @@
 	 * Log Algorithm for path merge graph
 	 */
 	
+	/**
+     *	Load KmerSize
+     */
+	public LogAlgorithmForMergeGraphVertex(){
+		
+	}
+	
 	@Override
 	public void compute(Iterator<LogAlgorithmMessageWritable> msgIterator) {
-
+		if(kmerSize == -1)
+			kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
 		tmpVertexId = GraphVertexOperation.generateValidDataFromBytesWritable(getVertexId());
 		tmpVal = getVertexValue();
 		if (getSuperstep() == 1) {
@@ -70,7 +80,7 @@
 				tmpMsg.setMessage(Message.START);
 				for(byte x = Kmer.GENE_CODE.A; x<= Kmer.GENE_CODE.T ; x++){
 					if((tmpVal.getValue() & (1 << x)) != 0){
-						tmpDestVertexId = KmerUtil.shiftKmerWithNextCode(GraphVertexOperation.k, tmpVertexId, 0, tmpVertexId.length,x);
+						tmpDestVertexId = KmerUtil.shiftKmerWithNextCode(kmerSize, tmpVertexId, 0, tmpVertexId.length, x);
 						destVertexId.set(tmpDestVertexId, 0, tmpDestVertexId.length);
 						sendMsg(destVertexId,tmpMsg);
 					}
@@ -82,7 +92,7 @@
 				
 				for(byte x = Kmer.GENE_CODE.A; x<= Kmer.GENE_CODE.T ; x++){
 					if(((tmpVal.getValue()>> 4) & (1 << x)) != 0){
-						tmpDestVertexId = KmerUtil.shiftKmerWithPreCode(GraphVertexOperation.k, tmpVertexId, 0, tmpVertexId.length, x);
+						tmpDestVertexId = KmerUtil.shiftKmerWithPreCode(kmerSize, tmpVertexId, 0, tmpVertexId.length, x);
 						destVertexId.set(tmpDestVertexId, 0, tmpDestVertexId.length);
 						sendMsg(destVertexId,tmpMsg);
 					}
@@ -120,7 +130,8 @@
 		else if(getSuperstep()%3 == 0){
 			if(getSuperstep() == 3){
 				tmpMsg = new LogAlgorithmMessageWritable();
-				tmpDestVertexId = KmerUtil.shiftKmerWithNextCode(GraphVertexOperation.k, tmpVertexId, 0, tmpVertexId.length,
+				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){
@@ -139,10 +150,12 @@
 			else{
 				if(msgIterator.hasNext()){
 					tmpMsg = msgIterator.next();
-					byte[] lastKmer = KmerUtil.getLastKmerFromChain(GraphVertexOperation.k,
+					byte[] lastKmer = KmerUtil.getLastKmerFromChain(kmerSize,
 							tmpVal.getLengthOfMergeChain(),
-							tmpVal.getMergeChain(),0,tmpVal.getMergeChain().length);
-					tmpDestVertexId = KmerUtil.shiftKmerWithNextCode(GraphVertexOperation.k, lastKmer, 0, lastKmer.length,
+							tmpVal.getMergeChain(),
+							0, tmpVal.getMergeChain().length);
+					tmpDestVertexId = KmerUtil.shiftKmerWithNextCode(kmerSize, lastKmer, 
+							0, lastKmer.length,
 							Kmer.GENE_CODE.getGeneCodeFromBitMap((byte)(tmpVal.getValue() & 0x0F))); //tmpMsg.getNeighberInfo()
 					destVertexId.set(tmpDestVertexId, 0, tmpDestVertexId.length);
 					if(tmpVal.getState() == State.START_VERTEX){
@@ -166,7 +179,7 @@
 				tmpMsg = msgIterator.next();
 				int message = tmpMsg.getMessage();
 				if(tmpVal.getLengthOfMergeChain() == 0){
-					tmpVal.setLengthOfMergeChain(GraphVertexOperation.k);
+					tmpVal.setLengthOfMergeChain(kmerSize);
 					tmpVal.setMergeChain(tmpVertexId);
 					setVertexValue(tmpVal);
 				}
@@ -215,22 +228,22 @@
 					}
 						
 					if(getSuperstep() == 5){
-						lengthOfMergeChainVertex = GraphVertexOperation.k;
+						lengthOfMergeChainVertex = kmerSize;
 						mergeChainVertexId = tmpVertexId;
 					}
 					else{
 						lengthOfMergeChainVertex = tmpVal.getLengthOfMergeChain(); 
 						mergeChainVertexId = tmpVal.getMergeChain(); 
 					}
-					byte[] tmplastKmer = KmerUtil.getLastKmerFromChain(tmpMsg.getLengthOfChain() - GraphVertexOperation.k + 1,
+					byte[] tmplastKmer = KmerUtil.getLastKmerFromChain(tmpMsg.getLengthOfChain() - kmerSize + 1,
 							tmpMsg.getLengthOfChain(), tmpMsg.getChainVertexId(),0, tmpMsg.getChainVertexId().length);
 					mergeChainVertexId = KmerUtil.mergeTwoKmer(lengthOfMergeChainVertex, 
-							mergeChainVertexId, 0, mergeChainVertexId.length,
-							tmpMsg.getLengthOfChain() - GraphVertexOperation.k + 1, 
-							tmplastKmer, 0 , tmplastKmer.length
-							);
+							mergeChainVertexId, 
+							0, mergeChainVertexId.length,
+							tmpMsg.getLengthOfChain() - kmerSize + 1, 
+							tmplastKmer, 0, tmplastKmer.length);
 					lengthOfMergeChainVertex = lengthOfMergeChainVertex + tmpMsg.getLengthOfChain()
-							- GraphVertexOperation.k + 1;
+							- kmerSize + 1;
 					tmpVal.setLengthOfMergeChain(lengthOfMergeChainVertex);
 					tmpVal.setMergeChain(mergeChainVertexId);
 
@@ -258,8 +271,8 @@
 	 * @param args
 	 */
 	public static void main(String[] args) throws Exception {
-        PregelixJob job = new PregelixJob(MergeGraphVertex.class.getSimpleName());
-        job.setVertexClass(MergeGraphVertex.class);
+        PregelixJob job = new PregelixJob(LogAlgorithmForMergeGraphVertex.class.getSimpleName());
+        job.setVertexClass(LogAlgorithmForMergeGraphVertex.class);
         /**
          * BinaryInput and BinaryOutput~/
          */
@@ -267,6 +280,7 @@
         job.setVertexOutputFormatClass(LogAlgorithmForMergeGraphOutputFormat.class); 
         job.setOutputKeyClass(BytesWritable.class);
         job.setOutputValueClass(ValueStateWritable.class);
+        job.setDynamicVertexValueSize(true);
         Client.run(args, job);
 	}
 }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/MergeGraphVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/MergeGraphVertex.java
index 7f2cc43..12450b4 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/MergeGraphVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/MergeGraphVertex.java
@@ -1,10 +1,12 @@
 package edu.uci.ics.genomix.pregelix;
 
-import java.io.IOException;
 import java.util.Iterator;
 
+import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.io.BytesWritable;
 import org.apache.hadoop.io.NullWritable;
+import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
+import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
 
 import edu.uci.ics.genomix.type.Kmer;
 import edu.uci.ics.genomix.type.KmerUtil;
@@ -47,6 +49,9 @@
  */
 public class MergeGraphVertex extends Vertex<BytesWritable, ValueStateWritable, NullWritable, MessageWritable>{
 	
+	public static final String KMER_SIZE = "MergeGraphVertex.kmerSize";
+	public static int kmerSize = -1;
+	
     private byte[] tmpVertexId;
     private byte[] tmpDestVertexId;
 	private BytesWritable destVertexId = new BytesWritable();
@@ -59,9 +64,13 @@
 	 * @throws  
 	 */
 	
+	/**
+     *	Load KmerSize
+     */
 	@Override
 	public void compute(Iterator<MessageWritable> msgIterator) {
-		
+		if(kmerSize == -1)
+			kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
 		tmpVertexId = GraphVertexOperation.generateValidDataFromBytesWritable(getVertexId());
 		if (getSuperstep() == 1) {
 			if(GraphVertexOperation.isHeadVertex(getVertexValue().getValue())){ 
@@ -71,7 +80,7 @@
 				tmpMsg.setChainVertexId(tmpChainVertexId.getBytes());
 				for(byte x = Kmer.GENE_CODE.A; x<= Kmer.GENE_CODE.T ; x++){
 					if((getVertexValue().getValue() & (1 << x)) != 0){
-						tmpDestVertexId = KmerUtil.shiftKmerWithNextCode(GraphVertexOperation.k, tmpVertexId, 0, tmpVertexId.length, x);
+						tmpDestVertexId = KmerUtil.shiftKmerWithNextCode(kmerSize, tmpVertexId, 0, tmpVertexId.length, x);
 						destVertexId.set(tmpDestVertexId, 0, tmpDestVertexId.length);
 						sendMsg(destVertexId,tmpMsg);
 					}
@@ -92,14 +101,15 @@
 						tmpDestVertexId = tmpMsg.getSourceVertexId();
 						tmpMsg.setNeighberInfo(getVertexValue().getValue()); //set neighber
 						if(tmpMsg.getLengthOfChain() == 0){
-							tmpMsg.setLengthOfChain(GraphVertexOperation.k);
+							tmpMsg.setLengthOfChain(kmerSize);
 							tmpMsg.setChainVertexId(tmpVertexId);
 						}
 						else{
-							String source = Kmer.recoverKmerFrom(GraphVertexOperation.k, tmpVertexId, 0, tmpVertexId.length);
+							String source = Kmer.recoverKmerFrom(kmerSize, tmpVertexId, 0, tmpVertexId.length);
 							tmpMsg.setChainVertexId(KmerUtil.mergeKmerWithNextCode(
 									tmpMsg.getLengthOfChain(),
-									tmpMsg.getChainVertexId(),0, tmpMsg.getChainVertexId().length,
+									tmpMsg.getChainVertexId(), 
+									0, tmpMsg.getChainVertexId().length,
 									Kmer.GENE_CODE.getCodeFromSymbol((byte)source.charAt(source.length() - 1))));
 							tmpMsg.incrementLength();
 							deleteVertex(getVertexId());
@@ -122,15 +132,17 @@
 				else{
 					tmpVertexValue.setState(State.START_VERTEX);
 					tmpVertexValue.setValue(GraphVertexOperation.updateRightNeighberByVertexId(getVertexValue().getValue(),
-							tmpMsg.getSourceVertexId()));
+							tmpMsg.getSourceVertexId(), kmerSize));
 					tmpVertexValue.setLengthOfMergeChain(tmpMsg.getLengthOfChain());
 					tmpVertexValue.setMergeChain(tmpMsg.getChainVertexId());
 					setVertexValue(tmpVertexValue);
-					try {
-						//String source = Kmer.recoverKmerFrom(tmpMsg.getLengthOfChain(), tmpMsg.getChainVertexId(), 0, tmpMsg.getChainVertexId().length);
+					//String source = Kmer.recoverKmerFrom(tmpMsg.getLengthOfChain(), tmpMsg.getChainVertexId(), 0, tmpMsg.getChainVertexId().length);
+					//System.out.print("");
+					/*try {
+						
 						GraphVertexOperation.flushChainToFile(tmpMsg.getChainVertexId(), 
 								tmpMsg.getLengthOfChain(),tmpVertexId);
-					} catch (IOException e) { e.printStackTrace(); }
+					} catch (IOException e) { e.printStackTrace(); }*/
 				}
 			}
 		}
@@ -139,10 +151,12 @@
 			while (msgIterator.hasNext()){
 				tmpMsg = msgIterator.next();
 				if(!tmpMsg.isRear()){
-					byte[] lastKmer = KmerUtil.getLastKmerFromChain(GraphVertexOperation.k,
+					byte[] lastKmer = KmerUtil.getLastKmerFromChain(kmerSize,
 							tmpMsg.getLengthOfChain(),
-							tmpMsg.getChainVertexId(), 0 , tmpMsg.getChainVertexId().length);
-					tmpDestVertexId = KmerUtil.shiftKmerWithNextCode(GraphVertexOperation.k, lastKmer, 0, lastKmer.length,
+							tmpMsg.getChainVertexId(),
+							0, tmpMsg.getChainVertexId().length);
+					tmpDestVertexId = KmerUtil.shiftKmerWithNextCode(kmerSize, lastKmer, 
+							0, lastKmer.length,
 							Kmer.GENE_CODE.getGeneCodeFromBitMap((byte)(tmpMsg.getNeighberInfo() & 0x0F)));
 
 					tmpMsg.setSourceVertexId(tmpVertexId);
@@ -170,6 +184,7 @@
          */
         job.setVertexInputFormatClass(BinaryLoadGraphInputFormat.class); 
         job.setVertexOutputFormatClass(BinaryLoadGraphOutputFormat.class); 
+        job.setDynamicVertexValueSize(true);
         job.setOutputKeyClass(BytesWritable.class);
         job.setOutputValueClass(ValueStateWritable.class);
         Client.run(args, job);
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TestMemory.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TestMemory.java
deleted file mode 100644
index 247ca42..0000000
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TestMemory.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package edu.uci.ics.genomix.pregelix;
-/**
-* Class: TestMemory
-* @author: Anbang Xu
-* @description: Prints JVM memory utilization statistics
-*/
-public class TestMemory {
-     
-    public static void main(String [] args) {
-         
-        int mb = 1024*1024;
-         
-        //Getting the runtime reference from system
-        Runtime runtime = Runtime.getRuntime();
-         
-        System.out.println("##### Heap utilization statistics [MB] #####");
-         
-        //Print used memory
-        System.out.println("Used Memory:"
-            + (runtime.totalMemory() - runtime.freeMemory()) / mb);
- 
-        //Print free memory
-        System.out.println("Free Memory:"
-            + runtime.freeMemory() / mb);
-         
-        //Print total available memory
-        System.out.println("Total Memory:" + runtime.totalMemory() / mb);
- 
-        //Print Maximum available memory
-        System.out.println("Max Memory:" + runtime.maxMemory() / mb);
-    }
-}
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/client/Client.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/client/Client.java
index 128b0dc..ab0fb57 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/client/Client.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/client/Client.java
@@ -10,6 +10,8 @@
 import org.kohsuke.args4j.CmdLineParser;
 import org.kohsuke.args4j.Option;
 
+import edu.uci.ics.genomix.pregelix.LogAlgorithmForMergeGraphVertex;
+import edu.uci.ics.genomix.pregelix.MergeGraphVertex;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
 import edu.uci.ics.pregelix.core.base.IDriver.Plan;
 import edu.uci.ics.pregelix.core.driver.Driver;
@@ -31,6 +33,9 @@
 
         @Option(name = "-plan", usage = "query plan choice", required = false)
         public Plan planChoice = Plan.OUTER_JOIN;
+        
+        @Option(name = "-kmer-size", usage = "the size of kmer", required = false)
+        public int sizeKmer;
 
         @Option(name = "-runtime-profiling", usage = "whether to do runtime profifling", required = false)
         public String profiling = "false";
@@ -52,6 +57,8 @@
         for (int i = 1; i < inputs.length; i++)
             FileInputFormat.addInputPaths(job, inputs[0]);
         FileOutputFormat.setOutputPath(job, new Path(options.outputPath));
+        job.getConfiguration().setInt(MergeGraphVertex.KMER_SIZE, options.sizeKmer);
+        job.getConfiguration().setInt(LogAlgorithmForMergeGraphVertex.KMER_SIZE, options.sizeKmer);
         return options;
     }
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/BinaryLoadGraphOutputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/BinaryLoadGraphOutputFormat.java
index f02d426..2b87379 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/BinaryLoadGraphOutputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/BinaryLoadGraphOutputFormat.java
@@ -2,7 +2,6 @@
 
 import java.io.IOException;
 
-import org.apache.hadoop.io.ByteWritable;
 import org.apache.hadoop.io.BytesWritable;
 import org.apache.hadoop.io.NullWritable;
 import org.apache.hadoop.mapreduce.RecordWriter;
@@ -10,7 +9,6 @@
 
 import edu.uci.ics.genomix.pregelix.api.io.binary.BinaryVertexOutputFormat;
 import edu.uci.ics.genomix.pregelix.io.ValueStateWritable;
-import edu.uci.ics.genomix.pregelix.io.ValueWritable;
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.io.VertexWriter;
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForMergeGraphInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForMergeGraphInputFormat.java
index 4834e56..0e74c2d 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForMergeGraphInputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForMergeGraphInputFormat.java
@@ -1,7 +1,6 @@
 package edu.uci.ics.genomix.pregelix.format;
 
 import java.io.IOException;
-import java.util.logging.FileHandler;
 
 import org.apache.hadoop.io.BytesWritable;
 import org.apache.hadoop.io.NullWritable;
@@ -9,9 +8,7 @@
 import org.apache.hadoop.mapreduce.RecordReader;
 import org.apache.hadoop.mapreduce.TaskAttemptContext;
 
-import edu.uci.ics.genomix.pregelix.GraphVertexOperation;
 import edu.uci.ics.genomix.pregelix.api.io.binary.BinaryVertexInputFormat;
-import edu.uci.ics.genomix.pregelix.bitwise.BitwiseOperation;
 import edu.uci.ics.genomix.pregelix.io.LogAlgorithmMessageWritable;
 import edu.uci.ics.genomix.pregelix.io.ValueStateWritable;
 import edu.uci.ics.genomix.pregelix.type.State;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/Graph.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/Graph.java
index a63c307..df09a64 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/Graph.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/Graph.java
@@ -1,11 +1,8 @@
 package edu.uci.ics.genomix.pregelix.graph;
 
 import java.io.BufferedReader;
-import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
 
 public class Graph {
 	
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/hdfs/HDFSOperation.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/hdfs/HDFSOperation.java
deleted file mode 100644
index 824722a..0000000
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/hdfs/HDFSOperation.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package edu.uci.ics.genomix.pregelix.hdfs;
-
-import java.io.IOException;
-
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FSDataInputStream;
-import org.apache.hadoop.fs.FSDataOutputStream;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Path;
-
-public class HDFSOperation {
-
-	private static Configuration conf;
-	private static FileSystem hdfs;
-	private static Path path;
-	
-	public HDFSOperation() throws IOException{
-		conf = new Configuration();
-		hdfs = FileSystem.get(conf);
-		path = null;
-	}
-	
-	public static boolean insertHDFSFile(String fileName, int length, byte[] buffer) throws IOException{
-		path = new Path(fileName);
-		if (!hdfs.exists(path))
-			createHDFSFile(fileName,length,buffer);
-		else
-			appendHDFSFile(fileName,length,buffer);
-		return true;
-	}
-	
-	public static boolean createHDFSFile(String fileName, int length, byte[] buffer) throws IOException{
-		path = new Path(fileName);
-		if (hdfs.exists(path)){
-			System.out.println("Output already exists");
-		    return false;
-		}
-		/*if (!hdfs.isFile(path)){
-			System.out.println("Output should be a file");
-		    return false;
-		}*/
-		FSDataOutputStream outputStream = hdfs.create(path);
-		outputStream.writeInt(length);
-		outputStream.write(buffer); 
-		outputStream.close();
-		return true;
-	}
-	
-	public static boolean appendHDFSFile(String fileName, int length, byte[] buffer) throws IOException{
-		path = new Path(fileName);
-		if (!hdfs.exists(path)){
-			System.out.println("Output not found");
-		    return false;
-		}
-		if (!hdfs.isFile(path)){
-			System.out.println("Output should be a file");
-		    return false;
-		}
-		FSDataOutputStream outputStream = hdfs.append(path);
-		outputStream.writeInt(length);
-		outputStream.write(buffer); 
-		outputStream.close();
-		return true;
-	}
-	
-	public static boolean deleteHDFSFile(String fileName) throws IOException{
-		path = new Path(fileName);
-		if (!hdfs.exists(path)){
-			System.out.println("Input file not found");
-			return false;
-		}
-		if (!hdfs.isFile(path)){
-			System.out.println("Input should be a file");
-		    return false;
-		}
-		return hdfs.delete(path,true);
-	}
-	
-	public static boolean copyFromLocalFile(String srcFile, String dstFile) throws IOException{
-		Path srcPath = new Path(srcFile);
-		path = new Path(dstFile);
-		if (!hdfs.exists(path)){
-			System.out.println("Input file not found");
-			return false;
-		}
-		if (!hdfs.isFile(path)){
-			System.out.println("Input should be a file");
-		    return false;
-		}
-		hdfs.copyFromLocalFile(srcPath, path);
-		return true;
-	}
-	
-	public static void testReadAndWriteHDFS() throws Exception{
-		String inFileName = "testHDFS/testInput";
-		String outFileName = "testHDFS/testOutput";
-		Configuration conf = new Configuration();
-		FileSystem fs = FileSystem.get(conf);
-		Path inFile = new Path(inFileName);
-		Path outFile = new Path(outFileName);
-		if (!fs.exists(inFile)){
-			System.out.println("Input file not found");
-			return;
-		}
-		if (!fs.isFile(inFile)){
-			System.out.println("Input should be a file");
-		    return;
-		}
-		if (fs.exists(outFile)){
-			System.out.println("Output already exists");
-		    return;
-		}
-		FSDataInputStream in = fs.open(inFile);
-		FSDataOutputStream out = fs.create(outFile);
-		byte[] buffer = new byte[1024];
-		int bytesRead = 0;
-		while ((bytesRead = in.read(buffer)) > 0) {
-			out.write(buffer, 0, bytesRead);
-		}
-		in.close();
-		out.close();
-	}
-}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/LogAlgorithmMessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/LogAlgorithmMessageWritable.java
index 4be98bc..42f1269 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/LogAlgorithmMessageWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/LogAlgorithmMessageWritable.java
@@ -6,8 +6,7 @@
 import java.io.IOException;
 
 import org.apache.hadoop.io.WritableComparable;
-
-import edu.uci.ics.genomix.pregelix.GraphVertexOperation;
+import edu.uci.ics.genomix.pregelix.LogAlgorithmForMergeGraphVertex;
 
 public class LogAlgorithmMessageWritable implements WritableComparable<LogAlgorithmMessageWritable>{
 	/**
@@ -25,7 +24,7 @@
 	private int sourceVertexState;
 	
 	public LogAlgorithmMessageWritable(){
-		sourceVertexId = new byte[(GraphVertexOperation.k-1)/4 + 1];
+		sourceVertexId = new byte[(LogAlgorithmForMergeGraphVertex.kmerSize-1)/4 + 1];
 	}
 	
 	public void set(byte[] sourceVertexId,byte neighberInfo, byte[] chainVertexId, File file){
@@ -37,7 +36,7 @@
 	}
 	
 	public void reset(){
-		sourceVertexId = new byte[(GraphVertexOperation.k-1)/4 + 1];
+		sourceVertexId = new byte[(LogAlgorithmForMergeGraphVertex.kmerSize-1)/4 + 1];
 		neighberInfo = (Byte) null;
 		lengthOfChain = 0;
 		chainVertexId = null;
@@ -133,7 +132,7 @@
 		message = in.readInt();
 		sourceVertexState = in.readInt();
 		
-		sourceVertexId = new byte[(GraphVertexOperation.k-1)/4 + 1];
+		sourceVertexId = new byte[(LogAlgorithmForMergeGraphVertex.kmerSize-1)/4 + 1];
 		in.readFully(sourceVertexId);
 		neighberInfo = in.readByte();
 	}
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 3146088..2976c87 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
@@ -6,8 +6,7 @@
 import java.io.IOException;
 
 import org.apache.hadoop.io.WritableComparable;
-
-import edu.uci.ics.genomix.pregelix.GraphVertexOperation;
+import edu.uci.ics.genomix.pregelix.MergeGraphVertex;
 
 public class MessageWritable implements WritableComparable<MessageWritable>{
 	/**
@@ -120,9 +119,9 @@
 		}
 		else
 			chainVertexId = new byte[0];
-		sourceVertexId = new byte[(GraphVertexOperation.k-1)/4 + 1];
+		sourceVertexId = new byte[(MergeGraphVertex.kmerSize-1)/4 + 1];
 		in.readFully(sourceVertexId);
-		head = new byte[(GraphVertexOperation.k-1)/4 + 1];
+		head = new byte[(MergeGraphVertex.kmerSize-1)/4 + 1];
 		in.readFully(head);
 		neighberInfo = in.readByte();
 		isRear = in.readBoolean();
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/LogAlgorithmLogFormatter.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/LogAlgorithmLogFormatter.java
index 2e4fd68..e0d241a 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/LogAlgorithmLogFormatter.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/LogAlgorithmLogFormatter.java
@@ -2,9 +2,6 @@
 
 import java.util.logging.*;
 
-import org.apache.hadoop.io.ByteWritable;
-import org.apache.hadoop.io.BytesWritable;
-
 import edu.uci.ics.genomix.pregelix.io.LogAlgorithmMessageWritable;
 import edu.uci.ics.genomix.pregelix.type.Message;
 import edu.uci.ics.genomix.pregelix.type.State;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/NaiveAlgorithmLogFormatter.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/NaiveAlgorithmLogFormatter.java
index c9abd6e..ef0d96f 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/NaiveAlgorithmLogFormatter.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/NaiveAlgorithmLogFormatter.java
@@ -2,9 +2,6 @@
 
 import java.util.logging.*;
 
-import org.apache.hadoop.io.ByteWritable;
-import org.apache.hadoop.io.BytesWritable;
-
 import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.type.Kmer;
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/CombineSequenceFile.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/CombineSequenceFile.java
index bbbb84f..8924302 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/CombineSequenceFile.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/CombineSequenceFile.java
@@ -1,6 +1,6 @@
 package edu.uci.ics.genomix.pregelix.sequencefile;
+
 import java.io.File;
-import java.io.IOException;
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
@@ -9,7 +9,6 @@
 import org.apache.hadoop.io.SequenceFile;
 import org.apache.hadoop.io.SequenceFile.CompressionType;
 
-import edu.uci.ics.genomix.pregelix.GraphVertexOperation;
 import edu.uci.ics.genomix.type.Kmer;
 import edu.uci.ics.genomix.type.KmerCountValue;
 
@@ -22,10 +21,11 @@
 	 */
 	public static void main(String[] args) throws Exception {
 		// TODO Auto-generated method stub
+		int kmerSize = 5;
 		Configuration conf = new Configuration();
 		FileSystem fileSys = FileSystem.get(conf);
 		
-		Path p = new Path("data/ThreeKmer");
+		Path p = new Path("data/SinglePath_55");
 		Path p2 = new Path("data/result");
 		Path outFile = new Path(p2, "output"); 
 		SequenceFile.Reader reader;
@@ -35,13 +35,13 @@
 	    BytesWritable key = new BytesWritable();
 	    KmerCountValue value = new KmerCountValue();
 	    
-	    File dir = new File("data/ThreeKmer");
+	    File dir = new File("data/SinglePath_55");
 		for(File child : dir.listFiles()){
 			String name = child.getAbsolutePath();
 			Path inFile = new Path(p, name);
 			reader = new SequenceFile.Reader(fileSys, inFile, conf);
 			while (reader.next(key, value)) {
-				System.out.println(Kmer.recoverKmerFrom(GraphVertexOperation.k, key.getBytes(), 0,
+				System.out.println(Kmer.recoverKmerFrom(kmerSize, key.getBytes(), 0,
 						key.getLength())
 						+ "\t" + value.toString());
 				writer.append(key, value);
@@ -53,7 +53,7 @@
 		
 		reader = new SequenceFile.Reader(fileSys, outFile, conf);
 		while (reader.next(key, value)) {
-			System.err.println(Kmer.recoverKmerFrom(GraphVertexOperation.k, key.getBytes(), 0,
+			System.err.println(Kmer.recoverKmerFrom(kmerSize, key.getBytes(), 0,
 					key.getLength())
 					+ "\t" + value.toString());
 		}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateSequenceFile.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateSequenceFile.java
deleted file mode 100644
index 5c740e4..0000000
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateSequenceFile.java
+++ /dev/null
@@ -1,948 +0,0 @@
-package edu.uci.ics.genomix.pregelix.sequencefile;
-
-import java.io.IOException;
-import java.util.ArrayList;
-
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.io.ByteWritable;
-import org.apache.hadoop.io.BytesWritable;
-import org.apache.hadoop.io.SequenceFile;
-import org.apache.hadoop.io.SequenceFile.CompressionType;
-
-import edu.uci.ics.genomix.type.KmerCountValue;
-import edu.uci.ics.genomix.pregelix.GraphVertexOperation;
-import edu.uci.ics.genomix.pregelix.bitwise.BitwiseOperation;
-
-public class GenerateSequenceFile {
-	
-	static private final Path TMP_DIR = new Path(
-			GenerateSequenceFile.class.getSimpleName() + "_TMP");
-	private static Path outDir = new Path("data/webmap");
-	
-	/**
-	 * create test.dat
-	 * A - ACG - A		000110	00010001	06	11
-	 * C - ACT - C		000111	00100010	07	22
-	 * G - CGT - G		011011	01000100	1B	44
-	 * T - GTC - T		101101	10001000	2D	88
-	 */
-	public static void createTestDat() throws IOException{
-		 //write output to a file
-		 Configuration conf = new Configuration();
-	     Path outFile = new Path(outDir, "test-out.dat");
-	     FileSystem fileSys = FileSystem.get(conf);
-	     SequenceFile.Writer writer = SequenceFile.createWriter(fileSys, conf,
-	         outFile, BytesWritable.class, ByteWritable.class, 
-	         CompressionType.NONE);
-	     
-
-		 //Generate <key,value>  <BytesWritable, ByteWritable>
-		 byte[] key = hexStringToByteArray("06"); //000110
-		 byte[] value = hexStringToByteArray("11"); //00010001
-		 System.out.println(Integer.toHexString(key[0]));
-		 System.out.println(Integer.toHexString(value[0]));
-		 BytesWritable keyWritable = new BytesWritable(key);
-		 ByteWritable valueWritable = new ByteWritable(value[0]);
-	     
-	     ArrayList<BytesWritable> arrayOfKeys = new ArrayList<BytesWritable>();
-	     arrayOfKeys.add(keyWritable);
-	     ArrayList<ByteWritable> arrayOfValues = new ArrayList<ByteWritable>();
-	     arrayOfValues.add(valueWritable);
-	     
-	     key = hexStringToByteArray("07"); //000111
-	     value = hexStringToByteArray("22"); //00100010
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value[0]);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-	     
-	     key = hexStringToByteArray("1B"); //011010
-	     value = hexStringToByteArray("44"); //01000100
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value[0]);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-	     
-	     key = hexStringToByteArray("2D"); //100011
-	     value = hexStringToByteArray("88"); //10001000
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value[0]);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-	     
-	     //wirte to sequence file
-	     for(int i = 0; i < arrayOfKeys.size(); i++)
-	    	 writer.append(arrayOfKeys.get(i), arrayOfValues.get(i));
-	     writer.close();
-	     
-	     //read outputs
-	     Path inFile = new Path(outDir, "test-out.dat");
-	     BytesWritable outKey = new BytesWritable();
-	     ByteWritable outValue = new ByteWritable();
-	     SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, inFile, conf);
-	     try {
-	        reader.next(outKey, outValue);
-		     System.out.println(outKey.getBytes());
-		     System.out.println(outValue.get());
-	     } finally {
-	       reader.close();
-	     }
-	}
-	
-    /**
-     * create a mergeTest SequenceFile
-     * CAG - AGC - GCG - CGT - GTA - TAT - ATA 
-     * GAG 								   ATC	
-     * 
-     * CAG	010010	00000010	
-     * AGC	001001	01100100	
-     * GCG	100110	00011000
-     * CGT	011011	01000001
-     * GTA	101100	00101000
-     * TAT	110011	01000011
-     * ATA	001100	10000000
-     * GAG	100010	00000010
-     * ATC	001101	10000000
-     */
-	public static void createMergeTest() throws IOException{
-		 //write output to a file
-		 Configuration conf = new Configuration();
-	     Path outFile = new Path(outDir, "sequenceFileMergeTest");
-	     FileSystem fileSys = FileSystem.get(conf);
-	     SequenceFile.Writer writer = SequenceFile.createWriter(fileSys, conf,
-	         outFile, BytesWritable.class, KmerCountValue.class, 
-	         CompressionType.NONE);
-	     
-
-		 //Generate <key,value>  <BytesWritable, ByteWritable>
-	     // 1
-	     String tmpKey = "010010";
-		 byte[] key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-		 String tmpValue = "00000010";
-		 byte value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-		 BytesWritable keyWritable = new BytesWritable(key);
-		 ByteWritable valueWritable = new ByteWritable(value);
-	     
-	     ArrayList<BytesWritable> arrayOfKeys = new ArrayList<BytesWritable>();
-	     arrayOfKeys.add(keyWritable);
-	     ArrayList<ByteWritable> arrayOfValues = new ArrayList<ByteWritable>();
-	     arrayOfValues.add(valueWritable);
-	     
-	     // 2
-	     tmpKey = "001001";
-	     key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     tmpValue = "01100100";
-	     value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-	     
-	     // 3
-	     tmpKey = "100110";
-	     key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     tmpValue = "00011000";
-	     value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-	     
-	     // 4
-	     tmpKey = "011011";
-	     key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     tmpValue = "01000001";
-	     value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-	     
-	     // 5
-	     tmpKey = "101100";
-	     key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     tmpValue = "00101000";
-	     value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-	     
-	     // 6
-	     tmpKey = "110011";
-	     key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     tmpValue = "01000011";
-	     value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-
-	     // 7
-	     tmpKey = "001100";
-	     key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     tmpValue = "10000000";
-	     value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-	     
-	     // 8
-	     tmpKey = "100010";
-	     key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     tmpValue = "00000010";
-	     value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-	     
-	     // 9
-	     tmpKey = "001101";
-	     key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     tmpValue = "10000000";
-	     value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-	     
-	     KmerCountValue kmerCountValue = null;
-	     //wirte to sequence file
-	     for(int i = 0; i < arrayOfKeys.size(); i++){
-	    	 kmerCountValue = new KmerCountValue();
-	    	 kmerCountValue.setAdjBitMap(arrayOfValues.get(i).get());
-	    	 writer.append(arrayOfKeys.get(i), kmerCountValue);
-	     }
-	     writer.close();
-	     
-	     //read outputs
-	     Path inFile = new Path(outDir, "sequenceFileMergeTest");
-	     BytesWritable outKey = new BytesWritable();
-	     KmerCountValue outValue = new KmerCountValue();
-	     SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, inFile, conf);
-	     int iteration = 1;
-	     try {
-	         while(reader.next(outKey, outValue)){
-	        	 System.out.println(iteration);
-			     System.out.println("key: " + BitwiseOperation.convertBytesToBinaryStringKmer(outKey.getBytes(),GraphVertexOperation.k));
-			     System.out.println("value: " + BitwiseOperation.convertByteToBinaryString(outValue.getAdjBitMap()));
-			     System.out.println();
-			     iteration++;
-	         }
-	     } finally {
-	       reader.close();
-	     }
-	}
-	
-	/**
-     * create a mergeTest SequenceFile
-     * CAG - AGC - GCG - CGT - GTA - TAT - ATA 
-     * GAG 								   ATC	
-     * 
-     */
-	public static void createLongMergeTest() throws IOException{
-		 //write output to a file
-		 Configuration conf = new Configuration();
-	     Path outFile = new Path(outDir, "sequenceFileMergeTest");
-	     FileSystem fileSys = FileSystem.get(conf);
-	     SequenceFile.Writer writer = SequenceFile.createWriter(fileSys, conf,
-	         outFile, BytesWritable.class, KmerCountValue.class, 
-	         CompressionType.NONE);
-	     
-
-		 //Generate <key,value>  <BytesWritable, ByteWritable>
-	     // CAG
-	     String tmpKey = "010010";
-		 byte[] key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-		 String tmpValue = "00000010";
-		 byte value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-		 BytesWritable keyWritable = new BytesWritable(key);
-		 ByteWritable valueWritable = new ByteWritable(value);
-	     
-	     ArrayList<BytesWritable> arrayOfKeys = new ArrayList<BytesWritable>();
-	     arrayOfKeys.add(keyWritable);
-	     ArrayList<ByteWritable> arrayOfValues = new ArrayList<ByteWritable>();
-	     arrayOfValues.add(valueWritable);
-	     
-	     // AGC
-	     tmpKey = "001001";
-	     key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     tmpValue = "01100001";
-	     value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-	     
-	     // GAG
-	     tmpKey = "100010";
-	     key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     tmpValue = "00000010";
-	     value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-	     
-	     // TAT
-	     tmpKey = "110011";
-	     key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     tmpValue = "00100011";
-	     value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-
-	     // ATA
-	     tmpKey = "001100";
-	     key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     tmpValue = "10000000";
-	     value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-	     
-	     // ATC
-	     tmpKey = "001101";
-	     key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     tmpValue = "10000000";
-	     value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-	     
-	     KmerCountValue kmerCountValue = null;
-	     //wirte to sequence file
-	     for(int i = 0; i < arrayOfKeys.size(); i++){
-	    	 kmerCountValue = new KmerCountValue();
-	    	 kmerCountValue.setAdjBitMap(arrayOfValues.get(i).get());
-	    	 writer.append(arrayOfKeys.get(i), kmerCountValue);
-	     }
-	     writer.close();
-	     
-	     //read outputs
-	     Path inFile = new Path(outDir, "sequenceFileMergeTest");
-	     BytesWritable outKey = new BytesWritable();
-	     KmerCountValue outValue = new KmerCountValue();
-	     SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, inFile, conf);
-	     int iteration = 1;
-	     try {
-	         while(reader.next(outKey, outValue)){
-	        	 System.out.println(iteration);
-			     System.out.println("key: " + BitwiseOperation.convertBytesToBinaryStringKmer(outKey.getBytes(),GraphVertexOperation.k));
-			     System.out.println("value: " + BitwiseOperation.convertByteToBinaryString(outValue.getAdjBitMap()));
-			     System.out.println();
-			     iteration++;
-	         }
-	     } finally {
-	       reader.close();
-	     }
-	}
-	
-	public static void generateNumOfLinesFromBigFile(Path inFile, Path outFile, int numOfLines) throws IOException{
-		Configuration conf = new Configuration();
-		FileSystem fileSys = FileSystem.get(conf);
-	    
-		ClassLoader ctxLoader = Thread.currentThread().getContextClassLoader();
-		Thread.currentThread().setContextClassLoader(GenerateSequenceFile.class.getClassLoader());
-		SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, inFile, conf);
-	    SequenceFile.Writer writer = SequenceFile.createWriter(fileSys, conf,
-	         outFile, BytesWritable.class, KmerCountValue.class, 
-	         CompressionType.NONE);
-	    BytesWritable outKey = new BytesWritable();
-	    KmerCountValue outValue = new KmerCountValue();
-	    int i = 0;
-	    
-	    for(i = 0; i < numOfLines; i++){
-	    	 System.out.println(i);
-	    	 reader.next(outKey, outValue);
-	    	 writer.append(outKey, outValue);
-	    }
-	    writer.close();
-	    reader.close();
-	    Thread.currentThread().setContextClassLoader(ctxLoader);
-	}
-	
-	 public static void main(String[] argv) throws Exception {
-		 //createTestDat();
-		 //createMergeTest();
-		 //createTestDat();
-		 /*Path dir = new Path("data/webmap");
-		 Path inFile = new Path(dir, "part-1");
-		 Path outFile = new Path(dir, "part-1-out-100");
-		 generateNumOfLinesFromBigFile(inFile,outFile,100);*/
-		 /**
-		  * AGC - A		C - TAT
-		  *  AGCATGCTAT
-		  * "AGCAAACACGAC T TGCC TAT"
-		  *  problem "AGCATGGACGTCGATTCTAT"
-		  *  problem "AGCAAACACGATTGCCTAT"
-		  *  problem "AGCACGTAACTTGCTCTAT"
-		  *  problem "AGCAACGATTGCCTAT"
-		  *  problem "AGCATTTAAACTCTAT"
-		  *  
-		  *  "AGCACTTAT"
-		  *  "AGCAAACACTTGCTGTACCGTGGCCTAT"
-		  *  "AGCAAACACTTGCTGTACCCTAT"
-		  *  
-		  *  compare "AGCAACTAT"
-		  *  	     "AGCACCTAT"
-		  *  		 "AGCATCTAT"
-		  *  
-		  *  k = 5
-		  *  AGCGC - A		C - TATAT
-		  *  
-		  *  k = 5
-		  *  AAAGCAGCTTGCTACTATAA
-		  *  
-		  *  k = 8
-		  *  AAAAAAGCAGCTTGCTACTATAAAAA
-		  *  
-		  *  k=4 
-		  *  AAGCATGCTATA
-		  *  
-		  *  Two strings 
-		  *  "AGCATGCTAT","TTCAGTACCCGC"
-		  *  
-		  *  AGCATGCTAT
-		  */ 
-		 
-		 generateSequenceFileFromGeneCode3("AGCATGCTAT");//GTCGATT  //before T: GGACG
-		 //generateSequenceFileFromGeneCode15("AAAAAAAAAAAAAGCATGCTATAAAAAAAAAAAA");
-	 }
-	 public static void generateSequenceFileFromGeneCode3(String s) throws IOException{
-		 Configuration conf = new Configuration();
-	     Path outFile = new Path(outDir, "sequenceShortFileMergeTest");//sequenceShortFileMergeTest
-	     FileSystem fileSys = FileSystem.get(conf);
-	     SequenceFile.Writer writer = SequenceFile.createWriter(fileSys, conf,
-	         outFile, BytesWritable.class, KmerCountValue.class, 
-	         CompressionType.NONE);
-		 BytesWritable outKey = null;
-	     KmerCountValue outValue;
-	     byte adjBitMap; 
-	     ArrayList<String> lists = new ArrayList<String>();
-	     lists.add("001001"); //AGC
-	     lists.add("110011"); //TAT
-	     String binaryString = "";
-		 for(int i = 1; i < s.length()-GraphVertexOperation.k; i++){
-			 binaryString = GraphVertexOperation.convertGeneCodeToBinaryString(s.substring(i,i+GraphVertexOperation.k));
-			 if(lists.contains(binaryString)){
-				 System.out.println("error: " + binaryString);
-				 return;
-			 }
-			 lists.add(binaryString);
-			 outKey = new BytesWritable(BitwiseOperation.convertBinaryStringToBytes(binaryString));
-			 outValue = new KmerCountValue();
-			 adjBitMap = GraphVertexOperation.getPrecursorFromGeneCode((byte)0, s.charAt(i-1));
-			 adjBitMap = GraphVertexOperation.getSucceedFromGeneCode(adjBitMap, s.charAt(i+GraphVertexOperation.k));
-			 outValue.setAdjBitMap(adjBitMap);
-			 writer.append(outKey, outValue);
-		 }
-		 /**
-		  *  CAG - AGC ------ TAT - ATA
-		  *  GAG 					ATC
-		  */
-		 // AGC
-	     String tmpKey = "001001";
-		 byte[] key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-		 String tmpValue = "00000001";
-		 byte value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-		 BytesWritable keyWritable = new BytesWritable(key);
-		 ByteWritable valueWritable = new ByteWritable(value);
-	     
-	     ArrayList<BytesWritable> arrayOfKeys = new ArrayList<BytesWritable>();
-	     arrayOfKeys.add(keyWritable);
-	     ArrayList<ByteWritable> arrayOfValues = new ArrayList<ByteWritable>();
-	     arrayOfValues.add(valueWritable);
-	 
-	     // TAT
-	     tmpKey = "110011";
-	     key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     tmpValue = "00100000";
-	     value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-	     
-	     KmerCountValue kmerCountValue = null;
-	     //wirte to sequence file
-	     for(int i = 0; i < arrayOfKeys.size(); i++){
-	    	 kmerCountValue = new KmerCountValue();
-	    	 kmerCountValue.setAdjBitMap(arrayOfValues.get(i).get());
-	    	 writer.append(arrayOfKeys.get(i), kmerCountValue);
-	     }
-	     writer.close();
-	 }
-	 public static void generateSequenceFileFromGeneCode4(String s) throws IOException{
-		 Configuration conf = new Configuration();
-	     Path outFile = new Path(outDir, "sequenceFileMergeTest4");
-	     FileSystem fileSys = FileSystem.get(conf);
-	     SequenceFile.Writer writer = SequenceFile.createWriter(fileSys, conf,
-	         outFile, BytesWritable.class, KmerCountValue.class, 
-	         CompressionType.NONE);
-		 BytesWritable outKey = null;
-	     KmerCountValue outValue;
-	     byte adjBitMap; 
-	     ArrayList<String> lists = new ArrayList<String>();
-
-	     lists.add("00001001"); //AAGC
-	     lists.add("11001100"); //TATA
-	     String binaryString = "";
-		 for(int i = 1; i < s.length()-GraphVertexOperation.k; i++){
-			 binaryString = GraphVertexOperation.convertGeneCodeToBinaryString(s.substring(i,i+GraphVertexOperation.k));
-			 if(lists.contains(binaryString)){
-				 System.out.println("error: " + binaryString);
-				 return;
-			 }
-			 lists.add(binaryString);
-			 outKey = new BytesWritable(BitwiseOperation.convertBinaryStringToBytes(binaryString));
-			 outValue = new KmerCountValue();
-			 adjBitMap = GraphVertexOperation.getPrecursorFromGeneCode((byte)0, s.charAt(i-1));
-			 adjBitMap = GraphVertexOperation.getSucceedFromGeneCode(adjBitMap, s.charAt(i+GraphVertexOperation.k));
-			 outValue.setAdjBitMap(adjBitMap);
-			 writer.append(outKey, outValue);
-		 }
-		 
-		 /**
-		  *  CAG - AGC ------ TAT - ATA
-		  *  GAG 					ATC
-		  */	     
-	     // AGC
-	     String tmpKey = "00001001";
-	     byte[] key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     String tmpValue = "00000001";
-	     byte value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     BytesWritable keyWritable = new BytesWritable(key);
-	     ByteWritable valueWritable = new ByteWritable(value);
-	     
-	     ArrayList<BytesWritable> arrayOfKeys = new ArrayList<BytesWritable>();
-	     arrayOfKeys.add(keyWritable);
-	     ArrayList<ByteWritable> arrayOfValues = new ArrayList<ByteWritable>();
-	     arrayOfValues.add(valueWritable);
-
-	     // TAT
-	     tmpKey = "11001100";
-	     key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     tmpValue = "00100000";
-	     value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-	     
-	     KmerCountValue kmerCountValue = null;
-	     //wirte to sequence file
-	     for(int i = 0; i < arrayOfKeys.size(); i++){
-	    	 kmerCountValue = new KmerCountValue();
-	    	 kmerCountValue.setAdjBitMap(arrayOfValues.get(i).get());
-	    	 writer.append(arrayOfKeys.get(i), kmerCountValue);
-	     }
-	     writer.close();
-	     
-	     //read outputs
-	     Path inFile = new Path(outDir, "sequenceFileMergeTest4");
-	     outKey = new BytesWritable();
-	     outValue = new KmerCountValue();
-	     SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, inFile, conf);
-	     int iteration = 1;
-	     try {
-	         while(reader.next(outKey, outValue)){
-	        	 System.out.println(iteration);
-			     System.out.println("key: " + BitwiseOperation.convertBytesToBinaryStringKmer(outKey.getBytes(),GraphVertexOperation.k));
-			     System.out.println("value: " + BitwiseOperation.convertByteToBinaryString(outValue.getAdjBitMap()));
-			     System.out.println();
-			     iteration++;
-	         }
-	     } finally {
-	       reader.close();
-	     }
-	 }
-	 public static void generateSequenceFileFromGeneCode5(String s) throws IOException{
-		 Configuration conf = new Configuration();
-	     Path outFile = new Path(outDir, "sequenceFileMergeTest5");
-	     FileSystem fileSys = FileSystem.get(conf);
-	     SequenceFile.Writer writer = SequenceFile.createWriter(fileSys, conf,
-	         outFile, BytesWritable.class, KmerCountValue.class, 
-	         CompressionType.NONE);
-		 BytesWritable outKey = null;
-	     KmerCountValue outValue;
-	     byte adjBitMap; 
-	     ArrayList<String> lists = new ArrayList<String>();
-
-	     lists.add("0000001001"); //AAAGC
-	     lists.add("1100110000"); //TATAA
-	     String binaryString = "";
-		 for(int i = 1; i < s.length()-GraphVertexOperation.k; i++){
-			 binaryString = GraphVertexOperation.convertGeneCodeToBinaryString(s.substring(i,i+GraphVertexOperation.k));
-			 if(lists.contains(binaryString)){
-				 System.out.println("error: " + binaryString);
-				 return;
-			 }
-			 lists.add(binaryString);
-			 outKey = new BytesWritable(BitwiseOperation.convertBinaryStringToBytes(binaryString));
-			 outValue = new KmerCountValue();
-			 adjBitMap = GraphVertexOperation.getPrecursorFromGeneCode((byte)0, s.charAt(i-1));
-			 adjBitMap = GraphVertexOperation.getSucceedFromGeneCode(adjBitMap, s.charAt(i+GraphVertexOperation.k));
-			 outValue.setAdjBitMap(adjBitMap);
-			 writer.append(outKey, outValue);
-		 }
-		 /**
-		  *  CAG - AGC ------ TAT - ATA
-		  *  GAG 					ATC
-		  */
-		 // AGC
-	     String tmpKey = "0000001001";
-		 byte[] key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-		 String tmpValue = "00000001";
-		 byte value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-		 BytesWritable keyWritable = new BytesWritable(key);
-		 ByteWritable valueWritable = new ByteWritable(value);
-	     
-	     ArrayList<BytesWritable> arrayOfKeys = new ArrayList<BytesWritable>();
-	     arrayOfKeys.add(keyWritable);
-	     ArrayList<ByteWritable> arrayOfValues = new ArrayList<ByteWritable>();
-	     arrayOfValues.add(valueWritable);
-	     
-	     // TAT
-	     tmpKey = "1100110000";
-	     key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     tmpValue = "00100000";
-	     value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-
-	     KmerCountValue kmerCountValue = null;
-	     //wirte to sequence file
-	     for(int i = 0; i < arrayOfKeys.size(); i++){
-	    	 kmerCountValue = new KmerCountValue();
-	    	 kmerCountValue.setAdjBitMap(arrayOfValues.get(i).get());
-	    	 writer.append(arrayOfKeys.get(i), kmerCountValue);
-	     }
-	     writer.close();
-	     
-	     //read outputs
-	     Path inFile = new Path(outDir, "sequenceFileMergeTest5");
-	     outKey = new BytesWritable();
-	     outValue = new KmerCountValue();
-	     SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, inFile, conf);
-	     int iteration = 1;
-	     try {
-	         while(reader.next(outKey, outValue)){
-	        	 System.out.println(iteration);
-	        	 String kmer = BitwiseOperation.convertBytesToBinaryStringKmer(outKey.getBytes(),GraphVertexOperation.k);
-			     System.out.println("key: " + kmer);
-			     System.out.println("code: " + GraphVertexOperation.convertBinaryStringToGenecode(kmer));
-			     System.out.println("value: " + BitwiseOperation.convertByteToBinaryString(outValue.getAdjBitMap()));
-			     System.out.println();
-			     iteration++;
-	         }
-	     } finally {
-	       reader.close();
-	     }
-	 }
-	 public static void generateSequenceFileFromGeneCode8(String s) throws IOException{
-		 Configuration conf = new Configuration();
-	     Path outFile = new Path(outDir, "sequenceFileMergeTest8");
-	     FileSystem fileSys = FileSystem.get(conf);
-	     SequenceFile.Writer writer = SequenceFile.createWriter(fileSys, conf,
-	         outFile, BytesWritable.class, KmerCountValue.class, 
-	         CompressionType.NONE);
-		 BytesWritable outKey = null;
-	     KmerCountValue outValue;
-	     byte adjBitMap; 
-	     ArrayList<String> lists = new ArrayList<String>();
-
-	     lists.add("0000000000001001"); //AAAAAAGC
-	     lists.add("1100110000000000"); //TATAAAAA
-	     String binaryString = "";
-		 for(int i = 1; i < s.length()-GraphVertexOperation.k; i++){
-			 binaryString = GraphVertexOperation.convertGeneCodeToBinaryString(s.substring(i,i+GraphVertexOperation.k));
-			 if(lists.contains(binaryString)){
-				 System.out.println("error: " + binaryString);
-				 return;
-			 }
-			 lists.add(binaryString);
-			 outKey = new BytesWritable(BitwiseOperation.convertBinaryStringToBytes(binaryString));
-			 outValue = new KmerCountValue();
-			 adjBitMap = GraphVertexOperation.getPrecursorFromGeneCode((byte)0, s.charAt(i-1));
-			 adjBitMap = GraphVertexOperation.getSucceedFromGeneCode(adjBitMap, s.charAt(i+GraphVertexOperation.k));
-			 outValue.setAdjBitMap(adjBitMap);
-			 writer.append(outKey, outValue);
-		 }
-		 /**
-		  *  CAG - AGC ------ TAT - ATA
-		  *  GAG 					ATC
-		  */
-		 // AGC
-	     String tmpKey = "0000000000001001";
-		 byte[] key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-		 String tmpValue = "00000001";
-		 byte value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-		 BytesWritable keyWritable = new BytesWritable(key);
-		 ByteWritable valueWritable = new ByteWritable(value);
-	     
-	     ArrayList<BytesWritable> arrayOfKeys = new ArrayList<BytesWritable>();
-	     arrayOfKeys.add(keyWritable);
-	     ArrayList<ByteWritable> arrayOfValues = new ArrayList<ByteWritable>();
-	     arrayOfValues.add(valueWritable);
-	     
-	     // TAT
-	     tmpKey = "1100110000000000";
-	     key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     tmpValue = "00100000";
-	     value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-
-	     KmerCountValue kmerCountValue = null;
-	     //wirte to sequence file
-	     for(int i = 0; i < arrayOfKeys.size(); i++){
-	    	 kmerCountValue = new KmerCountValue();
-	    	 kmerCountValue.setAdjBitMap(arrayOfValues.get(i).get());
-	    	 writer.append(arrayOfKeys.get(i), kmerCountValue);
-	     }
-	     writer.close();
-	     
-	     //read outputs
-	     Path inFile = new Path(outDir, "sequenceFileMergeTest8");
-	     outKey = new BytesWritable();
-	     outValue = new KmerCountValue();
-	     SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, inFile, conf);
-	     int iteration = 1;
-	     try {
-	         while(reader.next(outKey, outValue)){
-	        	 System.out.println(iteration);
-	        	 String kmer = BitwiseOperation.convertBytesToBinaryStringKmer(outKey.getBytes(),GraphVertexOperation.k);
-			     System.out.println("key: " + kmer);
-			     System.out.println("code: " + GraphVertexOperation.convertBinaryStringToGenecode(kmer));
-			     System.out.println("value: " + BitwiseOperation.convertByteToBinaryString(outValue.getAdjBitMap()));
-			     System.out.println();
-			     iteration++;
-	         }
-	     } finally {
-	       reader.close();
-	     }
-	 }
-	 public static void generateSequenceFileFromGeneCode15(String s) throws IOException{
-		 Configuration conf = new Configuration();
-	     Path outFile = new Path(outDir, "sequenceFileMergeTest15");
-	     FileSystem fileSys = FileSystem.get(conf);
-	     SequenceFile.Writer writer = SequenceFile.createWriter(fileSys, conf,
-	         outFile, BytesWritable.class, KmerCountValue.class, 
-	         CompressionType.NONE);
-		 BytesWritable outKey = null;
-	     KmerCountValue outValue;
-	     byte adjBitMap; 
-	     ArrayList<String> lists = new ArrayList<String>();
-
-	     lists.add("000000000000000000000000001001"); //AAAAAAAAAAAAAGC
-	     lists.add("110011000000000000000000000000"); //TATAAAAAAAAAAAA
-	     String binaryString = "";
-		 for(int i = 1; i < s.length()-GraphVertexOperation.k; i++){
-			 binaryString = GraphVertexOperation.convertGeneCodeToBinaryString(s.substring(i,i+GraphVertexOperation.k));
-			 if(lists.contains(binaryString)){
-				 System.out.println("error: " + binaryString);
-				 return;
-			 }
-			 lists.add(binaryString);
-			 outKey = new BytesWritable(BitwiseOperation.convertBinaryStringToBytes(binaryString));
-			 outValue = new KmerCountValue();
-			 adjBitMap = GraphVertexOperation.getPrecursorFromGeneCode((byte)0, s.charAt(i-1));
-			 adjBitMap = GraphVertexOperation.getSucceedFromGeneCode(adjBitMap, s.charAt(i+GraphVertexOperation.k));
-			 outValue.setAdjBitMap(adjBitMap);
-			 writer.append(outKey, outValue);
-		 }
-		 /**
-		  *  CAG - AGC ------ TAT - ATA
-		  *  GAG 					ATC
-		  */
-		 // AGC
-	     String tmpKey = "000000000000000000000000001001";
-		 byte[] key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-		 String tmpValue = "00000001";
-		 byte value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-		 BytesWritable keyWritable = new BytesWritable(key);
-		 ByteWritable valueWritable = new ByteWritable(value);
-	     
-	     ArrayList<BytesWritable> arrayOfKeys = new ArrayList<BytesWritable>();
-	     arrayOfKeys.add(keyWritable);
-	     ArrayList<ByteWritable> arrayOfValues = new ArrayList<ByteWritable>();
-	     arrayOfValues.add(valueWritable);
-	     
-	     // TAT
-	     tmpKey = "110011000000000000000000000000";
-	     key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     tmpValue = "00100000";
-	     value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-
-	     KmerCountValue kmerCountValue = null;
-	     //wirte to sequence file
-	     for(int i = 0; i < arrayOfKeys.size(); i++){
-	    	 kmerCountValue = new KmerCountValue();
-	    	 kmerCountValue.setAdjBitMap(arrayOfValues.get(i).get());
-	    	 writer.append(arrayOfKeys.get(i), kmerCountValue);
-	     }
-	     writer.close();
-	     
-	     //read outputs
-	     Path inFile = new Path(outDir, "sequenceFileMergeTest15");
-	     outKey = new BytesWritable();
-	     outValue = new KmerCountValue();
-	     SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, inFile, conf);
-	     int iteration = 1;
-	     try {
-	         while(reader.next(outKey, outValue)){
-	        	 System.out.println(iteration);
-	        	 String kmer = BitwiseOperation.convertBytesToBinaryStringKmer(outKey.getBytes(),GraphVertexOperation.k);
-			     System.out.println("key: " + kmer);
-			     System.out.println("code: " + GraphVertexOperation.convertBinaryStringToGenecode(kmer));
-			     System.out.println("value: " + BitwiseOperation.convertByteToBinaryString(outValue.getAdjBitMap()));
-			     System.out.println();
-			     iteration++;
-	         }
-	     } finally {
-	       reader.close();
-	     }
-	 }
-	 public static void generateSequenceFileFromTwoGeneCode3(String s, String s2) throws IOException{
-		 Configuration conf = new Configuration();
-	     Path outFile = new Path(outDir, "sequenceFileMergeTest4");
-	     FileSystem fileSys = FileSystem.get(conf);
-	     SequenceFile.Writer writer = SequenceFile.createWriter(fileSys, conf,
-	         outFile, BytesWritable.class, KmerCountValue.class, 
-	         CompressionType.NONE);
-		 BytesWritable outKey = null;
-	     KmerCountValue outValue;
-	     byte adjBitMap; 
-	     ArrayList<String> lists = new ArrayList<String>();
-	     lists.add("001001"); //AGC
-	     lists.add("110011"); //TAT
-	     String binaryString = "";
-		 for(int i = 1; i < s.length()-GraphVertexOperation.k; i++){
-			 binaryString = GraphVertexOperation.convertGeneCodeToBinaryString(s.substring(i,i+GraphVertexOperation.k));
-			 if(lists.contains(binaryString)){
-				 System.out.println("error: " + binaryString);
-				 return;
-			 }
-			 lists.add(binaryString);
-			 outKey = new BytesWritable(BitwiseOperation.convertBinaryStringToBytes(binaryString));
-			 outValue = new KmerCountValue();
-			 adjBitMap = GraphVertexOperation.getPrecursorFromGeneCode((byte)0, s.charAt(i-1));
-			 adjBitMap = GraphVertexOperation.getSucceedFromGeneCode(adjBitMap, s.charAt(i+GraphVertexOperation.k));
-			 outValue.setAdjBitMap(adjBitMap);
-			 writer.append(outKey, outValue);
-		 }
-		 /**
-		  *  CAG - AGC ------ TAT - ATA
-		  *  GAG 					ATC
-		  */
-		 // AGC
-	     String tmpKey = "001001";
-		 byte[] key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-		 String tmpValue = "00000001";
-		 byte value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-		 BytesWritable keyWritable = new BytesWritable(key);
-		 ByteWritable valueWritable = new ByteWritable(value);
-	     
-	     ArrayList<BytesWritable> arrayOfKeys = new ArrayList<BytesWritable>();
-	     arrayOfKeys.add(keyWritable);
-	     ArrayList<ByteWritable> arrayOfValues = new ArrayList<ByteWritable>();
-	     arrayOfValues.add(valueWritable);
-	 
-	     // TAT
-	     tmpKey = "110011";
-	     key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     tmpValue = "00100000";
-	     value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-	     
-	     KmerCountValue kmerCountValue = null;
-	     //wirte to sequence file
-	     for(int i = 0; i < arrayOfKeys.size(); i++){
-	    	 kmerCountValue = new KmerCountValue();
-	    	 kmerCountValue.setAdjBitMap(arrayOfValues.get(i).get());
-	    	 writer.append(arrayOfKeys.get(i), kmerCountValue);
-	     }
-	     
-	     lists.add("111101"); //TTC
-	     lists.add("011001"); //CGC
-	     binaryString = "";
-		 for(int i = 1; i < s2.length()-GraphVertexOperation.k; i++){
-			 binaryString = GraphVertexOperation.convertGeneCodeToBinaryString(s2.substring(i,i+GraphVertexOperation.k));
-			 if(lists.contains(binaryString)){
-				 System.out.println("error: " + binaryString);
-				 return;
-			 }
-			 lists.add(binaryString);
-			 outKey = new BytesWritable(BitwiseOperation.convertBinaryStringToBytes(binaryString));
-			 outValue = new KmerCountValue();
-			 adjBitMap = GraphVertexOperation.getPrecursorFromGeneCode((byte)0, s2.charAt(i-1));
-			 adjBitMap = GraphVertexOperation.getSucceedFromGeneCode(adjBitMap, s2.charAt(i+GraphVertexOperation.k));
-			 outValue.setAdjBitMap(adjBitMap);
-			 writer.append(outKey, outValue);
-		 }
-		 /**
-		  *  CAG - AGC ------ TAT - ATA
-		  *  GAG 					ATC
-		  */
-		 // TTC
-	     tmpKey = "111101";
-		 key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-		 tmpValue = "00000001";
-		 value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-		 keyWritable = new BytesWritable(key);
-		 valueWritable = new ByteWritable(value);
-	     
-	     arrayOfKeys = new ArrayList<BytesWritable>();
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues = new ArrayList<ByteWritable>();
-	     arrayOfValues.add(valueWritable);
-	 
-	     // CGC
-	     tmpKey = "011001";
-	     key = BitwiseOperation.convertBinaryStringToBytes(tmpKey);
-	     tmpValue = "00100000";
-	     value = BitwiseOperation.convertBinaryStringToByte(tmpValue);
-	     keyWritable = new BytesWritable(key);
-	     valueWritable = new ByteWritable(value);
-	     arrayOfKeys.add(keyWritable);
-	     arrayOfValues.add(valueWritable);
-	     
-	     kmerCountValue = null;
-	     //wirte to sequence file
-	     for(int i = 0; i < arrayOfKeys.size(); i++){
-	    	 kmerCountValue = new KmerCountValue();
-	    	 kmerCountValue.setAdjBitMap(arrayOfValues.get(i).get());
-	    	 writer.append(arrayOfKeys.get(i), kmerCountValue);
-	     }
-	     writer.close();
-	 }
-	 public static byte[] hexStringToByteArray(String s) {
-	    int len = s.length();
-	    byte[] data = new byte[len / 2];
-	    for (int i = 0; i < len; i += 2) {
-	        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
-	                             + Character.digit(s.charAt(i+1), 16));
-	    }
-	    return data;
-	}
-}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/generateSmallFile.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/generateSmallFile.java
index f44781f..45329d0 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/generateSmallFile.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/generateSmallFile.java
@@ -40,9 +40,9 @@
 	public static void main(String[] args) throws IOException {
 		// TODO Auto-generated method stub
 		Path dir = new Path("data/webmap");
-		Path inFile = new Path(dir, "part-1");
-		Path outFile = new Path(dir, "part-1-out-20000000");
-		generateNumOfLinesFromBigFile(inFile,outFile,20000000);
+		Path inFile = new Path(dir, "part-2");
+		Path outFile = new Path(dir, "part-2-out-20000");
+		generateNumOfLinesFromBigFile(inFile,outFile,20000);
 	}
 
 }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/GenerateTestInput.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/GenerateTestInput.java
index 2dac10d..8ff5589 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/GenerateTestInput.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/GenerateTestInput.java
@@ -55,13 +55,13 @@
 		// TODO Auto-generated method stub
 		OutputStreamWriter writer;
 		try {
-			writer = new OutputStreamWriter(new FileOutputStream("SinglePath"));
-			writer.write(simplePath(5,10,1));
+			writer = new OutputStreamWriter(new FileOutputStream("graph/55/SinglePath_55"));
+			writer.write(simplePath(55,60,1));
 			writer.close();
-			writer = new OutputStreamWriter(new FileOutputStream("SimplePath"));
-			writer.write(simplePath(5,10,3));
+			writer = new OutputStreamWriter(new FileOutputStream("graph/55/SimplePath_55"));
+			writer.write(simplePath(55,60,3));
 			writer.close();
-			writer = new OutputStreamWriter(new FileOutputStream("TreePath"));
+			/*writer = new OutputStreamWriter(new FileOutputStream("TreePath"));
 			writer.write(treePath(5, 5, 5, 3));
 			writer.close();
 			writer = new OutputStreamWriter(new FileOutputStream("CyclePath"));
@@ -69,7 +69,7 @@
 			writer.close();
 			writer = new OutputStreamWriter(new FileOutputStream("BridgePath"));
 			writer.write(bridgePath(5,2));
-			writer.close();
+			writer.close();*/
 		} catch (IOException e) {
 			e.printStackTrace();
 		}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
index 3cfe4c8..53340dc 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
@@ -48,10 +48,12 @@
     	job.setVertexClass(MergeGraphVertex.class);
     	job.setVertexInputFormatClass(BinaryLoadGraphInputFormat.class);
         job.setVertexOutputFormatClass(BinaryLoadGraphOutputFormat.class);
+        job.setDynamicVertexValueSize(true);
         job.setOutputKeyClass(BytesWritable.class);
         job.setOutputValueClass(ValueStateWritable.class);
         FileInputFormat.setInputPaths(job, HDFS_INPUTPATH);
         FileOutputFormat.setOutputPath(job, new Path(HDFS_OUTPUTPAH));
+        job.getConfiguration().setInt(MergeGraphVertex.KMER_SIZE, 55);
         job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
     }
     
@@ -69,6 +71,7 @@
         job.setOutputValueClass(ValueStateWritable.class);
         FileInputFormat.setInputPaths(job, HDFS_INPUTPATH);
         FileOutputFormat.setOutputPath(job, new Path(HDFS_OUTPUTPAH));
+        job.getConfiguration().setInt(LogAlgorithmForMergeGraphVertex.KMER_SIZE, 55);
         job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
     }
     
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/RunJobTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/RunJobTestSuite.java
index dac588d..0238ca0 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/RunJobTestSuite.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/RunJobTestSuite.java
@@ -40,7 +40,7 @@
 	private static final String PATH_TO_ONLY = "src/test/resources/only.txt";
 	private static final String FILE_EXTENSION_OF_RESULTS = "result";
 
-	private static final String DATA_PATH = "data/test_55_small/part-0";//sequenceShortFileMergeTest
+	private static final String DATA_PATH = "data/input/part-1-out-500000";//sequenceShortFileMergeTest
 	private static final String HDFS_PATH = "/webmap/";
 	
 	private static final String HYRACKS_APP_NAME = "pregelix";
diff --git a/genomix/genomix-pregelix/src/test/resources/expected/BinaryLoadGraph.result b/genomix/genomix-pregelix/src/test/resources/expected/BinaryLoadGraph.result
deleted file mode 100644
index 676e5c8..0000000
--- a/genomix/genomix-pregelix/src/test/resources/expected/BinaryLoadGraph.result
+++ /dev/null
@@ -1,8 +0,0 @@
-Vertex(id=24,value=1, edges=())
-Vertex(id=38,value=34, edges=())
-Vertex(id=4c,value=68, edges=())
-Vertex(id=70,value=72, edges=())
-Vertex(id=90,value=24, edges=())
-Vertex(id=9c,value=-127, edges=())
-Vertex(id=cc,value=32, edges=())
-Vertex(id=e4,value=24, edges=())
diff --git a/genomix/genomix-pregelix/src/test/resources/expected/LoadGraph.result b/genomix/genomix-pregelix/src/test/resources/expected/LoadGraph.result
deleted file mode 100644
index 6595d86..0000000
--- a/genomix/genomix-pregelix/src/test/resources/expected/LoadGraph.result
+++ /dev/null
@@ -1,4 +0,0 @@
-Vertex(id=06,value=34, edges=())
-Vertex(id=07,value=68, edges=())
-Vertex(id=1b,value=-120, edges=())
-Vertex(id=2d,value=-34, edges=())