diff --git a/genomix/genomix-pregelix/data/input/.out.crc b/genomix/genomix-pregelix/data/input/.out.crc
new file mode 100644
index 0000000..422fddb
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/.out.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/test/result.graphbuild.txt.bin b/genomix/genomix-pregelix/data/input/test/result.graphbuild.txt.bin
new file mode 100644
index 0000000..4865aeb
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/test/result.graphbuild.txt.bin
Binary files differ
diff --git a/genomix/genomix-pregelix/data/test/result.graphbuild.bidirectional.txt b/genomix/genomix-pregelix/data/test/result.graphbuild.bidirectional.txt
new file mode 100644
index 0000000..a41ce56
--- /dev/null
+++ b/genomix/genomix-pregelix/data/test/result.graphbuild.bidirectional.txt
@@ -0,0 +1,18 @@
+((2,1)	[(2,3)]	[]	[]	[]	AATAGA)	(null)
+((2,3)	[(6,1),(2,4)]	[]	[]	[(2,1)]	TAGAA)	(null)
+((2,4)	[(6,2)]	[]	[]	[(2,3)]	AGAAG)	(null)
+((4,1)	[(4,3)]	[]	[]	[]	AATAGA)	(null)
+((4,3)	[(6,1),(4,4)]	[]	[]	[(4,1)]	TAGAA)	(null)
+((4,4)	[(6,2)]	[]	[]	[(4,3)]	AGAAG)	(null)
+((6,1)	[(6,2)]	[]	[]	[(2,3),(1,3),(3,3),(4,3),(5,3)]	AGAAG)	(null)
+((6,2)	[(6,3)]	[]	[]	[(2,4),(3,4),(1,4),(4,4),(5,4),(6,1)]	GAAGA)	(null)
+((6,3)	[]	[]	[]	[(6,2)]	AAGAAG)	(null)
+((1,1)	[(1,3)]	[]	[]	[]	AATAGA)	(null)
+((1,3)	[(6,1),(1,4)]	[]	[]	[(1,1)]	TAGAA)	(null)
+((1,4)	[(6,2)]	[]	[]	[(1,3)]	AGAAG)	(null)
+((3,1)	[(3,3)]	[]	[]	[]	AATAGA)	(null)
+((3,3)	[(6,1),(3,4)]	[]	[]	[(3,1)]	TAGAA)	(null)
+((3,4)	[(6,2)]	[]	[]	[(3,3)]	AGAAG)	(null)
+((5,1)	[(5,3)]	[]	[]	[]	AATAGA)	(null)
+((5,3)	[(6,1),(5,4)]	[]	[]	[(5,1)]	TAGAA)	(null)
+((5,4)	[(6,2)]	[]	[]	[(5,3)]	AGAAG)	(null)
diff --git a/genomix/genomix-pregelix/data/test/result.graphbuild.txt.bin b/genomix/genomix-pregelix/data/test/result.graphbuild.txt.bin
new file mode 100644
index 0000000..4865aeb
--- /dev/null
+++ b/genomix/genomix-pregelix/data/test/result.graphbuild.txt.bin
Binary files differ
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/ConvertNodeToIdValue.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/ConvertNodeToIdValue.java
new file mode 100644
index 0000000..b81491b
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/ConvertNodeToIdValue.java
@@ -0,0 +1,58 @@
+package edu.uci.ics.genomix.pregelix.sequencefile;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.io.NullWritable;
+import org.apache.hadoop.io.SequenceFile;
+import org.apache.hadoop.io.SequenceFile.CompressionType;
+
+import edu.uci.ics.genomix.pregelix.io.ValueStateWritable;
+import edu.uci.ics.genomix.pregelix.type.State;
+import edu.uci.ics.genomix.type.KmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.PositionWritable;
+
+public class ConvertNodeToIdValue {
+
+    public static void convert(Path inFile, Path outFile)
+            throws IOException {
+        Configuration conf = new Configuration();
+        FileSystem fileSys = FileSystem.get(conf);
+
+        SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, inFile, conf);
+        SequenceFile.Writer writer = SequenceFile.createWriter(fileSys, conf, outFile, PositionWritable.class,
+                ValueStateWritable.class, CompressionType.NONE);
+        NodeWritable node = new NodeWritable();
+        NullWritable value = NullWritable.get();
+        PositionWritable outputKey = new PositionWritable();
+        ValueStateWritable outputValue = new ValueStateWritable();
+
+        while(reader.next(node, value)) {
+            System.out.println(node.getNodeID().toString());
+            outputKey.set(node.getNodeID());
+            outputValue.setFFList(node.getFFList());
+            outputValue.setFRList(node.getFRList());
+            outputValue.setRFList(node.getRFList());
+            outputValue.setRRList(node.getRRList());
+            outputValue.setMergeChain(node.getKmer());
+            outputValue.setState(State.NON_VERTEX);
+            writer.append(outputKey, outputValue);
+        }
+        writer.close();
+        reader.close();
+    }
+    
+    public static void main(String[] args) throws IOException {
+        Path dir = new Path("data/test");
+        Path outDir = new Path("data/input");
+        FileUtils.cleanDirectory(new File("data/input"));
+        Path inFile = new Path(dir, "result.graphbuild.txt.bin");
+        Path outFile = new Path(outDir, "out");
+        convert(inFile,outFile);
+    }
+}
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 f1fcdac..cdc97c1 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
@@ -73,8 +73,8 @@
 
     public static void main(String[] args) throws IOException {
         genNaiveAlgorithmForMergeGraph();
-        genLogAlgorithmForMergeGraph();
-        genP3ForMergeGraph();
+        //genLogAlgorithmForMergeGraph();
+        //genP3ForMergeGraph();
     }
 
 }
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestSuite.java
index c8aaa84..a8f5a81 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestSuite.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestSuite.java
@@ -43,9 +43,9 @@
 public class PathMergeSmallTestSuite extends TestSuite {
     private static final Logger LOGGER = Logger.getLogger(PathMergeSmallTestSuite.class.getName());
 
-    public static final String PreFix = "data/PathTestSet"; //"graphbuildresult";
+    public static final String PreFix = "data/input"; //"graphbuildresult";
     public static final String[] TestDir = { PreFix + File.separator
-    + "LongPath"};/*, PreFix + File.separator
+    + "test"};/*, PreFix + File.separator
             /*+ "CyclePath"};, PreFix + File.separator
             + "SimplePath", PreFix + File.separator
             + "SinglePath", PreFix + File.separator
