diff --git a/source/Collection_Data_Types.rst b/source/Collection_Data_Types.rst
index cb818583d7f7608b6007f41c7500cbe820ff8be5..833b15205f82c2858b2fb6a1cbea3f8c141c0bb0 100644
--- a/source/Collection_Data_Types.rst
+++ b/source/Collection_Data_Types.rst
@@ -1,5 +1,118 @@
+.. sectnum:: 
+   :start: 4
+
+
 .. _Collection_Data_types:
 
 *********************
 Collection Data Types
 *********************
+
+Exercices
+=========
+
+exercice
+--------
+
+From a list return a new list without any duplicate, regardless of the order of items. 
+For example: ::
+
+   >>> l = [5,2,3,2,2,3,5,1]
+   >>> uniqify(l)
+   >>> [1,2,3,5] #is one of the solutions 
+
+solution ::
+
+   >>> list(set(l))
+
+
+exercice
+--------
+From a list return a new list without any duplicate, but keeping the order of items. 
+For example: ::
+
+   >>> l = [5,2,3,2,2,3,5,1]
+   >>> uniqify_with_order(l)
+   >>> [5,2,3,1]  
+
+solution ::
+
+   >>> uniq = []
+   >>> for item in l:
+   >>>   if item not in uniq:
+   >>>      uniq.append(item)
+
+solution ::
+
+   >>> uniq_items = set()
+   >>> l_uniq = [x for x in l if x not in uniq_items and not uniq_items.add(x)]
+   
+exercice
+--------
+
+list and count occurences of every 3mers in the following sequence ::
+
+   s = """gtcagaccttcctcctcagaagctcacagaaaaacacgctttctgaaagattccacactcaatgccaaaatataccacag
+   gaaaattttgcaaggctcacggatttccagtgcaccactggctaaccaagtaggagcacctcttctactgccatgaaagg
+   aaaccttcaaaccctaccactgagccattaactaccatcctgtttaagatctgaaaaacatgaagactgtattgctcctg
+   atttgtcttctaggatctgctttcaccactccaaccgatccattgaactaccaatttggggcccatggacagaaaactgc
+   agagaagcataaatatactcattctgaaatgccagaggaagagaacacagggtttgtaaacaaaggtgatgtgctgtctg
+   gccacaggaccataaaagcagaggtaccggtactggatacacagaaggatgagccctgggcttccagaagacaaggacaa
+   ggtgatggtgagcatcaaacaaaaaacagcctgaggagcattaacttccttactctgcacagtaatccagggttggcttc
+   tgataaccaggaaagcaactctggcagcagcagggaacagcacagctctgagcaccaccagcccaggaggcacaggaaac
+   acggcaacatggctggccagtgggctctgagaggagaaagtccagtggatgctcttggtctggttcgtgagcgcaacaca"""
+
+and finally print the results one 3mer and it's occurence per line. 
+
+write first the pseudocode, then implement it.
+
+bonus:
+print the kmer by incresing occurences.
+
+solution ::
+
+   s = s.replace('\n', '')
+   kmers = {}
+   for i in range(len(s) - 3):
+      kmer = s[i:i+3]
+      kmers[kmer] = kmers.get(kmer, 0) + 1
+
+   for kmer, occurence in kmers.items():
+      print kmer, " = ", occurence
+
+solution bonus ::
+
+   list_of_kmers = kmers.items()  
+   from operator import itemgetter
+   list_of_kmers.sort(key=itemgetter(1)) 
+   for kmer, occurence in list_of_kmers:
+      print kmer, " = ", occurence
+
+ solution bonus ::
+
+   list_of_kmers = kmers.items()      
+   list_of_kmers.sort(key = lambda kmer: kmer[1])
+   for kmer, occurence in list_of_kmers:
+      print kmer, " = ", occurence   
+      
+      
+exercice
+--------
+
+given the following dict : ::
+
+   d = {1 : 'a', 2 : 'b', 3 : 'c' , 4 : 'd'}
+   
+We want obtain a new dict with the keys and the values inverted so we will obtain: ::
+
+   inverted_d  {'a': 1, 'c': 3, 'b': 2, 'd': 4}
+
+solution ::
+
+   inverted_d = {}
+   for key in d.keys():
+       inverted_d[d[key]] = key
+       
+solution ::
+
+   inverted_d = {v : k for k, v in d.items()}
\ No newline at end of file