character(100000) :: s
integer Ssize
integer(8),allocatable,dimension(:,:) :: dp
integer mo
read*,s
n=len_trim(s)
mo=10**9+7

allocate(dp(2,0:n))
dp=0
dp(1,0) = 1
do i = 1,n
  dp(1,i)=mod(merge(dp(1,i-1),dp(1,i-1)*2,s(i:i)=='0'),mo)
  dp(2,i)=mod(merge(dp(2,i-1)*3,dp(1,i-1)+dp(2,i-1)*3,s(i:i)=='0'),mo)
end do

print"(i0)", mod(dp(1,n)+dp(2,n),mo)

end