diff --git a/lab.py b/lab.py
index 3c57d387909cc005db551e4fc34600ac91488dc2..1eebaa730f05b7736bc8204315116837d38f37fb 100644
--- a/lab.py
+++ b/lab.py
@@ -2,6 +2,7 @@
 
 
 def scalar_fibonacci(n):
+
     """
     Given a nonnegative integer n, return the nth Fibonacci number.  For example:
 
@@ -20,7 +21,11 @@ def scalar_fibonacci(n):
     >>> scalar_fibonacci(35)
     9227465
     """
-    return 0  # stub
+    if n == 1:
+        return 1
+    if n == 0:
+        return 0
+    return scalar_fibonacci(n-2) + scalar_fibonacci(n-1)
 
 
 def vector_fibonacci(n):
@@ -41,54 +46,68 @@ def vector_fibonacci(n):
     >>> vector_fibonacci(35)
     (5702887, 9227465)
     >>> vector_fibonacci(350)
-    (3865462327928467072415604609040860366007401579690263197296200323999931849, 6254449428820551641549772190170184190608177514674331726439961915653414425)
+    (3865462327928467072415604609040860366007401579690263197296200323999931849L, 6254449428820551641549772190170184190608177514674331726439961915653414425L)
     """
-    return 0, 1  # stub
+    if n == 0:
+        return (0,0)
+    if n == 1:
+        return (0,1)
+    temp = vector_fibonacci(n-1)
+    return (temp[1],temp[0] + temp[1])
 
 
-def maximal_repetition_free_prefix(sequence):
+def maximal_repetition_free_prefix(sequence,n):
     """
     Given a sequence, return its longest repetition-free prefix.  For example:
 
-    >>> maximal_repetition_free_prefix([])
+    >>> maximal_repetition_free_prefix([],0)
     []
-    >>> maximal_repetition_free_prefix([5])
+    >>> maximal_repetition_free_prefix([5],0)
     [5]
-    >>> maximal_repetition_free_prefix([5, 4])
+    >>> maximal_repetition_free_prefix([5, 4],0)
     [5, 4]
-    >>> maximal_repetition_free_prefix([5, 5])
+    >>> maximal_repetition_free_prefix([5, 5],0)
     [5]
-    >>> maximal_repetition_free_prefix([5, 4, 5])
+    >>> maximal_repetition_free_prefix([5, 4, 5],0)
     [5, 4]
-    >>> maximal_repetition_free_prefix([5, 4, 5, 3])
+    >>> maximal_repetition_free_prefix([5, 4, 5, 3],0)
     [5, 4]
-    >>> maximal_repetition_free_prefix([3, 2, 1, 2, 4])
+    >>> maximal_repetition_free_prefix([3, 2, 1, 2, 4],0)
     [3, 2, 1]
 
     """
-    return []  # stub
+    if n == len(sequence):
+        return sequence
+    if sequence[n] in sequence[:n]:
+        return sequence[:n]
+    return maximal_repetition_free_prefix(sequence,n+1)
+    # n^2
 
 
-def maximal_repetition_free_subsequence(sequence):
+def maximal_repetition_free_subsequence(sequence,n):
     """
     Given a sequence, return the last of its longest repetition-free subsequences.  For example:
 
-    >>> maximal_repetition_free_subsequence([])
+    >>> maximal_repetition_free_subsequence([],-1)
     []
-    >>> maximal_repetition_free_subsequence([5])
+    >>> maximal_repetition_free_subsequence([5],0)
     [5]
-    >>> maximal_repetition_free_subsequence([5, 4])
+    >>> maximal_repetition_free_subsequence([5, 4],1)
     [5, 4]
-    >>> maximal_repetition_free_subsequence([5, 4, 5])
+    >>> maximal_repetition_free_subsequence([5, 4, 5],2)
     [4, 5]
-    >>> maximal_repetition_free_subsequence([5, 4, 5, 3])
+    >>> maximal_repetition_free_subsequence([5, 4, 5, 3],3)
     [4, 5, 3]
-    >>> maximal_repetition_free_subsequence([3, 2, 1, 2, 4])
+    >>> maximal_repetition_free_subsequence([3, 2, 1, 2, 4],4)
     [1, 2, 4]
-    >>> maximal_repetition_free_subsequence([1, 2, 1, 2, 1, 2, 1])
+    >>> maximal_repetition_free_subsequence([1, 2, 1, 2, 1, 2, 1],6)
     [2, 1]
     """
-    return []  # stub
+    if n < 0:
+        return sequence
+    if sequence[n-1] in sequence[n:]:
+        return sequence[n:]
+    return maximal_repetition_free_subsequence(sequence,n-1)
 
 
 def maximal_repetition_free_subsequence_version_2(sequence):
@@ -119,23 +138,27 @@ def maximal_repetition_free_subsequence_version_2(sequence):
     return result
 
 
-def maximal_repetition_free_subsequence_version_3(sequence):
+def maximal_repetition_free_subsequence_version_3(sequence, n):
     """
     Given a sequence, return the last of its longest repetition-free subsequences.  For example:
 
-    >>> maximal_repetition_free_subsequence_version_3([])
+    >>> maximal_repetition_free_subsequence_version_3([], -1)
     []
-    >>> maximal_repetition_free_subsequence_version_3([5])
+    >>> maximal_repetition_free_subsequence_version_3([5], 0)
     [5]
-    >>> maximal_repetition_free_subsequence_version_3([5, 4])
+    >>> maximal_repetition_free_subsequence_version_3([5, 4], 1)
     [5, 4]
-    >>> maximal_repetition_free_subsequence_version_3([5, 4, 5])
+    >>> maximal_repetition_free_subsequence_version_3([5, 4, 5], 2)
     [4, 5]
-    >>> maximal_repetition_free_subsequence_version_3([5, 4, 5, 3])
+    >>> maximal_repetition_free_subsequence_version_3([5, 4, 5, 3], 3)
     [4, 5, 3]
-    >>> maximal_repetition_free_subsequence_version_3([3, 2, 1, 2, 4])
+    >>> maximal_repetition_free_subsequence_version_3([3, 2, 1, 2, 4], 4)
     [1, 2, 4]
-    >>> maximal_repetition_free_subsequence_version_3([1, 2, 1, 2, 1, 2, 1])
+    >>> maximal_repetition_free_subsequence_version_3([1, 2, 1, 2, 1, 2, 1], 6)
     [2, 1]
     """
-    return []  # stub
+    if n < 0:
+        return sequence
+    if sequence[n-1] in sequence[n:]:
+        return sequence[n:]
+    return maximal_repetition_free_subsequence_version_3(sequence,n-1)