#include <bits/stdc++.h>
using namespace std;
class ConversionResult {
  int result;
  int num_wildcards;

 public:
  ConversionResult(int, int);
  int get_result() { return result; }
  int get_num_wildcards() { return num_wildcards; }
};
ConversionResult::ConversionResult(int result_param, int num_wildcards_param) {
  this->result = result_param;
  this->num_wildcards = num_wildcards_param;
}
int compute_target(string s);
ConversionResult convert(string s);
long long binom(int n, int k);
int main() {
  string s1, s2;
  cin >> s1 >> s2;
  int target = compute_target(s1);
  ConversionResult actual = convert(s2);
  int displacement = abs(actual.get_result() - target);
  if (displacement > actual.get_num_wildcards()) {
    cout << 0 << endl;
  } else {
    int num_alternate = actual.get_num_wildcards() - displacement;
    if (num_alternate % 2 == 0) {
      int total_one_sign = (num_alternate / 2) + displacement;
      long long num_outcomes_working =
          binom(actual.get_num_wildcards(), total_one_sign);
      double fraction = ((double)num_outcomes_working) /
                        ((double)pow(2, actual.get_num_wildcards()));
      cout << setprecision(12) << fraction << endl;
    } else {
      cout << 0 << endl;
    }
  }
  return 0;
}
int compute_target(string s) { return convert(s).get_result(); }
ConversionResult convert(string s) {
  int result = 0;
  int num_wildcards = 0;
  for (string::iterator it = s.begin(); it < s.end(); it++) {
    if (*it == '+') {
      result++;
    } else if (*it == '-') {
      result--;
    } else {
      num_wildcards++;
    }
  }
  return ConversionResult(result, num_wildcards);
}
long long binom(int n, int k) {
  if (k > n) {
    return 0;
  } else if (k < 0) {
    throw;
  } else if (k == 0 || k == n) {
    return 1;
  } else {
    return binom(n - 1, k - 1) + binom(n - 1, k);
  }
}
