#include #include void printAsBinary(int a, int bitSize) { std::string output = ""; for (int i = 0; i < bitSize; i++) { int bit = a & 1; a = a >> 1; output.insert(0, std::to_string(bit)); } std::cout << output << std::endl; } int main() { int n; bool sequances[5000] = {0}; std::cin >> n; int maxBitVal = 1 << n; bool foundNew = false; int a = 0; sequances[0] = true; do { printAsBinary(a, n); foundNew = false; int mask = 1; while (true) { int newValue = a | mask; if (!sequances[newValue]) { foundNew = true; break; } else if (mask << 1 < maxBitVal) { mask = mask << 1; } else break; } if (foundNew) { a = a | mask; sequances[a] = true; } else { for (int shiftCount = 1; shiftCount <= n; shiftCount++) { int savedBits = 0; for (int i = 0; i < shiftCount - 1; i++) { savedBits = (savedBits << 1) + 1; } savedBits = a & savedBits; int newValue = ((a >> shiftCount) << shiftCount) + savedBits; if (!sequances[newValue]) { foundNew = true; a = newValue; sequances[a] = true; break; } } } } while (foundNew); return 0; }