using
System;
public
class
GFG{
static
int
[,,]memo =
new
int
[32,2,2];
static
int
dp(
int
pos,
int
fl,
int
pr, String bin)
{
if
(pos == bin.Length)
return
1;
if
(memo[pos,fl,pr] != -1)
return
memo[pos,fl,pr];
int
val = 0;
if
(bin[pos] ==
'0'
)
val = val + dp(pos + 1, fl, 0, bin);
else
if
(bin[pos] ==
'1'
)
val = val + dp(pos + 1, 1, 0, bin);
if
(pr == 0) {
if
(fl == 1) {
val += dp(pos + 1, fl, 1, bin);
}
else
if
(bin[pos] ==
'1'
) {
val += dp(pos + 1, fl, 1, bin);
}
}
return
memo[pos,fl,pr] = val;
}
static
int
findints(
int
num)
{
String bin =
""
;
while
(num > 0) {
if
(num % 2 == 1)
bin +=
"1"
;
else
bin +=
"0"
;
num /= 2;
}
bin = reverse(bin);
for
(
int
i = 0; i < 32; i++){
for
(
int
j = 0; j < 2; j++){
for
(
int
l = 0; l < 2; l++)
memo[i,j,l] = -1;
}
}
return
dp(0, 0, 0, bin);
}
static
String reverse(String input) {
char
[] a = input.ToCharArray();
int
l, r = a.Length - 1;
for
(l = 0; l < r; l++, r--) {
char
temp = a[l];
a[l] = a[r];
a[r] = temp;
}
return
String.Join(
""
,a);
}
public
static
void
Main(String[] args)
{
int
N = 12;
Console.Write(findints(N));
}
}