title: Find The First Missing Number
signature: findTheFirstMissingNumber :: [Integer] -> Integer -> Integer -> Integer
  findTheFirstMissingNumber array start end_arg2 = 
test_code: import Text.Printf
  import Control.Exception (catch, SomeException)
  import Data.Typeable
  import qualified Data.List as List
  import qualified Data.Map as Map
  import qualified Data.Set as Set
  
  -- SOLUTION CODE
  -- ============================================
  
  PLACEHOLDER_CODE_BODY
  
  -- TESTING CODE 
  -- ============================================
  validateSolution :: Integer -> Integer -> Bool
  validateSolution actual expected = do
      actual == expected
  
  
  driver :: [Integer] -> Integer -> Integer -> Integer -> String
  driver array start end_arg2 expected = do
      if (validateSolution (PLACEHOLDER_FN_NAME array start end_arg2) expected)
          then "PASSED"
      else "FAILED"
  
  main = do
      printf "TEST-0...%s\n" (driver ([3, 6, 7, 9, 11, 14, 18, 30, 30, 32, 32, 34, 37, 44, 45, 45, 48, 48, 48, 52, 58, 60, 63, 67, 69, 69, 81, 83, 87, 89, 97, 99]) (24) (18) (19) )
  
      printf "TEST-1...%s\n" (driver ([88, -62, 16, 80, 66, 78, 88, 38, 52, -96, 48, 98, 96, -62, 18, 34, -58, 30, -10, 26, -98, 48, -96, 4, 92, 36, 36, -36, -32, -70, 62, -58, -58, -84, 86, -98]) (19) (26) (19) )
  
      printf "TEST-2...%s\n" (driver ([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) (26) (28) (26) )
  
      printf "TEST-3...%s\n" (driver ([79, 99, 79, 85, 61, 58, 62, 61, 39, 87, 39, 74, 36, 70, 30, 43, 20, 52, 54, 50, 81, 98, 42]) (20) (20) (20) )
  
      printf "TEST-4...%s\n" (driver ([-98, -72, -46, -44, -42, -40, -16, -4, 62, 70, 74]) (8) (10) (8) )
  
      printf "TEST-5...%s\n" (driver ([1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]) (26) (23) (24) )
  
      printf "TEST-6...%s\n" (driver ([58]) (0) (0) (0) )
  
      printf "TEST-7...%s\n" (driver ([4, -84, -42, 12, -50, 42, -36, -38, -36, 98, -2, 20, 6, -96, -78, 24, 34, 88, 0, 74, 0, -8, -86, -68, -42, 98, -26, 86, -70, -32, -82, 78, 46, 58, 84, 4, -60, -90, -52, -78]) (37) (31) (32) )
  
      printf "TEST-8...%s\n" (driver ([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) (28) (28) (28) )
  
      printf "TEST-9...%s\n" (driver ([8]) (0) (0) (0) )
  
source_py: def find_the_first_missing_number(array, start, end):
      if (start > end):
          return (end + 1)
      if (start != array[start]):
          return start
      mid = int(((start + end) / 2))
      if (array[mid] == mid):
          return find_the_first_missing_number(array, (mid + 1), end)
      return find_the_first_missing_number(array, start, mid)
source_cpp: int find_the_first_missing_number(vector<int> array, int start, int end) {
    if ( start > end ) return end + 1;
    if ( start != array [ start ] ) return start;
    int mid = ( start + end ) / 2;
    if ( array [ mid ] == mid ) return find_the_first_missing_number ( array, mid + 1, end );
    return find_the_first_missing_number ( array, start, mid );
  }