#include <bits/stdc++.h>
using namespace std;

int main(){
    string s;
    cin >> s;
    int c[10], tmp = 0;
    for(int i=0; i<10; i++){
        if(s[i] == 'o') c[i] = 1;
        else if(s[i] == '?') c[i] = 0;
        else c[i] = -1;
        if(c[i] == 1) tmp++;
    }
    int ans = 0, v1, v2, v3, v4;
    for(int i=0; i<10000; i++){
        int t = i;
        v1 = t%10; t /= 10;
        v2 = t%10; t /= 10;
        v3 = t%10; t /= 10;
        v4 = t%10; t /= 10;
        if(c[v1] < 0 || c[v2] < 0 || c[v3] < 0 || c[v4] < 0) continue;
        int cnt = 0;
        bool ch[10];
        for(int i=0; i<10; i++) ch[i] = true;
        if(c[v1] > 0){
            if(ch[v1]) cnt++;
            ch[v1] = false;
        }
        if(c[v2] > 0){
            if(ch[v2]) cnt++;
            ch[v2] = false;
        }
        if(c[v3] > 0){
            if(ch[v3]) cnt++;
            ch[v3] = false;
        }
        if(c[v4] > 0){
            if(ch[v4]) cnt++;
            ch[v4] = false;
        }
        if(cnt >= tmp){
            ans++;
        }
    }
    cout << ans << endl;
    return 0;
}

/*
　　　　　／＞　 フ
　　　　　| 　_　 _|
　 　　　／`ミ _x 彡
　　 　 /　　　 　 |
　　　 /　  ヽ　　 ?
　／￣|　　 |　|　|
　| (￣ヽ＿_ヽ_)_)
　＼二つ
 */

#include <queue>
#include <vector>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MP make_pair
#define ll long long
#define fi first
#define se second
using namespace std;

template <typename T>
void read(T &x) {
    x = 0; bool f = 0;
    char c = getchar();
    for (;!isdigit(c);c=getchar()) if (c=='-') f=1;
    for (;isdigit(c);c=getchar()) x=x*10+(c^48);
    if (f) x=-x;
}

template<typename F>
inline void write(F x, char ed = '\n') {
	static short st[30];short tp=0;
	if(x<0) putchar('-'),x=-x;
	do st[++tp]=x%10,x/=10; while(x);
	while(tp) putchar('0'|st[tp--]);
	putchar(ed);
}

template <typename T>
inline void Mx(T &x, T y) { x < y && (x = y); }

template <typename T>
inline void Mn(T &x, T y) { x > y && (x = y); }

//#pragma GCC optimize(2)
const int N = 3005;
const int P = 998244353;
int n, k, f[N][N];
int dfs(int n, int k) {
	if (!k && !n) return 1; 
	if (!k) return 0; 
	if (k > n) return 0;
	if (f[n][k] != -1) return f[n][k];
	return f[n][k] = (dfs(n - 1, k - 1) + dfs(n, k << 1)) % P;
}

int main() {
	memset(f, -1, sizeof(f));
	read(n), read(k);
	write(dfs(n, k));
	return 0;
}