diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5241a72
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+*.class
\ No newline at end of file
diff --git a/.project b/.project
index 5545f35..60ab49d 100644
--- a/.project
+++ b/.project
@@ -5,6 +5,11 @@
 	<projects>
 	</projects>
 	<buildSpec>
+		<buildCommand>
+			<name>org.python.pydev.PyDevBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
 		<buildCommand>
 			<name>org.eclipse.jdt.core.javabuilder</name>
 			<arguments>
@@ -13,5 +18,6 @@
 	</buildSpec>
 	<natures>
 		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.python.pydev.pythonNature</nature>
 	</natures>
 </projectDescription>
diff --git a/.pydevproject b/.pydevproject
new file mode 100644
index 0000000..40e9f40
--- /dev/null
+++ b/.pydevproject
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?eclipse-pydev version="1.0"?><pydev_project>
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
+</pydev_project>
diff --git a/README.md b/README.md
index 1d8390e..d8f5220 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@ Data Structure And Algorithms Made Easy In Java
 
  Last modification by	  : Narasimha Karumanchi 
           
- Book Title		           : Data Structures And Algorithms Made In Java
+ Book Title		           : Data Structures And Algorithms Made Easy In Java
  
  ISBN                   : 9781466304161 [For India]/9781468101270 [Except India]
  
diff --git a/bin/.gitignore b/bin/.gitignore
new file mode 100644
index 0000000..c5e7f18
--- /dev/null
+++ b/bin/.gitignore
@@ -0,0 +1 @@
+/chapter21miscconcepts/
diff --git a/bin/chapter01introduction/LogNComplexityDown.class b/bin/chapter01introduction/LogNComplexityDown.class
index 7f6ba67..18933b9 100644
Binary files a/bin/chapter01introduction/LogNComplexityDown.class and b/bin/chapter01introduction/LogNComplexityDown.class differ
diff --git a/bin/chapter01introduction/LogNComplexityUp.class b/bin/chapter01introduction/LogNComplexityUp.class
index 675cddf..a2ced80 100644
Binary files a/bin/chapter01introduction/LogNComplexityUp.class and b/bin/chapter01introduction/LogNComplexityUp.class differ
diff --git a/bin/chapter01introduction/NComplexity.class b/bin/chapter01introduction/NComplexity.class
index 74c0365..d6ee4fa 100644
Binary files a/bin/chapter01introduction/NComplexity.class and b/bin/chapter01introduction/NComplexity.class differ
diff --git a/bin/chapter01introduction/NPower3By2Complexity.class b/bin/chapter01introduction/NPower3By2Complexity.class
index d0edf14..363bdad 100644
Binary files a/bin/chapter01introduction/NPower3By2Complexity.class and b/bin/chapter01introduction/NPower3By2Complexity.class differ
diff --git a/bin/chapter01introduction/NSquareLogNComplexity.class b/bin/chapter01introduction/NSquareLogNComplexity.class
index 156ee73..d57f61a 100644
Binary files a/bin/chapter01introduction/NSquareLogNComplexity.class and b/bin/chapter01introduction/NSquareLogNComplexity.class differ
diff --git a/bin/chapter01introduction/NlogNComplexity.class b/bin/chapter01introduction/NlogNComplexity.class
index d82f3ba..5bd9d4c 100644
Binary files a/bin/chapter01introduction/NlogNComplexity.class and b/bin/chapter01introduction/NlogNComplexity.class differ
diff --git a/bin/chapter01introduction/SquareRootNComplexity.class b/bin/chapter01introduction/SquareRootNComplexity.class
index 56a9170..a3cdc27 100644
Binary files a/bin/chapter01introduction/SquareRootNComplexity.class and b/bin/chapter01introduction/SquareRootNComplexity.class differ
diff --git a/bin/chapter02recursionandbacktracking/Factorial.class b/bin/chapter02recursionandbacktracking/Factorial.class
index ab64f0c..e54e518 100644
Binary files a/bin/chapter02recursionandbacktracking/Factorial.class and b/bin/chapter02recursionandbacktracking/Factorial.class differ
diff --git a/bin/chapter02recursionandbacktracking/FactorialTest.class b/bin/chapter02recursionandbacktracking/FactorialTest.class
index 6dff097..31d84a4 100644
Binary files a/bin/chapter02recursionandbacktracking/FactorialTest.class and b/bin/chapter02recursionandbacktracking/FactorialTest.class differ
diff --git a/bin/chapter03linkedlists/AddNumbersFromList.class b/bin/chapter03linkedlists/AddNumbersFromList.class
index 6dadbc6..1a83578 100644
Binary files a/bin/chapter03linkedlists/AddNumbersFromList.class and b/bin/chapter03linkedlists/AddNumbersFromList.class differ
diff --git a/bin/chapter03linkedlists/CLLNode.class b/bin/chapter03linkedlists/CLLNode.class
index ca4147f..b4c5a11 100644
Binary files a/bin/chapter03linkedlists/CLLNode.class and b/bin/chapter03linkedlists/CLLNode.class differ
diff --git a/bin/chapter03linkedlists/CircularLinkedList.class b/bin/chapter03linkedlists/CircularLinkedList.class
index f8025c2..efd95a3 100644
Binary files a/bin/chapter03linkedlists/CircularLinkedList.class and b/bin/chapter03linkedlists/CircularLinkedList.class differ
diff --git a/bin/chapter03linkedlists/DLLNode.class b/bin/chapter03linkedlists/DLLNode.class
index 008690f..0bdc846 100644
Binary files a/bin/chapter03linkedlists/DLLNode.class and b/bin/chapter03linkedlists/DLLNode.class differ
diff --git a/bin/chapter03linkedlists/DoublyLinkedList.class b/bin/chapter03linkedlists/DoublyLinkedList.class
index 9442128..52320c1 100644
Binary files a/bin/chapter03linkedlists/DoublyLinkedList.class and b/bin/chapter03linkedlists/DoublyLinkedList.class differ
diff --git a/bin/chapter03linkedlists/ExchangeAdjacentNodes.class b/bin/chapter03linkedlists/ExchangeAdjacentNodes.class
index b0c9e86..0d5c7bd 100644
Binary files a/bin/chapter03linkedlists/ExchangeAdjacentNodes.class and b/bin/chapter03linkedlists/ExchangeAdjacentNodes.class differ
diff --git a/bin/chapter03linkedlists/InsertionSortLinkedList.class b/bin/chapter03linkedlists/InsertionSortLinkedList.class
index 0981ea4..0d9fb9a 100644
Binary files a/bin/chapter03linkedlists/InsertionSortLinkedList.class and b/bin/chapter03linkedlists/InsertionSortLinkedList.class differ
diff --git a/bin/chapter03linkedlists/LinkedList.class b/bin/chapter03linkedlists/LinkedList.class
index 738700c..fc9258b 100644
Binary files a/bin/chapter03linkedlists/LinkedList.class and b/bin/chapter03linkedlists/LinkedList.class differ
diff --git a/bin/chapter03linkedlists/ListNode.class b/bin/chapter03linkedlists/ListNode.class
index c2e51fd..67483ef 100644
Binary files a/bin/chapter03linkedlists/ListNode.class and b/bin/chapter03linkedlists/ListNode.class differ
diff --git a/bin/chapter03linkedlists/LoopInALinkedList.class b/bin/chapter03linkedlists/LoopInALinkedList.class
index 3721e32..8fa4196 100644
Binary files a/bin/chapter03linkedlists/LoopInALinkedList.class and b/bin/chapter03linkedlists/LoopInALinkedList.class differ
diff --git a/bin/chapter03linkedlists/MergeKSortedLists.class b/bin/chapter03linkedlists/MergeKSortedLists.class
index 57b4a98..907a4b1 100644
Binary files a/bin/chapter03linkedlists/MergeKSortedLists.class and b/bin/chapter03linkedlists/MergeKSortedLists.class differ
diff --git a/bin/chapter03linkedlists/MergeSortedListsIterative.class b/bin/chapter03linkedlists/MergeSortedListsIterative.class
index 5a0278b..fd52130 100644
Binary files a/bin/chapter03linkedlists/MergeSortedListsIterative.class and b/bin/chapter03linkedlists/MergeSortedListsIterative.class differ
diff --git a/bin/chapter03linkedlists/MergeSortedListsRecursion.class b/bin/chapter03linkedlists/MergeSortedListsRecursion.class
index 2dee9ae..50baf80 100644
Binary files a/bin/chapter03linkedlists/MergeSortedListsRecursion.class and b/bin/chapter03linkedlists/MergeSortedListsRecursion.class differ
diff --git a/bin/chapter03linkedlists/NthNodeFromEnd.class b/bin/chapter03linkedlists/NthNodeFromEnd.class
index b24b7f4..516bd51 100644
Binary files a/bin/chapter03linkedlists/NthNodeFromEnd.class and b/bin/chapter03linkedlists/NthNodeFromEnd.class differ
diff --git a/bin/chapter03linkedlists/PartitionList.class b/bin/chapter03linkedlists/PartitionList.class
index a36ed89..d970dee 100644
Binary files a/bin/chapter03linkedlists/PartitionList.class and b/bin/chapter03linkedlists/PartitionList.class differ
diff --git a/bin/chapter03linkedlists/PrintListInReverse.class b/bin/chapter03linkedlists/PrintListInReverse.class
index 05c4773..c08731c 100644
Binary files a/bin/chapter03linkedlists/PrintListInReverse.class and b/bin/chapter03linkedlists/PrintListInReverse.class differ
diff --git a/bin/chapter03linkedlists/RandomListNode.class b/bin/chapter03linkedlists/RandomListNode.class
index fac09f9..2982f1a 100644
Binary files a/bin/chapter03linkedlists/RandomListNode.class and b/bin/chapter03linkedlists/RandomListNode.class differ
diff --git a/bin/chapter03linkedlists/RandomPointerLinkedList.class b/bin/chapter03linkedlists/RandomPointerLinkedList.class
index a3c51af..3a562af 100644
Binary files a/bin/chapter03linkedlists/RandomPointerLinkedList.class and b/bin/chapter03linkedlists/RandomPointerLinkedList.class differ
diff --git a/bin/chapter03linkedlists/RemoveDuplicatesBruteForce.class b/bin/chapter03linkedlists/RemoveDuplicatesBruteForce.class
index b246057..e6959ee 100644
Binary files a/bin/chapter03linkedlists/RemoveDuplicatesBruteForce.class and b/bin/chapter03linkedlists/RemoveDuplicatesBruteForce.class differ
diff --git a/bin/chapter03linkedlists/RemoveDuplicatesHashing.class b/bin/chapter03linkedlists/RemoveDuplicatesHashing.class
index c2e3f83..9e91f52 100644
Binary files a/bin/chapter03linkedlists/RemoveDuplicatesHashing.class and b/bin/chapter03linkedlists/RemoveDuplicatesHashing.class differ
diff --git a/bin/chapter03linkedlists/ReverseALinkedList.class b/bin/chapter03linkedlists/ReverseALinkedList.class
index ca6cf61..472ee98 100644
Binary files a/bin/chapter03linkedlists/ReverseALinkedList.class and b/bin/chapter03linkedlists/ReverseALinkedList.class differ
diff --git a/bin/chapter03linkedlists/ReverseKNodesAsBlcokIterative.class b/bin/chapter03linkedlists/ReverseKNodesAsBlcokIterative.class
index 835afd5..66e4075 100644
Binary files a/bin/chapter03linkedlists/ReverseKNodesAsBlcokIterative.class and b/bin/chapter03linkedlists/ReverseKNodesAsBlcokIterative.class differ
diff --git a/bin/chapter03linkedlists/ReverseKNodesAsBlockRecursive.class b/bin/chapter03linkedlists/ReverseKNodesAsBlockRecursive.class
index 08e0b3e..752a308 100644
Binary files a/bin/chapter03linkedlists/ReverseKNodesAsBlockRecursive.class and b/bin/chapter03linkedlists/ReverseKNodesAsBlockRecursive.class differ
diff --git a/bin/chapter03linkedlists/RotateLinkedList.class b/bin/chapter03linkedlists/RotateLinkedList.class
index 46a1685..614fac5 100644
Binary files a/bin/chapter03linkedlists/RotateLinkedList.class and b/bin/chapter03linkedlists/RotateLinkedList.class differ
diff --git a/bin/chapter03linkedlists/SkipList$Node.class b/bin/chapter03linkedlists/SkipList$Node.class
index 881cd44..8f890d7 100644
Binary files a/bin/chapter03linkedlists/SkipList$Node.class and b/bin/chapter03linkedlists/SkipList$Node.class differ
diff --git a/bin/chapter03linkedlists/SkipList.class b/bin/chapter03linkedlists/SkipList.class
index 09cfda0..2bccc49 100644
Binary files a/bin/chapter03linkedlists/SkipList.class and b/bin/chapter03linkedlists/SkipList.class differ
diff --git a/bin/chapter03linkedlists/SkipListsTest.class b/bin/chapter03linkedlists/SkipListsTest.class
index c368bde..dc36b5c 100644
Binary files a/bin/chapter03linkedlists/SkipListsTest.class and b/bin/chapter03linkedlists/SkipListsTest.class differ
diff --git a/bin/chapter04stacks/DynamicArrayStack.class b/bin/chapter04stacks/DynamicArrayStack.class
index 3971e33..a0929fb 100644
Binary files a/bin/chapter04stacks/DynamicArrayStack.class and b/bin/chapter04stacks/DynamicArrayStack.class differ
diff --git a/bin/chapter04stacks/ExpressionEvaluation.class b/bin/chapter04stacks/ExpressionEvaluation.class
index e3792bf..b8b08a7 100644
Binary files a/bin/chapter04stacks/ExpressionEvaluation.class and b/bin/chapter04stacks/ExpressionEvaluation.class differ
diff --git a/bin/chapter04stacks/FixedSizeArrayStack.class b/bin/chapter04stacks/FixedSizeArrayStack.class
index ea44757..7b0b9e0 100644
Binary files a/bin/chapter04stacks/FixedSizeArrayStack.class and b/bin/chapter04stacks/FixedSizeArrayStack.class differ
diff --git a/bin/chapter04stacks/LinkedStack.class b/bin/chapter04stacks/LinkedStack.class
index d2571a5..1704a36 100644
Binary files a/bin/chapter04stacks/LinkedStack.class and b/bin/chapter04stacks/LinkedStack.class differ
diff --git a/bin/chapter04stacks/MaxRectangleAreaInHistrogram.class b/bin/chapter04stacks/MaxRectangleAreaInHistrogram.class
index 2d68a3b..e6b8ec3 100644
Binary files a/bin/chapter04stacks/MaxRectangleAreaInHistrogram.class and b/bin/chapter04stacks/MaxRectangleAreaInHistrogram.class differ
diff --git a/bin/chapter04stacks/SortingStack.class b/bin/chapter04stacks/SortingStack.class
index c993a6f..393ad52 100644
Binary files a/bin/chapter04stacks/SortingStack.class and b/bin/chapter04stacks/SortingStack.class differ
diff --git a/bin/chapter04stacks/StackForStackSets.class b/bin/chapter04stacks/StackForStackSets.class
index ea768c9..b591c4a 100644
Binary files a/bin/chapter04stacks/StackForStackSets.class and b/bin/chapter04stacks/StackForStackSets.class differ
diff --git a/bin/chapter04stacks/StackSets.class b/bin/chapter04stacks/StackSets.class
index 5944d52..6bec65e 100644
Binary files a/bin/chapter04stacks/StackSets.class and b/bin/chapter04stacks/StackSets.class differ
diff --git a/bin/chapter04stacks/SymbolBalance.class b/bin/chapter04stacks/SymbolBalance.class
index 8c50b73..b3fd70a 100644
Binary files a/bin/chapter04stacks/SymbolBalance.class and b/bin/chapter04stacks/SymbolBalance.class differ
diff --git a/bin/chapter05queues/DynamicArrayQueue.class b/bin/chapter05queues/DynamicArrayQueue.class
index f4e908e..a953af3 100644
Binary files a/bin/chapter05queues/DynamicArrayQueue.class and b/bin/chapter05queues/DynamicArrayQueue.class differ
diff --git a/bin/chapter05queues/FixedSizeArrayQueue.class b/bin/chapter05queues/FixedSizeArrayQueue.class
index dcc793d..72b9daa 100644
Binary files a/bin/chapter05queues/FixedSizeArrayQueue.class and b/bin/chapter05queues/FixedSizeArrayQueue.class differ
diff --git a/bin/chapter05queues/LinkedQueue.class b/bin/chapter05queues/LinkedQueue.class
index 2e078eb..c46f471 100644
Binary files a/bin/chapter05queues/LinkedQueue.class and b/bin/chapter05queues/LinkedQueue.class differ
diff --git a/bin/chapter05queues/QueuewithTwoStacks.class b/bin/chapter05queues/QueuewithTwoStacks.class
index fc48fd2..cb3f1af 100644
Binary files a/bin/chapter05queues/QueuewithTwoStacks.class and b/bin/chapter05queues/QueuewithTwoStacks.class differ
diff --git a/bin/chapter05queues/StackwithTwoQueues.class b/bin/chapter05queues/StackwithTwoQueues.class
index 1aba420..32d5699 100644
Binary files a/bin/chapter05queues/StackwithTwoQueues.class and b/bin/chapter05queues/StackwithTwoQueues.class differ
diff --git a/bin/chapter06trees/BinarySearchTreeNode.class b/bin/chapter06trees/BinarySearchTreeNode.class
index 1eb6bc8..ff8cbbd 100644
Binary files a/bin/chapter06trees/BinarySearchTreeNode.class and b/bin/chapter06trees/BinarySearchTreeNode.class differ
diff --git a/bin/chapter06trees/BinaryTreeNode.class b/bin/chapter06trees/BinaryTreeNode.class
index 86be5a3..f7b4ca7 100644
Binary files a/bin/chapter06trees/BinaryTreeNode.class and b/bin/chapter06trees/BinaryTreeNode.class differ
diff --git a/bin/chapter06trees/BinaryTreeSizeLevelOrder.class b/bin/chapter06trees/BinaryTreeSizeLevelOrder.class
index be4f415..80b3c5d 100644
Binary files a/bin/chapter06trees/BinaryTreeSizeLevelOrder.class and b/bin/chapter06trees/BinaryTreeSizeLevelOrder.class differ
diff --git a/bin/chapter06trees/BinaryTreeSizeRecursive.class b/bin/chapter06trees/BinaryTreeSizeRecursive.class
index 133aab5..039de8f 100644
Binary files a/bin/chapter06trees/BinaryTreeSizeRecursive.class and b/bin/chapter06trees/BinaryTreeSizeRecursive.class differ
diff --git a/bin/chapter06trees/CheckAVL.class b/bin/chapter06trees/CheckAVL.class
index 86efe9e..ada8048 100644
Binary files a/bin/chapter06trees/CheckAVL.class and b/bin/chapter06trees/CheckAVL.class differ
diff --git a/bin/chapter06trees/CheckMirrors.class b/bin/chapter06trees/CheckMirrors.class
index f5a7727..5b6d331 100644
Binary files a/bin/chapter06trees/CheckMirrors.class and b/bin/chapter06trees/CheckMirrors.class differ
diff --git a/bin/chapter06trees/CheckPathForSum.class b/bin/chapter06trees/CheckPathForSum.class
index 7547057..ebd83d8 100644
Binary files a/bin/chapter06trees/CheckPathForSum.class and b/bin/chapter06trees/CheckPathForSum.class differ
diff --git a/bin/chapter06trees/CheckStructurullySameTrees.class b/bin/chapter06trees/CheckStructurullySameTrees.class
index 13e5c6b..573a67f 100644
Binary files a/bin/chapter06trees/CheckStructurullySameTrees.class and b/bin/chapter06trees/CheckStructurullySameTrees.class differ
diff --git a/bin/chapter06trees/CheckValidBSTRecursive.class b/bin/chapter06trees/CheckValidBSTRecursive.class
index 8adabb2..7674b37 100644
Binary files a/bin/chapter06trees/CheckValidBSTRecursive.class and b/bin/chapter06trees/CheckValidBSTRecursive.class differ
diff --git a/bin/chapter06trees/CheckValidBSTRecursiveSingleVariable.class b/bin/chapter06trees/CheckValidBSTRecursiveSingleVariable.class
index cdce3a4..220ccda 100644
Binary files a/bin/chapter06trees/CheckValidBSTRecursiveSingleVariable.class and b/bin/chapter06trees/CheckValidBSTRecursiveSingleVariable.class differ
diff --git a/bin/chapter06trees/ConstructMirror.class b/bin/chapter06trees/ConstructMirror.class
index ecc0182..9ee8cc4 100644
Binary files a/bin/chapter06trees/ConstructMirror.class and b/bin/chapter06trees/ConstructMirror.class differ
diff --git a/bin/chapter06trees/CountBSTs.class b/bin/chapter06trees/CountBSTs.class
index 3b6cdca..73ec90c 100644
Binary files a/bin/chapter06trees/CountBSTs.class and b/bin/chapter06trees/CountBSTs.class differ
diff --git a/bin/chapter06trees/DeepestNode.class b/bin/chapter06trees/DeepestNode.class
index cdf06a5..652b725 100644
Binary files a/bin/chapter06trees/DeepestNode.class and b/bin/chapter06trees/DeepestNode.class differ
diff --git a/bin/chapter06trees/DeleteBinaryTree.class b/bin/chapter06trees/DeleteBinaryTree.class
index ad3c433..1f1dca3 100644
Binary files a/bin/chapter06trees/DeleteBinaryTree.class and b/bin/chapter06trees/DeleteBinaryTree.class differ
diff --git a/bin/chapter06trees/DiameterOfTree.class b/bin/chapter06trees/DiameterOfTree.class
index fc7fb83..9c075d2 100644
Binary files a/bin/chapter06trees/DiameterOfTree.class and b/bin/chapter06trees/DiameterOfTree.class differ
diff --git a/bin/chapter06trees/FillNextSiblingsWithLevelOrder.class b/bin/chapter06trees/FillNextSiblingsWithLevelOrder.class
index 92d770d..31ca64e 100644
Binary files a/bin/chapter06trees/FillNextSiblingsWithLevelOrder.class and b/bin/chapter06trees/FillNextSiblingsWithLevelOrder.class differ
diff --git a/bin/chapter06trees/FillNextSiblingsWithRecursion.class b/bin/chapter06trees/FillNextSiblingsWithRecursion.class
index 30fd657..35d8eb9 100644
Binary files a/bin/chapter06trees/FillNextSiblingsWithRecursion.class and b/bin/chapter06trees/FillNextSiblingsWithRecursion.class differ
diff --git a/bin/chapter06trees/FindLevelwithMaxSum.class b/bin/chapter06trees/FindLevelwithMaxSum.class
index 3f90fc0..7375818 100644
Binary files a/bin/chapter06trees/FindLevelwithMaxSum.class and b/bin/chapter06trees/FindLevelwithMaxSum.class differ
diff --git a/bin/chapter06trees/GenerateBSTs.class b/bin/chapter06trees/GenerateBSTs.class
index 50cd491..908a879 100644
Binary files a/bin/chapter06trees/GenerateBSTs.class and b/bin/chapter06trees/GenerateBSTs.class differ
diff --git a/bin/chapter06trees/InOrderIterative.class b/bin/chapter06trees/InOrderIterative.class
index 53dd0b6..470157e 100644
Binary files a/bin/chapter06trees/InOrderIterative.class and b/bin/chapter06trees/InOrderIterative.class differ
diff --git a/bin/chapter06trees/InOrderRecursive.class b/bin/chapter06trees/InOrderRecursive.class
index ddcc0a4..142e1ce 100644
Binary files a/bin/chapter06trees/InOrderRecursive.class and b/bin/chapter06trees/InOrderRecursive.class differ
diff --git a/bin/chapter06trees/InsertInBinaryTreeLevelOrder.class b/bin/chapter06trees/InsertInBinaryTreeLevelOrder.class
index 488963c..b7cbcd3 100644
Binary files a/bin/chapter06trees/InsertInBinaryTreeLevelOrder.class and b/bin/chapter06trees/InsertInBinaryTreeLevelOrder.class differ
diff --git a/bin/chapter06trees/InsertInBinaryTreeRecursive.class b/bin/chapter06trees/InsertInBinaryTreeRecursive.class
index 1b387e4..e7d6e57 100644
Binary files a/bin/chapter06trees/InsertInBinaryTreeRecursive.class and b/bin/chapter06trees/InsertInBinaryTreeRecursive.class differ
diff --git a/bin/chapter06trees/LCABST.class b/bin/chapter06trees/LCABST.class
index 26f86cc..771016e 100644
Binary files a/bin/chapter06trees/LCABST.class and b/bin/chapter06trees/LCABST.class differ
diff --git a/bin/chapter06trees/LCABinaryTree.class b/bin/chapter06trees/LCABinaryTree.class
index 8c83bd1..eb99b73 100644
Binary files a/bin/chapter06trees/LCABinaryTree.class and b/bin/chapter06trees/LCABinaryTree.class differ
diff --git a/bin/chapter06trees/LevelOrder.class b/bin/chapter06trees/LevelOrder.class
index 489f18c..23af735 100644
Binary files a/bin/chapter06trees/LevelOrder.class and b/bin/chapter06trees/LevelOrder.class differ
diff --git a/bin/chapter06trees/LevelOrderTraversalInReverse.class b/bin/chapter06trees/LevelOrderTraversalInReverse.class
index 14afc3d..8de55db 100644
Binary files a/bin/chapter06trees/LevelOrderTraversalInReverse.class and b/bin/chapter06trees/LevelOrderTraversalInReverse.class differ
diff --git a/bin/chapter06trees/MaxDepthInBinaryTreeWithLevelOrder.class b/bin/chapter06trees/MaxDepthInBinaryTreeWithLevelOrder.class
index 2fc8a65..34ff479 100644
Binary files a/bin/chapter06trees/MaxDepthInBinaryTreeWithLevelOrder.class and b/bin/chapter06trees/MaxDepthInBinaryTreeWithLevelOrder.class differ
diff --git a/bin/chapter06trees/MaxDepthInBinaryTreeWithStack.class b/bin/chapter06trees/MaxDepthInBinaryTreeWithStack.class
index f27dee2..90fabda 100644
Binary files a/bin/chapter06trees/MaxDepthInBinaryTreeWithStack.class and b/bin/chapter06trees/MaxDepthInBinaryTreeWithStack.class differ
diff --git a/bin/chapter06trees/MaxDepthRecursiveInBinaryTree.class b/bin/chapter06trees/MaxDepthRecursiveInBinaryTree.class
index 3f2a43b..aef3a4b 100644
Binary files a/bin/chapter06trees/MaxDepthRecursiveInBinaryTree.class and b/bin/chapter06trees/MaxDepthRecursiveInBinaryTree.class differ
diff --git a/bin/chapter06trees/MaxInBinaryTreeLevelOrder.class b/bin/chapter06trees/MaxInBinaryTreeLevelOrder.class
index f0435ba..2f72824 100644
Binary files a/bin/chapter06trees/MaxInBinaryTreeLevelOrder.class and b/bin/chapter06trees/MaxInBinaryTreeLevelOrder.class differ
diff --git a/bin/chapter06trees/MaxInBinaryTreeRecursive.class b/bin/chapter06trees/MaxInBinaryTreeRecursive.class
index cf32496..de9b143 100644
Binary files a/bin/chapter06trees/MaxInBinaryTreeRecursive.class and b/bin/chapter06trees/MaxInBinaryTreeRecursive.class differ
diff --git a/bin/chapter06trees/MinInBinaryTreeRecursive.class b/bin/chapter06trees/MinInBinaryTreeRecursive.class
index e516d3c..922685c 100644
Binary files a/bin/chapter06trees/MinInBinaryTreeRecursive.class and b/bin/chapter06trees/MinInBinaryTreeRecursive.class differ
diff --git a/bin/chapter06trees/MinimumDepth.class b/bin/chapter06trees/MinimumDepth.class
index 3848ed5..8f99f19 100644
Binary files a/bin/chapter06trees/MinimumDepth.class and b/bin/chapter06trees/MinimumDepth.class differ
diff --git a/bin/chapter06trees/MirrorOfBinaryTree.class b/bin/chapter06trees/MirrorOfBinaryTree.class
index f73e69e..37c8532 100644
Binary files a/bin/chapter06trees/MirrorOfBinaryTree.class and b/bin/chapter06trees/MirrorOfBinaryTree.class differ
diff --git a/bin/chapter06trees/NumberOfFullNodesInBTusingLevelOrder.class b/bin/chapter06trees/NumberOfFullNodesInBTusingLevelOrder.class
index 7204ffb..8dac98f 100644
Binary files a/bin/chapter06trees/NumberOfFullNodesInBTusingLevelOrder.class and b/bin/chapter06trees/NumberOfFullNodesInBTusingLevelOrder.class differ
diff --git a/bin/chapter06trees/NumberOfHalfNodesInBTusingLevelOrder.class b/bin/chapter06trees/NumberOfHalfNodesInBTusingLevelOrder.class
index 0778f39..3a1bef3 100644
Binary files a/bin/chapter06trees/NumberOfHalfNodesInBTusingLevelOrder.class and b/bin/chapter06trees/NumberOfHalfNodesInBTusingLevelOrder.class differ
diff --git a/bin/chapter06trees/NumberOfLeavesInBTusingLevelOrder.class b/bin/chapter06trees/NumberOfLeavesInBTusingLevelOrder.class
index 7c3271d..941c7ee 100644
Binary files a/bin/chapter06trees/NumberOfLeavesInBTusingLevelOrder.class and b/bin/chapter06trees/NumberOfLeavesInBTusingLevelOrder.class differ
diff --git a/bin/chapter06trees/PostOrderIterative.class b/bin/chapter06trees/PostOrderIterative.class
index f31a005..56380a7 100644
Binary files a/bin/chapter06trees/PostOrderIterative.class and b/bin/chapter06trees/PostOrderIterative.class differ
diff --git a/bin/chapter06trees/PostOrderRecursive.class b/bin/chapter06trees/PostOrderRecursive.class
index 4724f67..87dc7da 100644
Binary files a/bin/chapter06trees/PostOrderRecursive.class and b/bin/chapter06trees/PostOrderRecursive.class differ
diff --git a/bin/chapter06trees/PreOrderIterative.class b/bin/chapter06trees/PreOrderIterative.class
index e1b2a31..05ca73c 100644
Binary files a/bin/chapter06trees/PreOrderIterative.class and b/bin/chapter06trees/PreOrderIterative.class differ
diff --git a/bin/chapter06trees/PreOrderRecursive.class b/bin/chapter06trees/PreOrderRecursive.class
index 2de9682..0c566bf 100644
Binary files a/bin/chapter06trees/PreOrderRecursive.class and b/bin/chapter06trees/PreOrderRecursive.class differ
diff --git a/bin/chapter06trees/PrintAllAncestors.class b/bin/chapter06trees/PrintAllAncestors.class
index b5a6ab2..7616958 100644
Binary files a/bin/chapter06trees/PrintAllAncestors.class and b/bin/chapter06trees/PrintAllAncestors.class differ
diff --git a/bin/chapter06trees/PrintPaths.class b/bin/chapter06trees/PrintPaths.class
index 55be255..438cb7d 100644
Binary files a/bin/chapter06trees/PrintPaths.class and b/bin/chapter06trees/PrintPaths.class differ
diff --git a/bin/chapter06trees/SearchBinaryTreeLevelOrder.class b/bin/chapter06trees/SearchBinaryTreeLevelOrder.class
index b2802c6..8806b56 100644
Binary files a/bin/chapter06trees/SearchBinaryTreeLevelOrder.class and b/bin/chapter06trees/SearchBinaryTreeLevelOrder.class differ
diff --git a/bin/chapter06trees/SearchBinaryTreeRecursive.class b/bin/chapter06trees/SearchBinaryTreeRecursive.class
index 6220750..6dfc641 100644
Binary files a/bin/chapter06trees/SearchBinaryTreeRecursive.class and b/bin/chapter06trees/SearchBinaryTreeRecursive.class differ
diff --git a/bin/chapter06trees/SiblingBinaryTreeNode.class b/bin/chapter06trees/SiblingBinaryTreeNode.class
index 6615594..bc916ea 100644
Binary files a/bin/chapter06trees/SiblingBinaryTreeNode.class and b/bin/chapter06trees/SiblingBinaryTreeNode.class differ
diff --git a/bin/chapter06trees/SortedArrayToBST.class b/bin/chapter06trees/SortedArrayToBST.class
index d30ddd6..a66ff77 100644
Binary files a/bin/chapter06trees/SortedArrayToBST.class and b/bin/chapter06trees/SortedArrayToBST.class differ
diff --git a/bin/chapter06trees/SumOfElementsInBinaryTreeLevelOrder.class b/bin/chapter06trees/SumOfElementsInBinaryTreeLevelOrder.class
index e19fbe9..8eff470 100644
Binary files a/bin/chapter06trees/SumOfElementsInBinaryTreeLevelOrder.class and b/bin/chapter06trees/SumOfElementsInBinaryTreeLevelOrder.class differ
diff --git a/bin/chapter06trees/SumOfElementsInBinaryTreeRecursive.class b/bin/chapter06trees/SumOfElementsInBinaryTreeRecursive.class
index b54b506..d0e7a9d 100644
Binary files a/bin/chapter06trees/SumOfElementsInBinaryTreeRecursive.class and b/bin/chapter06trees/SumOfElementsInBinaryTreeRecursive.class differ
diff --git a/bin/chapter06trees/TreeFromInOrderAndPostOrder.class b/bin/chapter06trees/TreeFromInOrderAndPostOrder.class
index 2159e2c..130c782 100644
Binary files a/bin/chapter06trees/TreeFromInOrderAndPostOrder.class and b/bin/chapter06trees/TreeFromInOrderAndPostOrder.class differ
diff --git a/bin/chapter06trees/TreeFromInOrderAndPreOrder.class b/bin/chapter06trees/TreeFromInOrderAndPreOrder.class
index b24f53e..36db9e3 100644
Binary files a/bin/chapter06trees/TreeFromInOrderAndPreOrder.class and b/bin/chapter06trees/TreeFromInOrderAndPreOrder.class differ
diff --git a/bin/chapter06trees/VerticalSum.class b/bin/chapter06trees/VerticalSum.class
index 051a461..3dad6da 100644
Binary files a/bin/chapter06trees/VerticalSum.class and b/bin/chapter06trees/VerticalSum.class differ
diff --git a/bin/chapter06trees/WidthOfTree.class b/bin/chapter06trees/WidthOfTree.class
index 8131c47..d1f384b 100644
Binary files a/bin/chapter06trees/WidthOfTree.class and b/bin/chapter06trees/WidthOfTree.class differ
diff --git a/bin/chapter06trees/ZigzagTraversal.class b/bin/chapter06trees/ZigzagTraversal.class
index d412e8d..ec0ae5a 100644
Binary files a/bin/chapter06trees/ZigzagTraversal.class and b/bin/chapter06trees/ZigzagTraversal.class differ
diff --git a/bin/chapter07priorityqueues/BinaryHeap.class b/bin/chapter07priorityqueues/BinaryHeap.class
index 117ca3b..5c798ca 100644
Binary files a/bin/chapter07priorityqueues/BinaryHeap.class and b/bin/chapter07priorityqueues/BinaryHeap.class differ
diff --git a/bin/chapter07priorityqueues/ListNode.class b/bin/chapter07priorityqueues/ListNode.class
index de352d3..478406c 100644
Binary files a/bin/chapter07priorityqueues/ListNode.class and b/bin/chapter07priorityqueues/ListNode.class differ
diff --git a/bin/chapter07priorityqueues/MergingKSortedLists$1.class b/bin/chapter07priorityqueues/MergingKSortedLists$1.class
index 9eb66be..25c326e 100644
Binary files a/bin/chapter07priorityqueues/MergingKSortedLists$1.class and b/bin/chapter07priorityqueues/MergingKSortedLists$1.class differ
diff --git a/bin/chapter07priorityqueues/MergingKSortedLists.class b/bin/chapter07priorityqueues/MergingKSortedLists.class
index 9369ce1..b406e1d 100644
Binary files a/bin/chapter07priorityqueues/MergingKSortedLists.class and b/bin/chapter07priorityqueues/MergingKSortedLists.class differ
diff --git a/bin/chapter08disjointsets/DisjointSets.class b/bin/chapter08disjointsets/DisjointSets.class
index 5349bcd..56b54c1 100644
Binary files a/bin/chapter08disjointsets/DisjointSets.class and b/bin/chapter08disjointsets/DisjointSets.class differ
diff --git a/bin/chapter10sorting/ConvertArraytoSawToothWave.class b/bin/chapter10sorting/ConvertArraytoSawToothWave.class
index df50b8e..206c536 100644
Binary files a/bin/chapter10sorting/ConvertArraytoSawToothWave.class and b/bin/chapter10sorting/ConvertArraytoSawToothWave.class differ
diff --git a/bin/chapter10sorting/ConvertArraytoSawToothWaveLinearTime.class b/bin/chapter10sorting/ConvertArraytoSawToothWaveLinearTime.class
index 9661702..2581dd0 100644
Binary files a/bin/chapter10sorting/ConvertArraytoSawToothWaveLinearTime.class and b/bin/chapter10sorting/ConvertArraytoSawToothWaveLinearTime.class differ
diff --git a/bin/chapter10sorting/MergeTwoSortedArrays.class b/bin/chapter10sorting/MergeTwoSortedArrays.class
index 66112a7..27fe2e3 100644
Binary files a/bin/chapter10sorting/MergeTwoSortedArrays.class and b/bin/chapter10sorting/MergeTwoSortedArrays.class differ
diff --git a/bin/chapter10sorting/QuickSort.class b/bin/chapter10sorting/QuickSort.class
index 9b41b68..5d9fdaa 100644
Binary files a/bin/chapter10sorting/QuickSort.class and b/bin/chapter10sorting/QuickSort.class differ
diff --git a/bin/chapter10sorting/RemoveDuplicatesFromSortedArray.class b/bin/chapter10sorting/RemoveDuplicatesFromSortedArray.class
index b8a415f..5abe9c1 100644
Binary files a/bin/chapter10sorting/RemoveDuplicatesFromSortedArray.class and b/bin/chapter10sorting/RemoveDuplicatesFromSortedArray.class differ
diff --git a/bin/chapter11searching/BinarySearchRotatedIterative.class b/bin/chapter11searching/BinarySearchRotatedIterative.class
index 0347425..a237db5 100644
Binary files a/bin/chapter11searching/BinarySearchRotatedIterative.class and b/bin/chapter11searching/BinarySearchRotatedIterative.class differ
diff --git a/bin/chapter11searching/BinarySearchRotatedRecursive.class b/bin/chapter11searching/BinarySearchRotatedRecursive.class
index a94375b..1f5a906 100644
Binary files a/bin/chapter11searching/BinarySearchRotatedRecursive.class and b/bin/chapter11searching/BinarySearchRotatedRecursive.class differ
diff --git a/bin/chapter11searching/DutchNationalFlag.class b/bin/chapter11searching/DutchNationalFlag.class
index ff85f1e..da7c800 100644
Binary files a/bin/chapter11searching/DutchNationalFlag.class and b/bin/chapter11searching/DutchNationalFlag.class differ
diff --git a/bin/chapter11searching/GenerateNextNumFromReading.class b/bin/chapter11searching/GenerateNextNumFromReading.class
index be39a64..95f53e8 100644
Binary files a/bin/chapter11searching/GenerateNextNumFromReading.class and b/bin/chapter11searching/GenerateNextNumFromReading.class differ
diff --git a/bin/chapter11searching/MissingNumberFromTwiceRepetitions.class b/bin/chapter11searching/MissingNumberFromTwiceRepetitions.class
index b8de55f..d7b5e0a 100644
Binary files a/bin/chapter11searching/MissingNumberFromTwiceRepetitions.class and b/bin/chapter11searching/MissingNumberFromTwiceRepetitions.class differ
diff --git a/bin/chapter11searching/SearchInSorted2DMatrix.class b/bin/chapter11searching/SearchInSorted2DMatrix.class
index 962f35b..1126ef3 100644
Binary files a/bin/chapter11searching/SearchInSorted2DMatrix.class and b/bin/chapter11searching/SearchInSorted2DMatrix.class differ
diff --git a/bin/chapter11searching/TwoSumEqualToK.class b/bin/chapter11searching/TwoSumEqualToK.class
index 95c4aec..08436cb 100644
Binary files a/bin/chapter11searching/TwoSumEqualToK.class and b/bin/chapter11searching/TwoSumEqualToK.class differ
diff --git a/bin/chapter12selectionalgorithms/KthLargest.class b/bin/chapter12selectionalgorithms/KthLargest.class
index bb0fa4d..aad153f 100644
Binary files a/bin/chapter12selectionalgorithms/KthLargest.class and b/bin/chapter12selectionalgorithms/KthLargest.class differ
diff --git a/bin/chapter12selectionalgorithms/KthSmallest.class b/bin/chapter12selectionalgorithms/KthSmallest.class
index 0f6b32c..0a24a32 100644
Binary files a/bin/chapter12selectionalgorithms/KthSmallest.class and b/bin/chapter12selectionalgorithms/KthSmallest.class differ
diff --git a/bin/chapter12selectionalgorithms/MedianInTwoSortedArrays.class b/bin/chapter12selectionalgorithms/MedianInTwoSortedArrays.class
index cdbb0af..c670604 100644
Binary files a/bin/chapter12selectionalgorithms/MedianInTwoSortedArrays.class and b/bin/chapter12selectionalgorithms/MedianInTwoSortedArrays.class differ
diff --git a/bin/chapter12selectionalgorithms/MedianInTwoSortedArraysTest.class b/bin/chapter12selectionalgorithms/MedianInTwoSortedArraysTest.class
index 92e7a28..4c199ee 100644
Binary files a/bin/chapter12selectionalgorithms/MedianInTwoSortedArraysTest.class and b/bin/chapter12selectionalgorithms/MedianInTwoSortedArraysTest.class differ
diff --git a/bin/chapter15stringalgorithms/MinLengthWindow.class b/bin/chapter15stringalgorithms/MinLengthWindow.class
index 477d2d8..a302eaf 100644
Binary files a/bin/chapter15stringalgorithms/MinLengthWindow.class and b/bin/chapter15stringalgorithms/MinLengthWindow.class differ
diff --git a/bin/chapter15stringalgorithms/NumberCombinations.class b/bin/chapter15stringalgorithms/NumberCombinations.class
index 3eb7027..2b57f1a 100644
Binary files a/bin/chapter15stringalgorithms/NumberCombinations.class and b/bin/chapter15stringalgorithms/NumberCombinations.class differ
diff --git a/bin/chapter15stringalgorithms/ReverseWordsinaSentence.class b/bin/chapter15stringalgorithms/ReverseWordsinaSentence.class
index a2b92d3..da940ef 100644
Binary files a/bin/chapter15stringalgorithms/ReverseWordsinaSentence.class and b/bin/chapter15stringalgorithms/ReverseWordsinaSentence.class differ
diff --git a/bin/chapter15stringalgorithms/Trie.class b/bin/chapter15stringalgorithms/Trie.class
index a9c7b47..7bd1a8c 100644
Binary files a/bin/chapter15stringalgorithms/Trie.class and b/bin/chapter15stringalgorithms/Trie.class differ
diff --git a/bin/chapter15stringalgorithms/WildCardMatch.class b/bin/chapter15stringalgorithms/WildCardMatch.class
index cc5cec7..3402201 100644
Binary files a/bin/chapter15stringalgorithms/WildCardMatch.class and b/bin/chapter15stringalgorithms/WildCardMatch.class differ
diff --git a/bin/chapter17greedyalgorithms/Huffman.class b/bin/chapter17greedyalgorithms/Huffman.class
index 1db66ea..bd44ad9 100644
Binary files a/bin/chapter17greedyalgorithms/Huffman.class and b/bin/chapter17greedyalgorithms/Huffman.class differ
diff --git a/bin/chapter17greedyalgorithms/HuffmanTreeNode.class b/bin/chapter17greedyalgorithms/HuffmanTreeNode.class
index 8826393..5386667 100644
Binary files a/bin/chapter17greedyalgorithms/HuffmanTreeNode.class and b/bin/chapter17greedyalgorithms/HuffmanTreeNode.class differ
diff --git a/bin/chapter18divideandconquer/ExponentialDivideAndConquer.class b/bin/chapter18divideandconquer/ExponentialDivideAndConquer.class
index 6574e46..63835d0 100644
Binary files a/bin/chapter18divideandconquer/ExponentialDivideAndConquer.class and b/bin/chapter18divideandconquer/ExponentialDivideAndConquer.class differ
diff --git a/bin/chapter18divideandconquer/MaxSumSubArrayDividAndConquer.class b/bin/chapter18divideandconquer/MaxSumSubArrayDividAndConquer.class
index 121d0f5..b990cf7 100644
Binary files a/bin/chapter18divideandconquer/MaxSumSubArrayDividAndConquer.class and b/bin/chapter18divideandconquer/MaxSumSubArrayDividAndConquer.class differ
diff --git a/bin/chapter19dynamicprogramming/EditDistance.class b/bin/chapter19dynamicprogramming/EditDistance.class
index 72c1f78..f4fecf9 100644
Binary files a/bin/chapter19dynamicprogramming/EditDistance.class and b/bin/chapter19dynamicprogramming/EditDistance.class differ
diff --git a/bin/chapter19dynamicprogramming/FibonacciWithDP.class b/bin/chapter19dynamicprogramming/FibonacciWithDP.class
index 602122f..c607e0d 100644
Binary files a/bin/chapter19dynamicprogramming/FibonacciWithDP.class and b/bin/chapter19dynamicprogramming/FibonacciWithDP.class differ
diff --git a/bin/chapter19dynamicprogramming/MaxSubSquareMatrixWith1s.class b/bin/chapter19dynamicprogramming/MaxSubSquareMatrixWith1s.class
index 368c126..f18e27f 100644
Binary files a/bin/chapter19dynamicprogramming/MaxSubSquareMatrixWith1s.class and b/bin/chapter19dynamicprogramming/MaxSubSquareMatrixWith1s.class differ
diff --git a/bin/chapter19dynamicprogramming/MaxSumSubArrayDP.class b/bin/chapter19dynamicprogramming/MaxSumSubArrayDP.class
index f4aad49..8a30c44 100644
Binary files a/bin/chapter19dynamicprogramming/MaxSumSubArrayDP.class and b/bin/chapter19dynamicprogramming/MaxSumSubArrayDP.class differ
diff --git a/bin/chapter19dynamicprogramming/MaximumSumSubMatrix.class b/bin/chapter19dynamicprogramming/MaximumSumSubMatrix.class
index 4b7b6cd..0ae5472 100644
Binary files a/bin/chapter19dynamicprogramming/MaximumSumSubMatrix.class and b/bin/chapter19dynamicprogramming/MaximumSumSubMatrix.class differ
diff --git a/bin/chapter19dynamicprogramming/OptimalJumps.class b/bin/chapter19dynamicprogramming/OptimalJumps.class
index d7201b0..415f2fa 100644
Binary files a/bin/chapter19dynamicprogramming/OptimalJumps.class and b/bin/chapter19dynamicprogramming/OptimalJumps.class differ
diff --git a/bin/chapter19dynamicprogramming/RecursiveFibonacci.class b/bin/chapter19dynamicprogramming/RecursiveFibonacci.class
index dbb72d1..c1249be 100644
Binary files a/bin/chapter19dynamicprogramming/RecursiveFibonacci.class and b/bin/chapter19dynamicprogramming/RecursiveFibonacci.class differ
diff --git a/bin/chapter21miscconcepts/AddOneToNumber.class b/bin/chapter21miscconcepts/AddOneToNumber.class
index 41c648c..863a427 100644
Binary files a/bin/chapter21miscconcepts/AddOneToNumber.class and b/bin/chapter21miscconcepts/AddOneToNumber.class differ
diff --git a/bin/chapter21miscconcepts/CheckEndian.class b/bin/chapter21miscconcepts/CheckEndian.class
index 3886064..b6b49a3 100644
Binary files a/bin/chapter21miscconcepts/CheckEndian.class and b/bin/chapter21miscconcepts/CheckEndian.class differ
diff --git a/bin/chapter21miscconcepts/Equilibrium.class b/bin/chapter21miscconcepts/Equilibrium.class
index 8bc984f..0bb2e4c 100644
Binary files a/bin/chapter21miscconcepts/Equilibrium.class and b/bin/chapter21miscconcepts/Equilibrium.class differ
diff --git a/bin/chapter21miscconcepts/MatrixSpiralPrint.class b/bin/chapter21miscconcepts/MatrixSpiralPrint.class
index 0f89f1a..af6dbf4 100644
Binary files a/bin/chapter21miscconcepts/MatrixSpiralPrint.class and b/bin/chapter21miscconcepts/MatrixSpiralPrint.class differ
diff --git a/bin/chapter21miscconcepts/SwapOddEvenBits.class b/bin/chapter21miscconcepts/SwapOddEvenBits.class
index 0928b3b..f3eddd2 100644
Binary files a/bin/chapter21miscconcepts/SwapOddEvenBits.class and b/bin/chapter21miscconcepts/SwapOddEvenBits.class differ
diff --git a/src/chapter01introduction/LogNComplexityDown.java b/src/chapter01introduction/LogNComplexityDown.java
index ebe3398..7b67f30 100644
--- a/src/chapter01introduction/LogNComplexityDown.java
+++ b/src/chapter01introduction/LogNComplexityDown.java
@@ -23,7 +23,7 @@ public static void main(String[] args) {
 	
 	public static int logNUp(int n){
 		int count = 0;
-		for (int i = n; i>0;){
+		for (int i = n; i > 0; ){
 			count ++;
 			i = i / 2;
 		}
diff --git a/src/chapter01introduction/LogNComplexityUp.java b/src/chapter01introduction/LogNComplexityUp.java
index 352ce46..c68a2f8 100644
--- a/src/chapter01introduction/LogNComplexityUp.java
+++ b/src/chapter01introduction/LogNComplexityUp.java
@@ -24,7 +24,7 @@ public static void main(String[] args) {
 	
 	public static int logNUp(int n){
 		int count = 0;
-		for (int i = 1; i<n;){
+		for (int i = 1; i < n; ){
 			count ++;
 			i = i *2;
 		}
diff --git a/src/chapter01introduction/NComplexity.java b/src/chapter01introduction/NComplexity.java
index b8b44df..e0d020e 100644
--- a/src/chapter01introduction/NComplexity.java
+++ b/src/chapter01introduction/NComplexity.java
@@ -23,7 +23,7 @@ public static void main(String[] args) {
 	}
 	public static int orderN(int n){
 		int count = 0;
-		for (int i = 1; i<n;){
+		for (int i = 1; i < n; ){
 			count ++;
 			i = i+1;
 		}
diff --git a/src/chapter01introduction/NPower3By2Complexity.java b/src/chapter01introduction/NPower3By2Complexity.java
index 2b97acf..f2f017e 100644
--- a/src/chapter01introduction/NPower3By2Complexity.java
+++ b/src/chapter01introduction/NPower3By2Complexity.java
@@ -21,12 +21,12 @@ public static void main(String[] args) {
 		System.out.println(nPower3By2(n));
 	}
 	public static int nPower3By2(int n){
-		int i=1, j;
+		int i = 1, j;
 		int count = 0;
 		int sum = 0;
-		for (i = 0; i <n; i++){
+		for (i = 0; i < n; i++){
 			j = 0;
-			while(sum<i){
+			while(sum < i){
 				sum = sum + j;
 				j++;
 				count++;
diff --git a/src/chapter01introduction/NSquareLogNComplexity.java b/src/chapter01introduction/NSquareLogNComplexity.java
index eb294b0..0341250 100644
--- a/src/chapter01introduction/NSquareLogNComplexity.java
+++ b/src/chapter01introduction/NSquareLogNComplexity.java
@@ -25,9 +25,9 @@ public static void main(String[] args) {
 	}
 	public static int nSquareLogN(int n){
 		int count = 0;
-		for (int i = 1; i<n;i = i *2){
-			for (int j = 1; j<n;j++){
-				for (int k = 1; k<n;k++){
+		for (int i = 1; i < n; i = i *2){
+			for (int j = 1; j < n; j++){
+				for (int k = 1; k < n; k++){
 					count ++;
 				}
 			}
@@ -36,7 +36,7 @@ public static int nSquareLogN(int n){
 	}
 	public static int nSquareLogN2(int n){
 		int count = 0;
-		for (int i = 1; i<n;i = i+1 ){
+		for (int i = 1; i < n; i = i + 1){
 			for (int j = 1; j<n;j = j*2){
 				for (int k = 1; k<n;k = k + 1){
 					count ++;
@@ -47,9 +47,9 @@ public static int nSquareLogN2(int n){
 	}
 	public static int nSquareLogN3(int n){
 		int count = 0;
-		for (int i = 1; i<n;i++){
-			for (int j = 1; j<n;j++){
-				for (int k = 1; k<n;k =  k *2){
+		for (int i = 1; i < n; i++){
+			for (int j = 1; j < n; j++){
+				for (int k = 1; k < n; k = k *2){
 					count ++;
 				}
 			}
diff --git a/src/chapter01introduction/SquareRootNComplexity.java b/src/chapter01introduction/SquareRootNComplexity.java
index 99f320b..202a1da 100644
--- a/src/chapter01introduction/SquareRootNComplexity.java
+++ b/src/chapter01introduction/SquareRootNComplexity.java
@@ -23,7 +23,7 @@ public static void main(String[] args) {
 	public static int squareRootN(int n){
 		int i=1;
 		int sum = 0;
-		while(sum<n){
+		while(sum < n){
 			sum = sum + i;
 			i++;
 		}
diff --git a/src/chapter01introduction/Variables.py b/src/chapter01introduction/Variables.py
new file mode 100644
index 0000000..5f54b5d
--- /dev/null
+++ b/src/chapter01introduction/Variables.py
@@ -0,0 +1,17 @@
+# your code goes here#Assign x to a Integer
+x = 5
+print "The value of x is:", x
+print "The type of x is:", type(x)
+print "The memory location of x is:", id(x)
+
+#Assign x to a Float
+x = 6.5
+print "The value of x is:", x
+print "The type of x is:", type(x)
+print "The memory location of x is:", id(x)
+
+#Assign x to a String
+x = "CodingDucks.org"
+print "The value of x is:", x
+print "The type of x is:", type(x)
+print "The memory location of x is:", id(x) 
diff --git a/src/chapter01introduction/Variables2.py b/src/chapter01introduction/Variables2.py
new file mode 100644
index 0000000..6d1d6ef
--- /dev/null
+++ b/src/chapter01introduction/Variables2.py
@@ -0,0 +1,8 @@
+x = 5
+print "Memory location of x:",id(x)
+
+x = 6
+print "Memory location of x:",id(x)
+
+y = 5
+print "Memory location of y:",id(y)
diff --git a/src/chapter03linkedlists/AddNumbersFromList.java b/src/chapter03linkedlists/AddNumbersFromList.java
index b0016ee..cf3407c 100644
--- a/src/chapter03linkedlists/AddNumbersFromList.java
+++ b/src/chapter03linkedlists/AddNumbersFromList.java
@@ -12,6 +12,28 @@
 
 package chapter03linkedlists;
 public class AddNumbersFromList {
+    // NOTE : the input parameters and output LL is reversed.
+    public static ListNode addTwoReversedNumbers(ListNode l1, ListNode l2) {
+        int carry = 0;
+        ListNode head = new ListNode(0);
+        ListNode sum = head;
+        while (l1 != null || l2 != null) {
+            if (l1 != null) {
+                carry += l1.data;
+                l1 = l1.next;
+            }
+            if (l2 != null) {
+                carry += l2.data;
+                l2 = l2.next;
+            }
+            sum.next = new ListNode(carry % 10);
+            sum = sum.next;
+            carry /= 10;
+        }
+        sum.next = carry == 1 ? new ListNode(1) : null;
+        return head.next;
+    }
+  
     public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
         if(l1 == null)
             return l2;
@@ -44,4 +66,4 @@ public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
         }
         return head.next;
     }
-}
\ No newline at end of file
+}
diff --git a/src/chapter03linkedlists/CommonElementsInSortedLinkedLists.java b/src/chapter03linkedlists/CommonElementsInSortedLinkedLists.java
new file mode 100644
index 0000000..d14dcf6
--- /dev/null
+++ b/src/chapter03linkedlists/CommonElementsInSortedLinkedLists.java
@@ -0,0 +1,34 @@
+/*Copyright (c) Feb 21, 2016 CareerMonk Publications and others.
+ * E-Mail           	: info@careermonk.com 
+ * Creation Date    	: 2015-01-10 06:15:46 
+ * Last modification	: 2006-05-31 
+               by		: Narasimha Karumanchi 
+ * File Name			: CommonElementsInSortedLinkedLists.java
+ * Book Title			: Data Structures And Algorithms Made In Java
+ * Warranty         	: This software is provided "as is" without any 
+ * 							warranty; without even the implied warranty of 
+ * 							merchantability or fitness for a particular purpose. 
+ * 
+ */
+
+package chapter03linkedlists;
+
+public class CommonElementsInSortedLinkedLists {
+	public static ListNode commonElement(ListNode list1, ListNode list2) {
+		ListNode temp =  new ListNode(0);
+		ListNode head = temp;
+		while (list1 != null && list2 != null) {
+			if (list1.data == list2.data) {
+				head.next = new ListNode(list1.data); // Copy common element.
+				list1 = list1.next;
+				list2 = list2.next;
+				head = head.next;
+			} else if (list1.data > list2.data) {
+				list2 = list2.next;	
+			} else { // list1.data < list2.data
+				list1 = list1.next;	
+			}
+		}
+		return temp.next;	
+	}
+}
diff --git a/src/chapter03linkedlists/DoublyLinkedList.java b/src/chapter03linkedlists/DoublyLinkedList.java
index c6273e3..b0e0586 100644
--- a/src/chapter03linkedlists/DoublyLinkedList.java
+++ b/src/chapter03linkedlists/DoublyLinkedList.java
@@ -57,9 +57,9 @@ public int length() {
 
 	// Add a new value to the front of the list.
 	public void insert(int newValue) {
-		DLLNode newNode = new DLLNode(newValue,head,head.getNext());
+		DLLNode newNode = new DLLNode(newValue,null,head.getNext());
 		newNode.getNext().setPrev(newNode);
-		head.setNext(newNode);
+		head = newNode;
 		length += 1;
 	} 
 
@@ -163,6 +163,7 @@ public synchronized void removeMatched(DLLNode node) {
 				p.next.prev = p.prev;
 				return;
 			}
+			p = p.getNext();
 		}
 	}
 	
diff --git a/src/chapter03linkedlists/MergeKSortedLists.java b/src/chapter03linkedlists/MergeKSortedLists.java
index 33500a6..c666a8c 100644
--- a/src/chapter03linkedlists/MergeKSortedLists.java
+++ b/src/chapter03linkedlists/MergeKSortedLists.java
@@ -12,6 +12,43 @@
 
 package chapter03linkedlists;
 
+import java.util.ArrayList;
+import java.util.PriorityQueue;
+
 public class MergeKSortedLists {
 	//Refer Priority Queues
+    public static ListNode mergeKLists(ArrayList<ListNode> lists) {
+        if (lists.isEmpty()) {
+            return null;
+        }
+        //PriorityQueue is a sorted queue
+        PriorityQueue<ListNode> pq = new PriorityQueue<>(lists.size(), (ListNode a, ListNode b) -> {
+            if (a.getData() > b.getData()) {
+                return 1;
+            } else if (a.getData() == b.getData()) {
+                return 0;
+            } else {
+                return -1;
+            }
+        });
+        //add first node of each list to the queue
+        for (ListNode list : lists) {
+            if (list != null) {
+                pq.add(list);
+            }
+        }
+        ListNode head = new ListNode(0);
+        ListNode p = head;
+        while (pq.size() > 0) {
+            //poll() retrieves and removes the head of the queue - q.
+            ListNode temp = pq.poll();
+            p.next = temp;
+            //keep adding next element of each list
+            if (temp.next != null) {
+                pq.add(temp.next);
+            }
+            p = p.next;
+        }
+        return head.next;
+    }
 }
diff --git a/src/chapter03linkedlists/NthNodeFromEnd.java b/src/chapter03linkedlists/NthNodeFromEnd.java
index a615b74..68cc7ac 100644
--- a/src/chapter03linkedlists/NthNodeFromEnd.java
+++ b/src/chapter03linkedlists/NthNodeFromEnd.java
@@ -24,4 +24,25 @@ public ListNode nthNodeFromEnd(ListNode head, int Nth) {
 	    }
 	    return null;
 	}
+	
+    public static ListNode nthNodeFromEndIterative(ListNode head, int Nth) {
+    	if(head == null){
+            return null;
+        }
+        ListNode nth = head;
+        // Get nth from the start
+        for (int i = 0; i < Nth; i++) {
+            if(nth.next == null){
+                return null;
+            }
+            nth = nth.next;
+        }
+        // Move both the head and nth node so the difference between them is n
+        // Thus we get the nth node from the end
+        while(nth != null){
+            head = head.next;
+            nth = nth.next;
+        }
+        return head;
+    }
 }
diff --git a/src/chapter04stacks/DynamicArrayStack.java b/src/chapter04stacks/DynamicArrayStack.java
index 9b8c0cb..2b23254 100644
--- a/src/chapter04stacks/DynamicArrayStack.java
+++ b/src/chapter04stacks/DynamicArrayStack.java
@@ -64,6 +64,7 @@ private void expand() {
 		int[] newstack=new int[length<<1];	 // or 2* length
 		System.arraycopy(stackRep,0,newstack,0,length);
 		stackRep=newstack;
+		this.capacity = this.capacity<<1;
 	}
 	
 	// dynamic array operation: shrinks to 1/2 if more than than 3/4 empty
@@ -77,6 +78,7 @@ private void shrink() {
 		int[] newStack=new int[length];
 		System.arraycopy(stackRep,0,newStack,0,top+1);
 		stackRep=newStack;
+		capacity = length;
 	}
 	
 	// Inspects the element at the top of the stack. This method runs in O(1) time.
@@ -93,6 +95,7 @@ public int pop() throws Exception {
 			throw new Exception("Stack is empty.");
 		data = stackRep[top];
 		stackRep[top--] = Integer.MIN_VALUE; // dereference S[top] for garbage collection.
+		shrink();
 		return data;
 	}
 
@@ -110,4 +113,4 @@ public String toString() {
 			}
 		return s + "]";
 	}
-}
\ No newline at end of file
+}
diff --git a/src/chapter06trees/CheckAVL.java b/src/chapter06trees/CheckAVL.java
index 463ef72..7a499dc 100644
--- a/src/chapter06trees/CheckAVL.java
+++ b/src/chapter06trees/CheckAVL.java
@@ -13,10 +13,10 @@
 package chapter06trees;
 
 public class CheckAVL {
-    public boolean isAVL(BinarySearchTreeNode root) {
+    public boolean isAVL(BinarySearchTreeNode root, int min, int max) {
         if(root == null)
             return true;
-        return isAVL(root.left) && isAVL(root.right) && Math.abs(getHeight(root.left) - getHeight(root.right)) <= 1;
+        return root.data > min && root.data < max && isAVL(root.left, min, root.data) && isAVL(root.right, root.data, max) && Math.abs(getHeight(root.left) - getHeight(root.right)) <= 1;
     }
     public int getHeight(BinarySearchTreeNode root){
         int leftHeight, rightHeight;
@@ -31,4 +31,8 @@ public int getHeight(BinarySearchTreeNode root){
                 return rightHeight + 1;
         }
     }
-}
\ No newline at end of file
+    
+    public boolean isAVL(BinarySearchTreeNode root){
+        return isAVL(root, Integer.MIN_VALUE, Integer.MAX_VALUE);
+    }
+}
diff --git a/src/chapter06trees/DiameterOfTree.java b/src/chapter06trees/DiameterOfTree.java
index b7756bf..d6f5fd9 100644
--- a/src/chapter06trees/DiameterOfTree.java
+++ b/src/chapter06trees/DiameterOfTree.java
@@ -25,7 +25,7 @@ public int diameterOfTree(BinaryTreeNode root){
 		right = diameterOfTree(root.getRight());
 		if(left + right > diameter)
 			diameter = left + right;
-			return Math.max(left, right)+1;
+		return Math.max(left, right)+1;
 	}
 	// Alternative Coding
 	public int diameter(BinaryTreeNode root){
diff --git a/src/chapter06trees/FindLevelwithMaxSum.java b/src/chapter06trees/FindLevelwithMaxSum.java
index e942f75..3214a52 100644
--- a/src/chapter06trees/FindLevelwithMaxSum.java
+++ b/src/chapter06trees/FindLevelwithMaxSum.java
@@ -29,6 +29,7 @@ public int findLevelwithMaxSum(BinaryTreeNode root) {
 		while (!q.isEmpty()) {
 			BinaryTreeNode tmp = q.poll();
 			if (tmp != null) {
+				currentSum += tmp.getData();
 				if (tmp.getLeft() != null)
 					q.offer(tmp.getLeft());
 				if (tmp.right != null)
diff --git a/src/chapter09graphs/BFS.java b/src/chapter09graphs/BFS.java
new file mode 100644
index 0000000..4e2aa9d
--- /dev/null
+++ b/src/chapter09graphs/BFS.java
@@ -0,0 +1,152 @@
+/*Copyright (c) Dec 21, 2014 CareerMonk Publications and others.
+ * E-Mail           	: info@careermonk.com 
+ * Creation Date    	: 2015-01-10 06:15:46 
+ * Last modification	: 2006-05-31 
+               by		  : Narasimha Karumanchi 
+ * Book Title			    : Data Structures And Algorithms Made In Java
+ * Warranty         	: This software is provided "as is" without any 
+ * 							warranty; without even the implied warranty of 
+ * 							merchantability or fitness for a particular purpose. 
+ * 
+ */
+import java.util.*;
+
+public class Graph {
+    private static final String NEWLINE = System.getProperty("line.separator");
+
+    private final int V;
+    private int E;
+    private boolean[][] adjMatrix;
+    boolean[] visited;
+
+    // empty graph with V vertices
+    public Graph(int V) {
+        if (V < 0) throw new IllegalArgumentException("Too few vertices");
+        this.V = V;
+        this.E = 0;
+        this.adjMatrix = new boolean[V][V];
+        visited = new boolean[V];
+    }
+
+    // random graph with V vertices and E edges
+    public Graph(int V, int E) {
+        this(V);
+        if (E > (long) V*(V-1)/2 + V) throw new IllegalArgumentException("Too many edges");
+        if (E < 0)                    throw new IllegalArgumentException("Too few edges");
+        Random random = new Random();
+
+        // can be inefficient
+        while (this.E != E) {
+            int u = random.nextInt(V);
+            int v = random.nextInt(V);
+            addEdge(u, v);
+        }
+        visited = new boolean[V];
+    }
+
+    // number of vertices and edges
+    public int V() { return V; }
+    public int E() { return E; }
+
+    // add undirected edge u-v
+    public void addEdge(int u, int v) {
+        if (!adjMatrix[u][v]) E++;
+        adjMatrix[u][v] = true;
+        adjMatrix[v][u] = true;
+    }
+
+    // does the graph contain the edge u-v?
+    public boolean contains(int u, int v) {
+        return adjMatrix[u][v];
+    }
+
+    // return list of neighbors of u
+    public Iterable<Integer> adjMatrix(int u) {
+        return new AdjIterator(u);
+    }
+
+    // support iteration over graph vertices
+    private class AdjIterator implements Iterator<Integer>, Iterable<Integer> {
+        private int u;
+        private int v = 0;
+
+        AdjIterator(int u) {
+            this.u = u;
+        }
+
+        public Iterator<Integer> iterator() {
+            return this;
+        }
+
+        public boolean hasNext() {
+            while (v < V) {
+                if (adjMatrix[u][v]) return true;
+                v++;
+            }
+            return false;
+        }
+
+        public Integer next() {
+            if (!hasNext()) {
+                throw new NoSuchElementException();
+            }
+            return v++;
+        }
+
+        public void remove()  {
+            throw new UnsupportedOperationException();
+        }
+    }
+
+    // string representation of Graph - takes quadratic time
+    public String toString() {
+        StringBuilder s = new StringBuilder();
+        s.append("Undirected graph" + NEWLINE);
+        s.append("Vertices:"+ V + " and edges:" + E + NEWLINE);
+        for (int u = 0; u < V; u++) {
+            s.append(u + ": ");
+            for (int v = 0; v < V; v++) {
+                s.append(String.format("%7s", adjMatrix[v][u]) + " ");
+            }
+            s.append(NEWLINE);
+        }
+        return s.toString();
+    }
+
+    void clearVisited(){
+        for (int i = 0; i < visited.length; i++)
+            visited[i] = false;
+    }
+
+    public void BFS(){
+        // BFS uses Queue data structure
+        Queue<Integer> q = new LinkedList<Integer>();
+        clearVisited();
+        q.add(0);            // Start the "to visit" at node 0
+
+        /* ===========================================
+        Loop as long as there are "active" node
+        =========================================== */
+        while( !q.isEmpty() ) {
+            int nextNode;                // Next node to visit
+            int i;
+            nextNode = q.remove();
+            if ( ! visited[nextNode] ) {
+                visited[nextNode] = true;    // Mark node as visited
+                System.out.println("nextNode = " + nextNode );
+
+                for ( i = 0; i < V; i++ )
+                // for ( i = V-1; i >=0 ; i-- )
+                    if ( adjMatrix[nextNode][i] == true  && ! visited[i] )
+                    q.add(i);
+            }
+        }
+    }
+    public static void main(String[] args) {    //test code
+        int V = 5;
+        int E = 7;
+        Graph G = new Graph(V, E);
+        System.out.println(G.toString());
+        G.BFS();
+    }
+}
diff --git a/src/chapter09graphs/DFS.java b/src/chapter09graphs/DFS.java
new file mode 100644
index 0000000..2860bc8
--- /dev/null
+++ b/src/chapter09graphs/DFS.java
@@ -0,0 +1,154 @@
+/*Copyright (c) Dec 21, 2014 CareerMonk Publications and others.
+ * E-Mail           	: info@careermonk.com 
+ * Creation Date    	: 2015-01-10 06:15:46 
+ * Last modification	: 2006-05-31 
+               by		  : Narasimha Karumanchi 
+ * Book Title			    : Data Structures And Algorithms Made In Java
+ * Warranty         	: This software is provided "as is" without any 
+ * 							warranty; without even the implied warranty of 
+ * 							merchantability or fitness for a particular purpose. 
+ * 
+ */
+ import java.util.*;
+
+public class Graph {
+    private static final String NEWLINE = System.getProperty("line.separator");
+
+    private final int V;
+    private int E;
+    private boolean[][] adjMatrix;
+    boolean[] visited;
+
+    // empty graph with V vertices
+    public Graph(int V) {
+        if (V < 0) throw new IllegalArgumentException("Too few vertices");
+        this.V = V;
+        this.E = 0;
+        this.adjMatrix = new boolean[V][V];
+        visited = new boolean[V];
+    }
+
+    // random graph with V vertices and E edges
+    public Graph(int V, int E) {
+        this(V);
+        if (E > (long) V*(V-1)/2 + V) throw new IllegalArgumentException("Too many edges");
+        if (E < 0)                    throw new IllegalArgumentException("Too few edges");
+        Random random = new Random();
+
+        // can be inefficient
+        while (this.E != E) {
+            int u = random.nextInt(V);
+            int v = random.nextInt(V);
+            addEdge(u, v);
+        }
+        visited = new boolean[V];
+    }
+
+    // number of vertices and edges
+    public int V() { return V; }
+    public int E() { return E; }
+
+    // add undirected edge u-v
+    public void addEdge(int u, int v) {
+        if (!adjMatrix[u][v]) E++;
+        adjMatrix[u][v] = true;
+        adjMatrix[v][u] = true;
+    }
+
+    // does the graph contain the edge u-v?
+    public boolean contains(int u, int v) {
+        return adjMatrix[u][v];
+    }
+
+    // return list of neighbors of u
+    public Iterable<Integer> adjMatrix(int u) {
+        return new AdjIterator(u);
+    }
+
+    // support iteration over graph vertices
+    private class AdjIterator implements Iterator<Integer>, Iterable<Integer> {
+        private int u;
+        private int v = 0;
+
+        AdjIterator(int u) {
+            this.u = u;
+        }
+
+        public Iterator<Integer> iterator() {
+            return this;
+        }
+
+        public boolean hasNext() {
+            while (v < V) {
+                if (adjMatrix[u][v]) return true;
+                v++;
+            }
+            return false;
+        }
+
+        public Integer next() {
+            if (!hasNext()) {
+                throw new NoSuchElementException();
+            }
+            return v++;
+        }
+
+        public void remove()  {
+            throw new UnsupportedOperationException();
+        }
+    }
+
+    // string representation of Graph - takes quadratic time
+    public String toString() {
+        StringBuilder s = new StringBuilder();
+        s.append("Undirected graph" + NEWLINE);
+        s.append("Vertices:"+ V + " and edges:" + E + NEWLINE);
+        for (int u = 0; u < V; u++) {
+            s.append(u + ": ");
+            for (int v = 0; v < V; v++) {
+                s.append(String.format("%7s", adjMatrix[v][u]) + " ");
+            }
+            s.append(NEWLINE);
+        }
+        return s.toString();
+    }
+
+    void clearVisited(){
+        for (int i = 0; i < visited.length; i++)
+            visited[i] = false;
+    }
+
+    public void DFS(){
+        // Visit nodes using a Stack to store "to visit" nodes
+        Stack<Integer> s = new Stack<Integer>();  // Create a stack
+        clearVisited();       // Set all visited[i] = 0
+        s.push(0);            // Start the "to visit" at node 0
+
+        /* ===========================================
+        Loop as long as there are "active" node
+        =========================================== */
+        while( !s.isEmpty() ){
+            int nextNode;                // Next node to visit
+            int i;
+
+            nextNode = s.pop();
+
+            if ( ! visited[nextNode] ){
+                visited[nextNode] = true;    // Mark node as visited
+                System.out.println("nextNode = " + nextNode );
+
+                for ( i = 0; i < V; i++ )
+                //for ( i = V-1; i >= 0 ; i-- )
+                    if ( (this.adjMatrix[nextNode][i] == true) && !this.visited[i] )
+                        s.push(i);
+            }
+        }
+    }
+    public static void main(String[] args) {    //test code
+        int V = 5;
+        int E = 7;
+        Graph G = new Graph(V, E);
+        System.out.println(G.toString());
+        G.DFS();
+    }
+}
diff --git a/src/chapter09graphs/GraphAdjacencyList.java b/src/chapter09graphs/GraphAdjacencyList.java
new file mode 100644
index 0000000..6340857
--- /dev/null
+++ b/src/chapter09graphs/GraphAdjacencyList.java
@@ -0,0 +1,177 @@
+/*Copyright (c) Dec 21, 2014 CareerMonk Publications and others.
+ * E-Mail           	: info@careermonk.com 
+ * Creation Date    	: 2015-01-10 06:15:46 
+ * Last modification	: 2006-05-31 
+               by		: Narasimha Karumanchi 
+ * File Name			: CLLNode.java
+ * Book Title			: Data Structures And Algorithms Made In Java
+ * Warranty         	: This software is provided "as is" without any 
+ * 							warranty; without even the implied warranty of 
+ * 							merchantability or fitness for a particular purpose. 
+ * 
+ */
+
+import java.io.*;
+import java.util.*;
+
+class LinkedList<Integer> implements Iterable<Integer> {
+    private ListNode<Integer> head;     // beginning of linked list
+    private int n;                      // number of elements in linked list
+
+    // helper linked list class
+    private static class ListNode<Integer> {
+        private Integer data;
+        private ListNode<Integer> next;
+    }
+
+    public LinkedList() {
+        head = null;
+        n = 0;
+    }
+
+    public boolean isEmpty() {
+        return head == null;
+    }
+
+    public int size() {
+        return n;
+    }
+
+    public void add(Integer data) {
+        ListNode<Integer> oldfirst = head;
+        head = new ListNode<Integer>();
+        head.data = data;
+        head.next = oldfirst;
+        n++;
+    }
+
+    public Iterator<Integer> iterator()  {
+        return new ListIterator(head);
+    }
+
+    // an iterator, doesn't implement remove() since it's optional
+    private class ListIterator implements Iterator<Integer> {
+        private ListNode<Integer> current;
+
+        public ListIterator(ListNode<Integer> head) {
+            current = head;
+        }
+
+        public boolean hasNext()  { return current != null;                     }
+        public void remove()      { throw new UnsupportedOperationException();  }
+
+        public Integer next() {
+            if (!hasNext()) throw new NoSuchElementException();
+            Integer data = current.data;
+            current = current.next;
+            return data;
+        }
+    }
+}
+public class Graph {
+    private static final String NEWLINE = System.getProperty("line.separator");
+
+    private final int V;
+    private int E;
+    private LinkedList<Integer>[] adjList;
+
+    // Initializes an empty graph with V vertices and 0 edges.
+    public Graph(int V) {
+        if (V < 0) throw new IllegalArgumentException("Number of vertices must be nonnegative");
+        this.V = V;
+        this.E = 0;
+        adjList = (LinkedList<Integer>[]) new LinkedList[V];
+        for (int u = 0; u < V; u++) {
+            adjList[u] = new LinkedList<Integer>();
+        }
+    }
+
+    // random graph with V vertices and E edges
+    public Graph(int V, int E) {
+        this(V);
+        if (E > (long) V*(V-1)/2 + V) throw new IllegalArgumentException("Too many edges");
+        if (E < 0)                    throw new IllegalArgumentException("Too few edges");
+        Random random = new Random();
+
+        // can be inefficient
+        while (this.E != E) {
+            int u = random.nextInt(V);
+            int v = random.nextInt(V);
+            addEdge(u, v);
+        }
+    }
+
+
+    // Initializes a new graph.
+    public Graph(Graph G) {
+        this(G.V());
+        this.E = G.E();
+        for (int u = 0; u < G.V(); u++) {
+            // reverse so that adjacency list is in same order as original
+            Stack<Integer> reverse = new Stack<Integer>();
+            for (int v : G.adjList[u]) {
+                reverse.push(v);
+            }
+            for (int v : reverse) {
+                adjList[u].add(v);
+            }
+        }
+    }
+
+    // Returns the number of vertices in this graph.
+    public int V() {
+        return V;
+    }
+
+    // Returns the number of edges in this graph.
+    public int E() {
+        return E;
+    }
+
+    // throw an IllegalArgumentException unless {@code 0 <= u < V}
+    private void validateVertex(int u) {
+        if (u < 0 || u >= V)
+            throw new IllegalArgumentException("vertex " + u + " is not between 0 and " + (V-1));
+    }
+
+    public void addEdge(int u, int v) {
+        validateVertex(u);
+        validateVertex(v);
+        E++;
+        adjList[u].add(v);
+        adjList[v].add(u);
+    }
+
+    // Returns the vertices adjacent to vertex {@code u}.
+    public Iterable<Integer> adjList(int u) {
+        validateVertex(u);
+        return adjList[u];
+    }
+
+    public int degree(int u) {
+        validateVertex(u);
+        return adjList[u].size();
+    }
+
+    // Returns a string representation of this graph.
+    public String toString() {
+        StringBuilder s = new StringBuilder();
+        s.append("Undirected graph" + NEWLINE);
+        s.append(V + " vertices, " + E + " edges " + NEWLINE);
+        for (int u = 0; u < V; u++) {
+            s.append(u + ": ");
+            for (int v : adjList[u]) {
+                s.append(v + " ");
+            }
+            s.append(NEWLINE);
+        }
+        return s.toString();
+    }
+
+    // test code
+    public static void main(String[] args) {
+        Graph G = new Graph(5, 7);
+        System.out.println(G.toString());
+    }
+
+}
diff --git a/src/chapter09graphs/GraphAdjacencyMatrix.java b/src/chapter09graphs/GraphAdjacencyMatrix.java
index 1f03480..6e70fc9 100644
--- a/src/chapter09graphs/GraphAdjacencyMatrix.java
+++ b/src/chapter09graphs/GraphAdjacencyMatrix.java
@@ -1 +1,126 @@
+/*Copyright (c) Dec 21, 2014 CareerMonk Publications and others.
+ * E-Mail           	: info@careermonk.com 
+ * Creation Date    	: 2015-01-10 06:15:46 
+ * Last modification	: 2006-05-31 
+               by		: Narasimha Karumanchi 
+ * File Name			: CLLNode.java
+ * Book Title			: Data Structures And Algorithms Made In Java
+ * Warranty         	: This software is provided "as is" without any 
+ * 							warranty; without even the implied warranty of 
+ * 							merchantability or fitness for a particular purpose. 
+ * 
+ */
+
 package chapter09graphs;
+import java.util.Iterator;
+import java.util.Random;
+import java.util.NoSuchElementException;
+
+public class Graph {
+    private static final String NEWLINE = System.getProperty("line.separator");
+
+    private final int V;
+    private int E;
+    private boolean[][] adjMatrix;
+
+    // empty graph with V vertices
+    public Graph(int V) {
+        if (V < 0) throw new IllegalArgumentException("Too few vertices");
+        this.V = V;
+        this.E = 0;
+        this.adjMatrix = new boolean[V][V];
+    }
+
+    // random graph with V vertices and E edges
+    public Graph(int V, int E) {
+        this(V);
+        if (E > (long) V*(V-1)/2 + V) throw new IllegalArgumentException("Too many edges");
+        if (E < 0)                    throw new IllegalArgumentException("Too few edges");
+        Random random = new Random();
+
+        // can be inefficient
+        while (this.E != E) {
+            int u = random.nextInt(V);
+            int v = random.nextInt(V);
+            addEdge(u, v);
+        }
+    }
+
+    // number of vertices and edges
+    public int V() { return V; }
+    public int E() { return E; }
+
+    // add undirected edge u-v
+    public void addEdge(int u, int v) {
+        if (!adjMatrix[u][v]) E++;
+        adjMatrix[u][v] = true;
+        adjMatrix[v][u] = true;
+    }
+
+    // does the graph contain the edge u-v?
+    public boolean contains(int u, int v) {
+        return adjMatrix[u][v];
+    }
+
+    // return list of neighbors of u
+    public Iterable<Integer> adjMatrix(int u) {
+        return new AdjIterator(u);
+    }
+
+    // support iteration over graph vertices
+    private class AdjIterator implements Iterator<Integer>, Iterable<Integer> {
+        private int u;
+        private int v = 0;
+
+        AdjIterator(int u) {
+            this.u = u;
+        }
+
+        public Iterator<Integer> iterator() {
+            return this;
+        }
+
+        public boolean hasNext() {
+            while (v < V) {
+                if (adjMatrix[u][v]) return true;
+                v++;
+            }
+            return false;
+        }
+
+        public Integer next() {
+            if (!hasNext()) {
+                throw new NoSuchElementException();
+            }
+            return v++;
+        }
+
+        public void remove()  {
+            throw new UnsupportedOperationException();
+        }
+    }
+
+    // string representation of Graph - takes quadratic time
+    public String toString() {
+        StringBuilder s = new StringBuilder();
+        s.append("Undirected graph" + NEWLINE);
+        s.append("Vertices:"+ V + " and edges:" + E + NEWLINE);
+        for (int u = 0; u < V; u++) {
+            s.append(u + ": ");
+            for (int v = 0; v < V; v++) {
+                s.append(String.format("%7s", adjMatrix[v][u]) + " ");
+            }
+            s.append(NEWLINE);
+        }
+        return s.toString();
+    }
+
+    // test code
+    public static void main(String[] args) {
+        int V = 5;
+        int E = 7;
+        Graph G = new Graph(V, E);
+        System.out.println(G.toString());
+    }
+
+}
diff --git a/src/chapter10sorting/ConvertArraytoSawToothWaveLinearTime.java b/src/chapter10sorting/ConvertArraytoSawToothWaveLinearTime.java
index 34379e7..d2c513c 100644
--- a/src/chapter10sorting/ConvertArraytoSawToothWaveLinearTime.java
+++ b/src/chapter10sorting/ConvertArraytoSawToothWaveLinearTime.java
@@ -14,8 +14,6 @@
 
 package chapter10sorting;
 
-import java.util.Arrays;
-
 public class ConvertArraytoSawToothWaveLinearTime {
     public void convertArraytoSawToothWaveLinearTime(int A[]){
         // Traverse all even elements
diff --git a/src/chapter10sorting/CountingSort.java b/src/chapter10sorting/CountingSort.java
new file mode 100644
index 0000000..b55c4b0
--- /dev/null
+++ b/src/chapter10sorting/CountingSort.java
@@ -0,0 +1,59 @@
+/*Copyright (c) Dec 21, 2014 CareerMonk Publications and others.
+ * E-Mail           	: info@careermonk.com 
+ * Creation Date    	: 2015-01-10 06:15:46 
+ * Last modification	: 2006-05-31 
+               by		: Narasimha Karumanchi 
+ * Book Title			: Data Structures And Algorithms Made In Java
+ * Warranty         	: This software is provided "as is" without any 
+ * 							warranty; without even the implied warranty of 
+ * 							merchantability or fitness for a particular purpose. 
+ * 
+ */
+ 
+ import java.util.*;
+import java.lang.*;
+import java.io.*;
+public class CountingSorter{
+    public static int[] CountingSort (int[] A, int K) {
+        int i, j, n = A.length; 
+        int[] C = new int[K+1];
+        int[] B = new int[n+1];
+        // Complexity: O(K) 
+        for (i =0 ; i <= K; i++) 
+            C[i] = 0; 
+            
+        // Complexity: O(n) 
+        for (j = 0 ; j < n; j++) 
+            C[A[j]] = C[A[j]] + 1;
+        // C[i] now contains the number of elements equal to i 
+
+        // Complexity: O(K) 
+        for (i =1 ; i <= K; i++) 
+            C[i] = C[i] + C[i-1];
+        // C[i] now contains the number of elements ≤ i 
+        
+        // Complexity: O(n) 
+        for (j = n-1; j>=0; j--) { 
+			B[C[A[j]]] = A[j]; 
+            C[A[j]] = C[A[j]] - 1; 
+        }
+        return B;
+    }
+    public static void main(String[] args) {
+
+      System.out.println("Counting sort in Java");
+      int[] A = { 6, 4, 3, 2, 1, 4, 3, 6, 6, 2, 4, 3, 4 };
+      int K = 6;
+      int[] B = new int[A.length + 1];
+
+      System.out.println("Input Array:");
+      System.out.println(Arrays.toString(A));
+
+      // sorting array using Counting Sort Algorithm
+      B = CountingSort(A, K);
+
+      System.out.println("Sorted array");
+      System.out.println(Arrays.toString(B));
+
+    }
+}
diff --git a/src/chapter10sorting/SortedSquaredArray.java b/src/chapter10sorting/SortedSquaredArray.java
new file mode 100644
index 0000000..daf3c32
--- /dev/null
+++ b/src/chapter10sorting/SortedSquaredArray.java
@@ -0,0 +1,26 @@
+/*Copyright (c) Jul 2, 2015 CareerMonk Publications and others.
+ * E-Mail           	: info@careermonk.com 
+ * Creation Date    	: 2015-01-10 06:15:46 
+ * Last modification	: 2006-05-31 
+               by		: Narasimha Karumanchi 
+ * File Name			: ConvertArraytoSawToothWave.java
+ * Book Title			: Data Structures And Algorithms Made In Java
+ * Warranty         	: This software is provided "as is" without any 
+ * 							warranty; without even the implied warranty of 
+ * 							merchantability or fitness for a particular purpose. 
+ * 
+ */
+ 
+ package chapter10sorting;
+ 
+class SortedSquaredArray {
+  public int[] sortedSquaredArray(int[] A) {
+      int n = A.length;
+      int[] result = new int[n];
+      for (int i = 0; i < n; ++i)
+          result[i] = A[i] * A[i];
+
+      Arrays.sort(result);
+      return result;
+  }
+}
diff --git a/src/chapter10sorting/SortedSquaredArray2.java b/src/chapter10sorting/SortedSquaredArray2.java
new file mode 100644
index 0000000..cc38413
--- /dev/null
+++ b/src/chapter10sorting/SortedSquaredArray2.java
@@ -0,0 +1,52 @@
+/*Copyright (c) Jul 2, 2015 CareerMonk Publications and others.
+ * E-Mail           	: info@careermonk.com 
+ * Creation Date    	: 2015-01-10 06:15:46 
+ * Last modification	: 2006-05-31 
+               by		: Narasimha Karumanchi 
+ * File Name			: ConvertArraytoSawToothWave.java
+ * Book Title			: Data Structures And Algorithms Made In Java
+ * Warranty         	: This software is provided "as is" without any 
+ * 							warranty; without even the implied warranty of 
+ * 							merchantability or fitness for a particular purpose. 
+ * 
+ */
+ 
+package chapter10sorting;
+ 
+class SortedSquaredArray {
+  public int[] sortedSquaredArray(int[] A) {
+      int n = A.length;
+      int j = 0;
+      // Find the last index of the negative numbers
+      while (j < n && A[j] < 0)
+          j++;
+      // i points to the last index of negative numbers
+      int i = j-1;
+
+      int[] result = new int[n];
+      int t = 0;
+      // j points to the first index of the positive numbers
+      while (i >= 0 && j < n) {
+          if (A[i] * A[i] < A[j] * A[j]) {
+              result[t++] = A[i] * A[i];
+              i--;
+          } else {
+              result[t++] = A[j] * A[j];
+              j++;
+          }
+      }
+      // add the remaining negative numbers squares to result
+      while (i >= 0) {
+          result[t++] = A[i] * A[i];
+          i--;
+      }
+
+      // add the remaining positive numbers squares to result
+      while (j < n) {
+          result[t++] = A[j] * A[j];
+          j++;
+      }
+
+      return result;
+  }
+}
diff --git a/src/chapter11searching/InterpolationSearch.java b/src/chapter11searching/InterpolationSearch.java
new file mode 100644
index 0000000..799740c
--- /dev/null
+++ b/src/chapter11searching/InterpolationSearch.java
@@ -0,0 +1,53 @@
+/*Copyright (c) Dec 12, 2015 CareerMonk Publications and others.
+ * E-Mail           	: info@careermonk.com 
+ * Creation Date    	: 2015-01-10 06:15:46 
+ * Last modification	: 2006-05-31 
+               by		: Narasimha Karumanchi 
+ * File Name			: InterpolationSearch.java
+ * Book Title			: Data Structures And Algorithms Made In Java
+ * Warranty         	: This software is provided "as is" without any 
+ * 							warranty; without even the implied warranty of 
+ * 							merchantability or fitness for a particular purpose. 
+ * 
+ */
+
+
+package chapter11searching;
+
+public class InterpolationSearch {
+    public static int interpolationSearch(int[] A, int data){
+        int low = 0, high = A.length - 1, mid;
+        while (A[low] <= data && A[high] >= data){
+            if (A[high] - A[low] == 0)
+                return (low + high)/2;
+            /** out of range is possible  here **/
+             mid = low + ((data - A[low]) * (high - low)) / (A[high] - A[low]);  
+ 
+             if (A[mid] < data)
+                 low = mid + 1;
+             else if (A[mid] > data)
+                 high = mid - 1;
+             else
+                 return mid;
+        }
+        if (A[low] == data)
+            return low;
+           /** not found **/
+        else
+            return -1; 
+    }      
+    public static void main(String args[]){
+        int A[] = {-30,-16,-9,3,10,11,18,22,54,84,105};
+        for(int i=0; i < A.length; i++){
+            System.out.print(A[i] + " ");
+        }
+        System.out.println();
+        int data = -9;
+        int result = InterpolationSearch.interpolationSearch(A, data);
+        
+        if (result == -1)
+            System.out.println("\n"+ data +" element not found");
+        else
+            System.out.println("\n"+ data +" elemnt found at position "+ result);
+    }
+}
diff --git a/src/chapter18divideandconquer/All_PeakFinder_1D_Linear_Search.java b/src/chapter18divideandconquer/All_PeakFinder_1D_Linear_Search.java
new file mode 100644
index 0000000..9870910
--- /dev/null
+++ b/src/chapter18divideandconquer/All_PeakFinder_1D_Linear_Search.java
@@ -0,0 +1,30 @@
+package chapter18divideandconquer;
+
+public class All_PeakFinder_1D_Linear_Search{
+
+  public static void findPeak(int[] A) {
+
+    if (A == null || A.length == 0) {
+      return;
+    }
+    int n = A.length;
+
+    for (int i = 0; i < n; i++){
+      int left = 0, right = 0;
+      if (i > 0){
+        left = A[i - 1];
+      }
+      if (i < A.length - 1){
+        right = A[i + 1];
+      }
+      if (left <= A[i] && A[i] >= right){
+        System.out.println(A[i] + "");
+      }
+  	}
+  }
+
+public static void main(String[] args) {
+    int[] A = { 35, 5, 20, 2, 40, 25, 80, 25, 15, 40 };
+    findPeak(A);
+  }
+}
diff --git a/src/chapter18divideandconquer/Highest_PeakFinder_1D_Linear_Search.java b/src/chapter18divideandconquer/Highest_PeakFinder_1D_Linear_Search.java
new file mode 100644
index 0000000..986f9a2
--- /dev/null
+++ b/src/chapter18divideandconquer/Highest_PeakFinder_1D_Linear_Search.java
@@ -0,0 +1,29 @@
+package chapter18divideandconquer;
+
+public class Highest_PeakFinder_1D_Linear_Search{
+
+  public static Integer findPeak(int[] A) {
+
+    if (A == null || A.length == 0) {
+      return null;
+    }
+
+    int n = A.length;
+    int peak = A[0];
+    for (int i = 1; i < n-1; i++){
+      if (A[i - 1] <= A[i] && A[i] >= A[i + 1]){
+        peak = A[i];
+      }
+  	}
+    if (peak < A[A.length-1]){
+      peak = A[A.length-1];
+    }
+    return peak;
+  }
+
+public static void main(String[] args) {
+    int[] A = { 35, 5, 20, 2, 40, 25, 80, 25, 15, 40 };
+    Integer peak = findPeak(A);
+    System.out.println(peak != null ? "Peak Element is "  + peak : "No peak element!" );
+  }
+}
diff --git a/src/chapter18divideandconquer/PeakFinder_1D_Binary_Search.java b/src/chapter18divideandconquer/PeakFinder_1D_Binary_Search.java
new file mode 100644
index 0000000..cfb1f7d
--- /dev/null
+++ b/src/chapter18divideandconquer/PeakFinder_1D_Binary_Search.java
@@ -0,0 +1,36 @@
+package chapter18divideandconquer;
+public class PeakFinder_1D_Binary_Search{
+
+  public static Integer findPeak(int[] A) {
+    if (A == null || A.length == 0) {
+      return null;
+    }
+
+    int left = 0, right = A.length - 1, mid;
+    while (left + 1 < right){
+      mid = left + (right - left) / 2;
+      if (A[mid] < A[mid - 1]){
+        right = mid;
+      }
+      else if (A[mid] < A[mid + 1]){
+        left = mid;
+      }
+      else{
+        return mid;
+      }
+    }
+    if (A[left] > A[right]){
+      mid = left;
+    }
+    else{
+      mid = right;
+    }
+    return mid;
+  }
+
+public static void main(String[] args) {
+  int[] A = { 35, 5, 20, 2, 40, 25, 80, 25, 15, 40 };
+  Integer peak = findPeak(A);
+  System.out.println(peak != null ? "Peak Element is "  + A[peak] : "No peak element!" );
+  }
+}
diff --git a/src/chapter18divideandconquer/PeakFinder_1D_Linear_Search.java b/src/chapter18divideandconquer/PeakFinder_1D_Linear_Search.java
new file mode 100644
index 0000000..b965f31
--- /dev/null
+++ b/src/chapter18divideandconquer/PeakFinder_1D_Linear_Search.java
@@ -0,0 +1,30 @@
+package chapter18divideandconquer;
+
+public class PeakFinder_1D_Linear_Search{
+
+  public static Integer findPeak(int[] A) {
+
+    if (A == null || A.length == 0) {
+      return null;
+    }
+
+    int n = A.length;
+    int peak = A[0];
+    for (int i = 1; i < n; i++){
+      if (A[i - 1] <= A[i] && A[i] >= A[i + 1]){
+        peak = A[i];
+        return peak;
+      }
+  	}
+    if (peak < A[A.length-1]){
+      peak = A[A.length-1];
+    }
+    return null;
+  }
+
+public static void main(String[] args) {
+    int[] A = { 35, 5, 20, 2, 40, 25, 80, 25, 15, 40 };
+    Integer peak = findPeak(A);
+    System.out.println(peak != null ? "Peak Element is "  + peak : "No peak element!" );
+  }
+}
diff --git a/src/chapter18divideandconquer/SkyLineBruteForce.java b/src/chapter18divideandconquer/SkyLineBruteForce.java
new file mode 100644
index 0000000..04b9f37
--- /dev/null
+++ b/src/chapter18divideandconquer/SkyLineBruteForce.java
@@ -0,0 +1,43 @@
+/*Copyright (c) Feb 22, 2016 CareerMonk Publications and others.
+ * E-Mail           	: info@careermonk.com 
+ * Creation Date    	: 2015-01-10 06:15:46 
+ * Last modification	: 2006-05-31 
+               by		: Narasimha Karumanchi 
+ * File Name			: SkyLineBruteForce.java
+ * Book Title			: Data Structures And Algorithms Made In Java
+ * Warranty         	: This software is provided "as is" without any 
+ * 							warranty; without even the implied warranty of 
+ * 							merchantability or fitness for a particular purpose. 
+ * 
+ */
+
+
+package chapter18divideandconquer;
+
+import java.util.Scanner;
+
+public class SkyLineBruteForce {
+    public static void main(String[] args) {
+        int[] auxHeights = new int[1000];
+        int rightMostBuildingRi = 0;
+		@SuppressWarnings("resource")
+		Scanner in = new Scanner(System.in);
+        while (in.hasNext()) {
+            int left = in.nextInt(), h = in.nextInt(), right = in.nextInt();
+            for (int i = left; i < right; i++)
+                auxHeights[i] = Math.max(h, auxHeights[i]);
+            if(rightMostBuildingRi<right)
+            	rightMostBuildingRi=right;	
+        }
+        int prev=0, left=-1, right = -1;
+        for (int i = 0; i < rightMostBuildingRi; i++) {
+            if (prev != auxHeights[i]) {
+                if(left > 0) System.out.print(left +" "+ right + " ");
+                prev = auxHeights[i];
+                left =i;
+                right =prev;
+            }
+        }
+        System.out.println(left +" "+ right );
+    }
+}
\ No newline at end of file
diff --git a/src/chapter18divideandconquer/SkylinesDivideandConquer.java b/src/chapter18divideandconquer/SkylinesDivideandConquer.java
new file mode 100644
index 0000000..2ff938c
--- /dev/null
+++ b/src/chapter18divideandconquer/SkylinesDivideandConquer.java
@@ -0,0 +1,93 @@
+/*Copyright (c) Feb 22, 2016 CareerMonk Publications and others.
+ * E-Mail           	: info@careermonk.com 
+ * Creation Date    	: 2015-01-10 06:15:46 
+ * Last modification	: 2006-05-31 
+               by		: Narasimha Karumanchi 
+ * File Name			: SkylinesDivideandConquer.java
+ * Book Title			: Data Structures And Algorithms Made In Java
+ * Warranty         	: This software is provided "as is" without any 
+ * 							warranty; without even the implied warranty of 
+ * 							merchantability or fitness for a particular purpose. 
+ * 
+ */
+
+
+package chapter18divideandconquer;
+class Building{
+	int left, right, h;
+	public Building(int x1, int h1, int x2) { left = x1; h = h1; right = x2; }
+}
+class strip{
+    int left, h;
+    strip(int x1, int h1) { left = x1; h = h1; }
+ }
+class Skyline{
+	 strip[] strips;
+	 public int Count;
+	 int StartLoc;
+	 public Skyline(int n) { 
+        Count = 0; StartLoc = 0; strips = new strip[n]; 
+	 }
+	 public void Append(strip str) { 
+        strips[StartLoc+Count] = str; Count++; 
+	 }
+	 public strip Head() { 
+        return strips[StartLoc]; 
+	 }
+	 public strip RemoveHead(){
+        strip str = strips[StartLoc];
+        Count--; StartLoc++;
+        return str;
+	 }
+	 public String ToString(){
+		 String str = "";
+         for(int i = StartLoc; i < StartLoc+Count; i++){
+           if (i > StartLoc) 
+               str = str + ",";
+           str = str + strips[i].left + "," + strips[i].h;
+         }
+         return "(" + str + ")";
+	 }
+   }
+public class SkylinesDivideandConquer {
+    static Skyline GetSkyline(Building[] buildings, int start, int end){ 
+		if (start == end){
+            Skyline skl = new Skyline(2);
+            skl.Append(new strip(buildings[start].left, buildings[start].h) );
+            skl.Append(new strip(buildings[start].right, 0));
+            return skl;
+		 }
+		 int mid = (start+end)/2;
+		 Skyline sk1 = GetSkyline(buildings, start, mid);
+		 Skyline sk2 = GetSkyline(buildings, mid+1, end);
+		 return MergeSkylines(sk1, sk2);
+	    }
+    static Skyline MergeSkylines(Skyline SK1, Skyline SK2){
+		 Skyline newSkl = new Skyline(SK1.Count + SK2.Count); // Allocate array space
+		 int currentHeight1 = 0; int currentHeight2 = 0;
+		 while ((SK1.Count > 0) && (SK2.Count > 0))
+		     if (SK1.Head().left < SK2.Head().left){
+                int CurX = SK1.Head().left;
+                currentHeight1 = SK1.Head().h;
+                int MaxH = currentHeight1;
+                if (currentHeight2 > MaxH) MaxH = currentHeight2;
+                    newSkl.Append(new strip(CurX, MaxH));
+                SK1.RemoveHead();
+		     }
+		     else{
+                int CurX = SK2.Head().left;
+                currentHeight2 = SK2.Head().h;
+                int MaxH = currentHeight1;
+                if (currentHeight2 > MaxH) MaxH = currentHeight2;
+                    newSkl.Append(new strip(CurX, MaxH));
+                SK2.RemoveHead();
+		     }
+		 while (SK1.Count > 0){
+	            strip str = SK1.RemoveHead(); newSkl.Append(str); 
+		 }
+		 while (SK2.Count > 0){
+	            strip str = SK2.RemoveHead(); newSkl.Append(str); 
+		 }
+		 return newSkl;
+    } 
+}
diff --git a/src/chapter21miscconcepts/CountNumberofSetbitsin1toN.java b/src/chapter21miscconcepts/CountNumberofSetbitsin1toN.java
new file mode 100644
index 0000000..33db04d
--- /dev/null
+++ b/src/chapter21miscconcepts/CountNumberofSetbitsin1toN.java
@@ -0,0 +1,29 @@
+/*Copyright (c) Dec 22, 2014 CareerMonk Publications and others.
+ * E-Mail           	: info@careermonk.com 
+ * Creation Date    	: 2015-01-10 06:15:46 
+ * Last modification	: 2006-05-31 
+               by		: Narasimha Karumanchi 
+ * File Name			: CheckEndian.java
+ * Book Title			: Data Structures And Algorithms Made In Java
+ * Warranty         	: This software is provided "as is" without any 
+ * 							warranty; without even the implied warranty of 
+ * 							merchantability or fitness for a particular purpose. 
+ * 
+ */
+
+
+package chapter21miscconcepts;
+
+public class CountNumberofSetbitsin1toN {
+	public int countNumberofSetbitsin1toN(int n) {
+		long i = 0, j, count = 0; 
+		for (i = 1; i<=n; i++){
+			j = i;
+			while(j>0) {
+			     count++;
+			     j = j & (j - 1); 
+			}
+		}
+		return count;		
+	}
+}
\ No newline at end of file
diff --git a/src/chapter21miscconcepts/RegexDemo.java b/src/chapter21miscconcepts/RegexDemo.java
new file mode 100644
index 0000000..e55609d
--- /dev/null
+++ b/src/chapter21miscconcepts/RegexDemo.java
@@ -0,0 +1,30 @@
+package chapter21miscconcepts;
+import java.util.regex.*;
+
+class RegexDemo{
+	public static void main (String[] args) throws java.lang.Exception{
+		//matches numbers only
+		String regexStr = "^[0-9]*$";
+		System.out.println(Pattern.matches(regexStr,"97845613000"));
+		System.out.println(Pattern.matches(regexStr,"19432"));
+		System.out.println(Pattern.matches(regexStr,"519Ah"));
+
+		//matches 10-digit numbers only
+		regexStr = "^[0-9]{10}$";
+		System.out.println(Pattern.matches(regexStr,"6576767"));
+		System.out.println(Pattern.matches(regexStr,"9784561300"));
+		System.out.println(Pattern.matches(regexStr,"F784561300"));
+
+		//matches numbers and dashes, any order really.
+		regexStr = "^[0-9\\-]*$";
+		System.out.println(Pattern.matches(regexStr,"97-8456-13-0-0"));
+		System.out.println(Pattern.matches(regexStr,"9-7-8-4-5-6-1-3-0-0"));
+
+		//matches 9999999999, 1-999-999-9999 and 999-999-9999
+		regexStr = "^(1\\-)?[0-9]{3}\\-?[0-9]{3}\\-?[0-9]{4}$";
+		System.out.println(Pattern.matches(regexStr,"9784561300"));
+		System.out.println(Pattern.matches(regexStr,"9-784561300"));
+		System.out.println(Pattern.matches(regexStr,"978-456-1300"));
+		System.out.println(Pattern.matches(regexStr,"97-8456-13-0-0"));
+	}
+}
diff --git a/src/chapter21miscconcepts/RomanToDecimal.java b/src/chapter21miscconcepts/RomanToDecimal.java
new file mode 100644
index 0000000..4e7ea06
--- /dev/null
+++ b/src/chapter21miscconcepts/RomanToDecimal.java
@@ -0,0 +1,110 @@
+/*Copyright (c) Jan 10, 2016 CareerMonk Publications and others.
+ * E-Mail           	: info@careermonk.com 
+ * Creation Date    	: 2015-01-10 06:15:46 
+ * Last modification	: 2006-05-31 
+               by		: Narasimha Karumanchi 
+ * File Name			: RomanToDecimal.java
+ * Book Title			: Data Structures And Algorithms Made In Java
+ * Warranty         	: This software is provided "as is" without any 
+ * 							warranty; without even the implied warranty of 
+ * 							merchantability or fitness for a particular purpose. 
+ * 
+ */
+
+
+package chapter21miscconcepts;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RomanToDecimal {
+	public static int romanToDecimal(java.lang.String romanNumber) {
+	    int decimal = 0;
+	    int lastNumber = 0;
+	    if(romanNumber.isEmpty())
+	    	return 0;
+	    String romanNumeral = romanNumber.toUpperCase();
+
+        /* operation to be performed on upper cases even if user enters Roman values in lower case chars */
+	    for (int x = romanNumeral.length() - 1; x >= 0 ; x--) {
+	        char convertToDecimal = romanNumeral.charAt(x);
+	
+	        switch (convertToDecimal) {
+	            case 'M':
+	                decimal = processDecimal(1000, lastNumber, decimal);
+	                lastNumber = 1000;
+	                break;
+	
+	            case 'D':
+	                decimal = processDecimal(500, lastNumber, decimal);
+	                lastNumber = 500;
+	                break;
+	
+	            case 'C':
+	                decimal = processDecimal(100, lastNumber, decimal);
+	                lastNumber = 100;
+	                break;
+	
+	            case 'L':
+	                decimal = processDecimal(50, lastNumber, decimal);
+	                lastNumber = 50;
+	                break;
+	
+	            case 'X':
+	                decimal = processDecimal(10, lastNumber, decimal);
+	                lastNumber = 10;
+	                break;
+	
+	            case 'V':
+	                decimal = processDecimal(5, lastNumber, decimal);
+	                lastNumber = 5;
+	                break;
+	
+	            case 'I':
+	                decimal = processDecimal(1, lastNumber, decimal);
+	                lastNumber = 1;
+	                break;
+	                
+	            default: 
+	            	return -1;
+	                
+	        }
+	    }
+	    
+	    return decimal;
+	}
+
+	public static int processDecimal(int decimal, int lastNumber, int lastDecimal) {
+	    if (lastNumber > decimal) {
+	        return lastDecimal - decimal;
+	    } else {
+	        return lastDecimal + decimal;
+	    }
+	}
+	
+	public static void main(java.lang.String args[]) {
+		List<String> romanList = new ArrayList<String>();
+		romanList.add("");
+		romanList.add("MMDCDXLIV");
+		romanList.add("MMLVII");
+		romanList.add("100");
+		romanList.add("MMDCDXLV");
+		romanList.add("VIV");
+		romanList.add("MIX");
+		romanList.add("LID");
+		romanList.add("DIX");
+		romanList.add("LICX");
+		romanList.add("CLIX");
+		romanList.add("MMDLIV");
+		romanList.add("MMXDLIV");
+		romanList.add("MCMXCX");
+		romanList.add("CCCXCIX5");
+		for (int i=0; i<romanList.size();i++){
+			int decimalValue = romanToDecimal(romanList.get(i));
+			if (decimalValue == -1)
+				System.out.println("Not a valid Roman Number.");
+			else
+				System.out.println(decimalValue);
+		}
+	}
+ }
\ No newline at end of file
diff --git a/src/chapter21miscconcepts/SquareMatrixRotationByKElementsTest.java b/src/chapter21miscconcepts/SquareMatrixRotationByKElementsTest.java
new file mode 100644
index 0000000..a17b64e
--- /dev/null
+++ b/src/chapter21miscconcepts/SquareMatrixRotationByKElementsTest.java
@@ -0,0 +1,44 @@
+/*Copyright (c) Dec 22, 2014 CareerMonk Publications and others.
+ * E-Mail           	: info@careermonk.com 
+ * Creation Date    	: 2015-01-10 06:15:46 
+ * Last modification	: 2006-05-31 
+               by		: Narasimha Karumanchi 
+ * File Name			: AddOneToNumber.java
+ * Book Title			: Data Structures And Algorithms Made In Java
+ * Warranty         	: This software is provided "as is" without any 
+ * 							warranty; without even the implied warranty of 
+ * 							merchantability or fitness for a particular purpose. 
+ * 
+ */
+
+package chapter21miscconcepts;
+public class SquareMatrixRotationByKElementsTest {
+	public static void main(String[] args) {
+		SquareMatrixRotationByOneElement testIntance = new SquareMatrixRotationByOneElement();
+		int[][] input = new int[3][3];
+	    input[0] = new int[]{1,2,3};
+	    input[1] = new int[]{4,5,6};
+	    input[2] = new int[]{7,8,9};
+	    int n = input.length;
+	    System.out.println("Input:");
+	    for(int i = 0 ; i < n; i++) {
+            for(int j = 0 ; j < n; j++) {
+            	System.out.print(input[i][j] + "  ");
+            	
+            }
+            System.out.println("  ");
+	    }
+	    int k = 2;
+	    for(int i = 0 ; i < k; i++) {
+	    	input = testIntance.rotateByOneElementClockwise(input);
+	    }
+	    System.out.println("Output:");
+	    for(int i = 0 ; i < n; i++) {
+            for(int j = 0 ; j < n; j++) {
+            	System.out.print(input[i][j] + "  ");
+            	
+            }
+            System.out.println("  ");
+	    }
+	}
+}
\ No newline at end of file
diff --git a/src/chapter21miscconcepts/SquareMatrixRotationByOneElement.java b/src/chapter21miscconcepts/SquareMatrixRotationByOneElement.java
new file mode 100644
index 0000000..eaf27e7
--- /dev/null
+++ b/src/chapter21miscconcepts/SquareMatrixRotationByOneElement.java
@@ -0,0 +1,43 @@
+/*Copyright (c) Dec 22, 2014 CareerMonk Publications and others.
+ * E-Mail           	: info@careermonk.com 
+ * Creation Date    	: 2015-01-10 06:15:46 
+ * Last modification	: 2006-05-31 
+               by		: Narasimha Karumanchi 
+ * File Name			: AddOneToNumber.java
+ * Book Title			: Data Structures And Algorithms Made In Java
+ * Warranty         	: This software is provided "as is" without any 
+ * 							warranty; without even the implied warranty of 
+ * 							merchantability or fitness for a particular purpose. 
+ * 
+ */
+
+
+package chapter21miscconcepts;
+
+public class SquareMatrixRotationByOneElement {
+	int[][] rotateByOneElementClockwise(int[][] matrix) {
+
+        final int n = matrix.length;
+        int[][] roataedMatrix = new int[n][n];
+        for(int i = 0 ; i < n; i++) {
+            for(int j = 0 ; j < n; j++) {
+                if(i+j<n-1 && i<=j) {
+                    // move right
+                    roataedMatrix[i][j+1] = matrix[i][j];
+                } else if(i+j>n-1 && i>=j) {
+                    // move left
+                    roataedMatrix[i][j-1] = matrix[i][j];
+                } else if(i+j<=n-1 && i>j){
+                    // move up
+                    roataedMatrix[i-1][j] = matrix[i][j];
+                } else if(i+j>=n-1 && i<j) {
+                    // move down
+                    roataedMatrix[i+1][j] = matrix[i][j];
+                } else {
+                    roataedMatrix[i][j] = matrix[i][j];
+                }
+            }
+        }
+        return roataedMatrix;
+    }
+}
\ No newline at end of file
diff --git a/src/chapter21miscconcepts/SquareMatrixRotationByOneElementTest.java b/src/chapter21miscconcepts/SquareMatrixRotationByOneElementTest.java
new file mode 100644
index 0000000..f5030bb
--- /dev/null
+++ b/src/chapter21miscconcepts/SquareMatrixRotationByOneElementTest.java
@@ -0,0 +1,42 @@
+/*Copyright (c) Dec 22, 2014 CareerMonk Publications and others.
+ * E-Mail           	: info@careermonk.com 
+ * Creation Date    	: 2015-01-10 06:15:46 
+ * Last modification	: 2006-05-31 
+               by		: Narasimha Karumanchi 
+ * File Name			: AddOneToNumber.java
+ * Book Title			: Data Structures And Algorithms Made In Java
+ * Warranty         	: This software is provided "as is" without any 
+ * 							warranty; without even the implied warranty of 
+ * 							merchantability or fitness for a particular purpose. 
+ * 
+ */
+
+
+package chapter21miscconcepts;
+public class SquareMatrixRotationByOneElementTest {
+	public static void main(String[] args) {
+		SquareMatrixRotationByOneElement testIntance = new SquareMatrixRotationByOneElement();
+		final int[][] input = new int[3][3];
+	    input[0] = new int[]{1,2,3};
+	    input[1] = new int[]{4,5,6};
+	    input[2] = new int[]{7,8,9};
+	    int n = input.length;
+	    final int[][] result = testIntance.rotateByOneElementClockwise(input);
+	    System.out.println("Input:");
+	    for(int i = 0 ; i < n; i++) {
+            for(int j = 0 ; j < n; j++) {
+            	System.out.print(input[i][j] + "  ");
+            	
+            }
+            System.out.println("  ");
+	    }
+	    System.out.println("Output:");
+	    for(int i = 0 ; i < n; i++) {
+            for(int j = 0 ; j < n; j++) {
+            	System.out.print(result[i][j] + "  ");
+            	
+            }
+            System.out.println("  ");
+	    }
+	}
+}
\ No newline at end of file
