subset_generation
diff --git a/ciphers/morse_Code_implementation.py b/ciphers/morse_Code_implementation.py
new file mode 100644
index 000000000000..7b2d0a94b24b
--- /dev/null
+++ b/ciphers/morse_Code_implementation.py
@@ -0,0 +1,82 @@
+# Python program to implement Morse Code Translator
+
+
+# Dictionary representing the morse code chart
+MORSE_CODE_DICT = { 'A':'.-', 'B':'-...',
+                    'C':'-.-.', 'D':'-..', 'E':'.',
+                    'F':'..-.', 'G':'--.', 'H':'....',
+                    'I':'..', 'J':'.---', 'K':'-.-',
+                    'L':'.-..', 'M':'--', 'N':'-.',
+                    'O':'---', 'P':'.--.', 'Q':'--.-',
+                    'R':'.-.', 'S':'...', 'T':'-',
+                    'U':'..-', 'V':'...-', 'W':'.--',
+                    'X':'-..-', 'Y':'-.--', 'Z':'--..',
+                    '1':'.----', '2':'..---', '3':'...--',
+                    '4':'....-', '5':'.....', '6':'-....',
+                    '7':'--...', '8':'---..', '9':'----.',
+                    '0':'-----', ', ':'--..--', '.':'.-.-.-',
+                    '?':'..--..', '/':'-..-.', '-':'-....-',
+                    '(':'-.--.', ')':'-.--.-'}
+
+
+def encrypt(message):
+    cipher = ''
+    for letter in message:
+        if letter != ' ':
+
+
+            cipher += MORSE_CODE_DICT[letter] + ' '
+        else:
+
+            cipher += ' '
+
+    return cipher
+
+
+def decrypt(message):
+
+    message += ' '
+
+    decipher = ''
+    citext = ''
+    for letter in message:
+
+        if (letter != ' '):
+
+
+            i = 0
+
+
+            citext += letter
+
+        else:
+
+            i += 1
+
+
+            if i == 2 :
+
+
+                decipher += ' '
+            else:
+
+
+                decipher += list(MORSE_CODE_DICT.keys())[list(MORSE_CODE_DICT
+                .values()).index(citext)]
+                citext = ''
+
+    return decipher
+
+
+def main():
+    message = "Morse code here"
+    result = encrypt(message.upper())
+    print (result)
+
+    message = result
+    result = decrypt(message)
+    print (result)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/dynamic_programming/subset_generation.py b/dynamic_programming/subset_generation.py
new file mode 100644
index 000000000000..4b7a2bf87fd5
--- /dev/null
+++ b/dynamic_programming/subset_generation.py
@@ -0,0 +1,39 @@
+# python program to print all subset combination of n element in given set of r element .
+#arr[]  ---> Input Array
+#data[] ---> Temporary array to store current combination
+# start & end ---> Staring and Ending indexes in arr[]
+# index  ---> Current index in data[]
+#r ---> Size of a combination to be printed 
+def combinationUtil(arr,n,r,index,data,i):
+#Current combination is ready to be printed,
+# print it
+ if(index == r):
+  for j in range(r):
+   print(data[j],end =" ")
+  print(" ")
+  return
+#  When no more elements are there to put in data[]
+ if(i >= n):
+  return
+#current is included, put next at next
+# location 
+ data[index] = arr[i]
+ combinationUtil(arr,n,r,index+1,data,i+1)
+ # current is excluded, replace it with
+ # next (Note that i+1 is passed, but
+ # index is not changed)
+ combinationUtil(arr,n,r,index,data,i+1)
+ # The main function that prints all combinations
+ #of size r in arr[] of size n. This function 
+ #mainly uses combinationUtil()
+def printcombination(arr,n,r):
+# A temporary array to store all combination
+# one by one
+ data = [0]*r
+#Print all combination using temprary
+#array 'data[]'
+ combinationUtil(arr,n,r,0,data,0)
+# Driver function to check for above function
+arr = [10,20,30,40,50]
+printcombination(arr,len(arr),3)
+#This code is contributed by Ambuj sahu

generate all possible subset of size n of a given array of size r