# Print all submasks of a given mask

Given an integer** N**, the task is to print all the subsets of the set formed by the set bits present in the binary representation of **N**.

**Examples:**

Input:N = 5Output:5 4 1Explanation:

Binary representation of N is “101”, Therefore all the required subsets are {“101”, “100”, “001”, “000”}.

Input:N = 25Output:25 24 17 16 9 8 1Explanation:

Binary representation of N is “1101”. Therefore, all the required subsets are {“11001”, “11000”, “10001”, “10000”, “01001”, “01000”, “0001”, “0000”}.

**Naive Approach: **The simplest approach is to traverse every mask in the range **[0, 1 << (count of set bit in N**)**]** and check if no other bits are set in it except for the bits in **N**. Then, print it. **Time Complexity: **O(2^{(count of set bit in N)})**Auxiliary Space:** O(1)

**Efficient Approach: **The above approach can be optimized by only traversing the **submasks **which are the subset of mask **N**.

- Suppose
Sis the current submask which is the subset of maskN. Then, it can be observed that by assigningS = (S – 1) & N, the next submask ofNcan be obtained which is less thanS.- In
S – 1, it flips all the bits present on the right of the rightmost set bit including rightmost set bit ofS.- Therefore, after performing
Bitwise &withN, a submask ofNis obtained.- Therefore,
S = (S – 1) & Ngives the next submask ofNwhich is less thanS.

Follow the steps below to solve the problem:

- Initialize a variable, say
**S = N.** - Iterate while
**S > 0**and in each iteration, print the value of**S**. - Assign
**S = (S – 1) & N.**

Below is the implementation of the above approach:

## C++

`// C++ Program for above approach` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// Function to print the submasks of N` `void` `SubMasks(` `int` `N)` `{` ` ` `for` `(` `int` `S = N; S; S = (S - 1) & N) {` ` ` `cout << S << ` `" "` `;` ` ` `}` `}` `// Driver Code` `int` `main()` `{` ` ` `int` `N = 25;` ` ` `SubMasks(N);` ` ` `return` `0;` `}` |

## Java

`// Java Program for above approach` `import` `java.util.*;` `class` `GFG` `{` ` ` `// Function to print the submasks of N` `static` `void` `SubMasks(` `int` `N)` `{` ` ` `for` `(` `int` `S = N; S > ` `0` `; S = (S - ` `1` `) & N)` ` ` `{` ` ` `System.out.print(S + ` `" "` `);` ` ` `}` `}` `// Driver Code` `public` `static` `void` `main(String args[])` `{` ` ` `int` `N = ` `25` `;` ` ` `SubMasks(N);` `}` `}` `// This code is contributed by SURENDRA_GANGWAR.` |

## Python3

`# Python3 program for the above approach` `# Function to print the submasks of N` `def` `SubMasks(N) :` ` ` `S ` `=` `N` ` ` `while` `S > ` `0` `:` ` ` `print` `(S,end` `=` `' '` `)` ` ` `S ` `=` `(S ` `-` `1` `) & N` `# Driven Code` `if` `__name__ ` `=` `=` `'__main__'` `:` ` ` `N ` `=` `25` ` ` `SubMasks(N)` ` ` ` ` `# This code is contributed by bgangwar59.` |

## C#

`// C# program for the above approach` `using` `System;` `class` `GFG{` `// Function to print the submasks of N` `static` `void` `SubMasks(` `int` `N)` `{` ` ` `for` `(` `int` `S = N; S > 0; S = (S - 1) & N)` ` ` `{` ` ` `Console.Write(S + ` `" "` `);` ` ` `}` `}` `// Driver Code` `static` `public` `void` `Main()` `{` ` ` `int` `N = 25;` ` ` `SubMasks(N);` `}` `}` `// This code is contributed by Code_hunt.` |

## Javascript

`<script>` `// JavaScript program of the above approach` `// Function to print the submasks of N` `function` `SubMasks(N)` `{` ` ` `for` `(let S = N; S > 0; S = (S - 1) & N)` ` ` `{` ` ` `document.write(S + ` `" "` `);` ` ` `}` `}` ` ` `// Driver Code` ` ` ` ` `let N = 25;` ` ` `SubMasks(N);` `</script>` |

**Output:**

25 24 17 16 9 8 1

**Time Complexity: **O(2^{(count of set bit in N)})**Auxiliary Space:** O(1)