#include<bits/stdc++.h>
#define f1(i, n) for(ll i=1;i<=n;++i)
#define f0(i, n) for(ll i=0;i<n;++i)
#define ull unsigned long long
#define ll long long
#define rev(a) reverse(a.begin(),a.end())
#define all(x) x.begin(),x.end()
#define so(A, n) sort(A+1, A+n+1)
using namespace std;
const int maxn = 200010;
const int N = 2e5 + 5;
const ll MOD = 998244353;
ll moded(ll a, ll b, ll mod) {
return ((a % mod) * (b % mod)) % mod;
}
void bai1() {
ll a, b, c, d, e, f;
cin >> a >> b >> c >> d >> e >> f;
ll res = ((moded(moded(a, b, MOD), c, MOD) % MOD) - ((moded(moded(d, e, MOD), f, MOD)) % MOD)) % MOD;
cout << res;
}
void bai2() {
string s;
cin >> s;
int cnt = 0;
for (int i = 0; i < s.size(); ++i) {
if (s[i] == 'o') {
cnt++;
}
}
if (cnt > 4) {cout << 0; return;}
else if (cnt == 4) {cout << 1; return;}
int res = 0;
map<int, bool> mp;
int A[5] = {};
for (int i = 0; i <= 9999; ++i) {
int a = i, d = 4;
while (d != 0) {
A[d] = a % 10;
a /= 10;
--d;
}
bool check = true;
for (int j = 1; j <= 4; ++j) {
if (s[A[j]] == 'o') {
mp[A[j]] = true;
}
if (s[A[j]] == 'x') {
check = false;
break;
}
}
if (mp.size() == cnt && check) {
res++;
}
mp.clear();
}
cout << res;
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
bai2();
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBmMShpLCBuKSBmb3IobGwgaT0xO2k8PW47KytpKQojZGVmaW5lIGYwKGksIG4pIGZvcihsbCBpPTA7aTxuOysraSkKI2RlZmluZSB1bGwgdW5zaWduZWQgbG9uZyBsb25nCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcmV2KGEpIHJldmVyc2UoYS5iZWdpbigpLGEuZW5kKCkpCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSx4LmVuZCgpCiNkZWZpbmUgc28oQSwgbikgc29ydChBKzEsIEErbisxKQp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgbWF4biA9IDIwMDAxMDsKY29uc3QgaW50IE4gPSAyZTUgKyA1Owpjb25zdCBsbCBNT0QgPSA5OTgyNDQzNTM7CmxsIG1vZGVkKGxsIGEsIGxsIGIsIGxsIG1vZCkgewoJcmV0dXJuICgoYSAlIG1vZCkgKiAoYiAlIG1vZCkpICUgbW9kOwp9CnZvaWQgYmFpMSgpIHsKCWxsIGEsIGIsIGMsIGQsIGUsIGY7CgljaW4gPj4gYSA+PiBiID4+IGMgPj4gZCA+PiBlID4+IGY7CglsbCByZXMgPSAoKG1vZGVkKG1vZGVkKGEsIGIsIE1PRCksIGMsIE1PRCkgJSBNT0QpIC0gKChtb2RlZChtb2RlZChkLCBlLCBNT0QpLCBmLCBNT0QpKSAlIE1PRCkpICUgTU9EOwoJY291dCA8PCByZXM7Cn0Kdm9pZCBiYWkyKCkgewoJc3RyaW5nIHM7CgljaW4gPj4gczsKCWludCBjbnQgPSAwOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBzLnNpemUoKTsgKytpKSB7CgkJaWYgKHNbaV0gPT0gJ28nKSB7CgkJCWNudCsrOwoJCX0KCX0KCWlmIChjbnQgPiA0KSB7Y291dCA8PCAwOyByZXR1cm47fQoJZWxzZSBpZiAoY250ID09IDQpIHtjb3V0IDw8IDE7IHJldHVybjt9CgoJaW50IHJlcyA9IDA7CgltYXA8aW50LCBib29sPiBtcDsKCWludCBBWzVdID0ge307Cglmb3IgKGludCBpID0gMDsgaSA8PSA5OTk5OyArK2kpIHsKCQlpbnQgYSA9IGksIGQgPSA0OwoJCXdoaWxlIChkICE9IDApIHsKCQkJQVtkXSA9IGEgJSAxMDsKCQkJYSAvPSAxMDsKCQkJLS1kOwoJCX0KCQlib29sIGNoZWNrID0gdHJ1ZTsKCQlmb3IgKGludCBqID0gMTsgaiA8PSA0OyArK2opIHsKCQkJaWYgKHNbQVtqXV0gPT0gJ28nKSB7CgkJCQltcFtBW2pdXSA9IHRydWU7CgkJCX0KCQkJaWYgKHNbQVtqXV0gPT0gJ3gnKSB7CgkJCQljaGVjayA9IGZhbHNlOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJaWYgKG1wLnNpemUoKSA9PSBjbnQgJiYgY2hlY2spIHsKCQkJcmVzKys7CgkJfQoJCW1wLmNsZWFyKCk7Cgl9Cgljb3V0IDw8IHJlczsKfQppbnQgbWFpbigpCnsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwoJYmFpMigpOwoKCglyZXR1cm4gMDsKfQoK