#include <bits/stdc++.h>
using namespace std;
long long r[1000], c[1000], ck[1000];
vector<pair<long long, long long> > v;
vector<int> v1[1000];
long long vis[1000];
long long cmb[11][11] = {0};
long long fact[11];
void dfs(long long x) {
  long long i;
  vis[x] = 1;
  for (i = 0; i < v1[x].size(); i++) {
    if (vis[v1[x][i]] == 0) dfs(v1[x][i]);
  }
}
int main() {
  long long n, i, j, m, x, y, n1, n2, q, p1, p2;
  double ans;
  p1 = p2 = q = 0;
  string ss1, ss2;
  cin >> ss1;
  cin >> ss2;
  fact[0] = 1;
  for (i = 1; i < 11; i++) {
    fact[i] = fact[i - 1] * i;
  }
  for (i = 0; i < 11; i++) {
    for (j = 0; j < i + 1; j++) {
      cmb[i][j] = fact[i] / (fact[i - j] * fact[j]);
    }
  }
  for (i = 0; i < ss1.size(); i++) {
    if (ss1[i] == '+') {
      p1++;
    }
  }
  for (i = 0; i < ss2.size(); i++) {
    if (ss2[i] == '+') {
      p2++;
    } else if (ss2[i] == '?') {
      q++;
    }
  }
  if (q == 0 && p1 == p2) {
    ans = 1;
  } else if ((q == 0 && p1 != p2) || (p1 > p2 + q) || (p1 < p2)) {
    ans = 0;
  } else {
    m = p1 - p2;
    ans = cmb[q][m] / pow(2, q);
  }
  cout << setprecision(10) << ans << '\n';
  return 0;
}
