using
System;
using
System.Collections.Generic;
class
GFG{
static
string
getBinaryRep(
int
N,
int
num_of_bits)
{
string
r =
""
;
num_of_bits--;
while
(num_of_bits >= 0)
{
if
((N & (1 << num_of_bits)) != 0)
r +=
"1"
;
else
r +=
"0"
;
num_of_bits--;
}
return
r;
}
static
List<
string
> NBitBinary(
int
N)
{
List<
string
> r =
new
List<
string
>();
int
first = 1 << (N - 1);
int
last = first * 2;
for
(
int
i = last - 1; i >= first; --i)
{
int
zero_cnt = 0;
int
one_cnt = 0;
int
t = i;
int
num_of_bits = 0;
while
(t > 0)
{
if
((t & 1) != 0)
one_cnt++;
else
zero_cnt++;
num_of_bits++;
t = t >> 1;
}
if
(one_cnt >= zero_cnt)
{
bool
all_prefix_match =
true
;
int
msk = (1 << num_of_bits) - 2;
int
prefix_shift = 1;
while
(msk > 0)
{
int
prefix = (msk & i) >> prefix_shift;
int
prefix_one_cnt = 0;
int
prefix_zero_cnt = 0;
while
(prefix > 0)
{
if
((prefix & 1)!=0)
prefix_one_cnt++;
else
prefix_zero_cnt++;
prefix = prefix >> 1;
}
if
(prefix_zero_cnt > prefix_one_cnt)
{
all_prefix_match =
false
;
break
;
}
prefix_shift++;
msk = msk & (msk << 1);
}
if
(all_prefix_match)
{
r.Add(getBinaryRep(i, num_of_bits));
}
}
}
return
r;
}
static
public
void
Main()
{
int
n = 4;
List<
string
> results = NBitBinary(n);
for
(
int
i = 0; i < results.Count; ++i)
Console.Write(results[i] +
" "
);
Console.WriteLine();
}
}