#include<iostream>
#include <algorithm>
#include <unordered_map>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include<string>
#include <set>
#include <map>
#include <cstdlib>
#include <utility>
#include <ctime>
#include <cmath>
#include <valarray>
#include<sstream>
#include <stdio.h>
#include <string.h>
#include <iomanip>
using namespace std;
#define ll long long;
#define ANOOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int check_possibilities(string s22, int fin)
{
string temp;
int cnt = 0;
for (int i = 0; i < s22.size(); i++)
{
}
}
int main()
{
ANOOS
string s1, s2;
bool ok = false;
cin >> s1 >> s2;
int final_pos = 0, sec_pos = 0,num_QMark=0;
cin >> s1 >> s2;
for (int i = 0; i < s1.size(); i++)
{
if (s1[i] == '+')
final_pos++;
else if (s1[i] == '-')
final_pos--;
}
for (int i = 0; i < s2.size(); i++)
{
if (s2[i] == '+')
sec_pos++;
else if (s2[i] == '-')
sec_pos--;
else if (s2[i] == '?')
{
//ok = true;
num_QMark++;
}
}
if (num_QMark > 0)
{
num_QMark=pow(2, num_QMark);
//int pos = check_possibilities(s2, final_pos);
}
if (num_QMark==0 && final_pos == sec_pos)//if there's no '?' in sequnce
{
cout << "1.000000000000";
}
else if (num_QMark == 0 && final_pos != sec_pos)//if there's no '?' in sequnce
{
cout << "0.000000000000";
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlIDxhbGdvcml0aG0+IAojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0YWNrPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxkZXF1ZT4KI2luY2x1ZGU8c3RyaW5nPgojaW5jbHVkZSA8c2V0PiAKI2luY2x1ZGUgPG1hcD4gCiNpbmNsdWRlIDxjc3RkbGliPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDx2YWxhcnJheT4KI2luY2x1ZGU8c3N0cmVhbT4gIAojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8aW9tYW5pcD4gIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIGxsIGxvbmcgbG9uZzsKI2RlZmluZSBBTk9PUyBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApO2Npbi50aWUoMCk7Y291dC50aWUoMCk7CmludCBjaGVja19wb3NzaWJpbGl0aWVzKHN0cmluZyBzMjIsIGludCBmaW4pCnsKICAgIHN0cmluZyB0ZW1wOwogICAgaW50IGNudCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHMyMi5zaXplKCk7IGkrKykKICAgIHsKICAgICAgICAKICAgIH0KfQoKaW50IG1haW4oKQp7CiAgICBBTk9PUwogICAgICAgIHN0cmluZyBzMSwgczI7CiAgICBib29sIG9rID0gZmFsc2U7CiAgICBjaW4gPj4gczEgPj4gczI7CiAgICBpbnQgZmluYWxfcG9zID0gMCwgc2VjX3BvcyA9IDAsbnVtX1FNYXJrPTA7CiAgICBjaW4gPj4gczEgPj4gczI7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHMxLnNpemUoKTsgaSsrKQogICAgewogICAgICAgIGlmIChzMVtpXSA9PSAnKycpCiAgICAgICAgICAgIGZpbmFsX3BvcysrOwogICAgICAgIGVsc2UgaWYgKHMxW2ldID09ICctJykKICAgICAgICAgICAgZmluYWxfcG9zLS07CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHMyLnNpemUoKTsgaSsrKQogICAgewogICAgICAgIGlmIChzMltpXSA9PSAnKycpCiAgICAgICAgICAgIHNlY19wb3MrKzsKICAgICAgICBlbHNlIGlmIChzMltpXSA9PSAnLScpCiAgICAgICAgICAgIHNlY19wb3MtLTsKICAgICAgICBlbHNlIGlmIChzMltpXSA9PSAnPycpCiAgICAgICAgewogICAgICAgICAgICAvL29rID0gdHJ1ZTsKICAgICAgICAgICAgbnVtX1FNYXJrKys7CiAgICAgICAgfQoKICAgIH0KICAgIGlmIChudW1fUU1hcmsgPiAwKQogICAgewogICAgICAgIG51bV9RTWFyaz1wb3coMiwgbnVtX1FNYXJrKTsKICAgICAgICAgICAgLy9pbnQgcG9zID0gY2hlY2tfcG9zc2liaWxpdGllcyhzMiwgZmluYWxfcG9zKTsKCiAgICB9CiAgICBpZiAobnVtX1FNYXJrPT0wICYmIGZpbmFsX3BvcyA9PSBzZWNfcG9zKS8vaWYgdGhlcmUncyBubyAnPycgaW4gc2VxdW5jZSAKICAgIHsKICAgICAgICBjb3V0IDw8ICIxLjAwMDAwMDAwMDAwMCI7CiAgICB9CiAgICBlbHNlIGlmIChudW1fUU1hcmsgPT0gMCAmJiBmaW5hbF9wb3MgIT0gc2VjX3BvcykvL2lmIHRoZXJlJ3Mgbm8gJz8nIGluIHNlcXVuY2UgCiAgICB7CiAgICAgICAgY291dCA8PCAiMC4wMDAwMDAwMDAwMDAiOwogICAgfQoKCiAgICByZXR1cm4gMDsKfQ==