#include <bits/stdc++.h>
using namespace std;
int main() {
  string s1, s2;
  cin >> s1 >> s2;
  int l1 = s1.size();
  int count1 = 0;
  for (int i = 0; i < l1; i++) {
    if (s1[i] == '+') {
      count1 += 1;
    } else if (s1[i] == '-') {
      count1 -= 1;
    }
  }
  int count2 = 0;
  int doubt = 0;
  for (int j = 0; j < l1; j++) {
    if (s2[j] == '+') {
      count2 += 1;
    } else if (s2[j] == '-') {
      count2 -= 1;
    } else if (s2[j] == '?') {
      count2 += 0;
      doubt += 1;
    }
  }
  float f = 1.000000000;
  if (doubt == 0 && count1 == count2) {
    cout << f << "\n";
    return 0;
  }
  if (doubt == 0 && count1 != count2) {
    cout << 0 << "\n";
    return 0;
  }
  if (doubt != 0) {
    int var = count1 - count2;
    int n = pow(2, doubt);
    int no = 2, m, cop;
    int x = 1, y = -1;
    vector<int> v(n);
    v[0] = 1;
    v[1] = -1;
    cop = 2;
    no = no * 2;
    while (no <= n) {
      for (int p = cop; p < no; p++) {
        v[p] = v[p - cop];
      }
      for (m = 0; m < (no / 2); m++) {
        v[m] += x;
      }
      for (m = no / 2; m < n; m++) {
        v[m] -= x;
      }
      cop = no;
      no = no * 2;
    }
    long double countans = 0;
    for (int a = 0; a < n; a++) {
      if (v[a] == var) {
        countans++;
      }
    }
    double ns = n;
    double ans = (double)(countans) / (double)(ns);
    printf("%.15lf", ans);
    printf("\n");
    return 0;
  }
  return 0;
}
