diff --git a/fuzzer/Fuzzer.java b/fuzzer/Fuzzer.java
index 9394bf8fd81a260984d87d9fe1aa3f3ef35fd4de..4eb8cab66cbffb428329b23d1e5d692be4778e0d 100644
--- a/fuzzer/Fuzzer.java
+++ b/fuzzer/Fuzzer.java
@@ -1,17 +1,25 @@
 import java.io.IOException;
 import java.io.FileOutputStream;
 import java.io.PrintWriter;
-
+import java.util.ArrayList;
+import java.util.Random;
 
 /* a stub for your team's fuzzer */
 public class Fuzzer {
 
     private static final String OUTPUT_FILE = "fuzz.txt";
+    private static final String CHAR_LOWER = "abcdefghijklmnopqrstuvwxyz";
+    private static final String CHAR_UPPER = CHAR_LOWER.toUpperCase();
+    private static final String NUMBER = "0123456789";
+
+    private static final String DATA_FOR_RANDOM_STRING = CHAR_LOWER + CHAR_UPPER + NUMBER;
     
     public static void main(String[] args) throws IOException {
         System.out.println(Instruction.getBNF());
         FileOutputStream out = null;
         PrintWriter pw = null;
+        ArrayList<String> inputs = new ArrayList<String>();
+        
         try {
             out = new FileOutputStream(OUTPUT_FILE);
             pw = new PrintWriter(out);
@@ -19,7 +27,22 @@ public class Fuzzer {
             /* We just print one instruction.
                Hint: you might want to make use of the instruction
                grammar which is effectively encoded in Instruction.java */
-            pw.println("list");
+            
+            /**Using generation-based fuzzing and Instruction.java, 
+             * create random, valid inputs*/     
+            //Indicates the number of inputs we wish to generate
+            int numInputs = 10;
+            
+            for(int i=0; i<numInputs; i++) {
+            	String input = generateValidInputs();
+            	//only add the input if it hasn't already been generated
+            	if(inputAlreadyGenerated(input, inputs)) {
+            		i--;
+            	}else {
+            		inputs.add(input);
+            		pw.println(input);
+            	}
+            }
             
         }catch (Exception e){
             e.printStackTrace(System.err);
@@ -34,5 +57,66 @@ public class Fuzzer {
         }
 
     }
+    
+    /**Generates random, valid inputs based on Instruction.java*/
+    public static String generateValidInputs() {
+    	int maxStringLength = 100;
+    	
+    	//add the instruction string
+    	Instruction inst = getRandomInstruction();
+    	String input = inst.getOpcode();
+    	
+    	//add the operands
+    	for (OperandType op : inst.getOperands()){
+    		if(op.equals(OperandType.STRING)) {
+    			input += " "+generateRandomString(maxStringLength);
+    		}
+        }    	
+    	//debug
+    	//System.out.println(input);
+    	
+    	return input;
+    }
+    
+    /**Selects a random instruction*/
+    public static Instruction getRandomInstruction() {
+    	Instruction[] INSTS = Instruction.values();
+    	int index = new Random().nextInt(INSTS.length);
+    	return INSTS[index];
+    }
+    
+    /**Generates a random string. 
+     * Sourced from: https://www.mkyong.com/java/java-how-to-generate-a-random-string/
+     * and modified*/
+    public static String generateRandomString(int maxlength) {
+        if (maxlength < 1) throw new IllegalArgumentException();
+        
+        int length = new Random().nextInt(maxlength)+1;
+
+        StringBuilder sb = new StringBuilder(length);
+        for (int i = 0; i < length; i++) {
+
+			// 0-62 (exclusive), random returns 0-61
+            int rndCharAt = new Random().nextInt(DATA_FOR_RANDOM_STRING.length());
+            char rndChar = DATA_FOR_RANDOM_STRING.charAt(rndCharAt);
+
+            sb.append(rndChar);
+
+        }
+
+        return sb.toString();
+
+    }
+    
+    /**Checks whether the input has already been generated*/
+    public static boolean inputAlreadyGenerated(String newInput, ArrayList<String> inputs) {
+    	for(String input:inputs) {
+    		if(input.equals(newInput)) {
+    			return true;
+    		}
+    	}
+    	
+    	return false;
+    }
 
 }