MOD = 1_000_000_007

class Array
    def &(a)
        t1, f1 = self
        t2, f2 = a
        [t1 * t2 % MOD, (t1 * f2 + f1 * t2 + f1 * f2) % MOD]
    end

    def |(a)
        t1, f1 = self
        t2, f2 = a
        [(t1 * t2 + t1 * f2 + f1 * t2) % MOD, f1 * f2 % MOD]
    end

    def ~@
        reverse
    end
end

e = gets.chomp.gsub(?~, ?~)
e.scan(/x\d+/) do |v|
    eval "$#{v} = [1, 1]"
end
p eval(e.gsub(?x, "$x"))[0]