//把出现次数>=2的字符给搞出来,然后对于每个数,只能提取2的倍数或者0个,例如'c'出现8次,那么提取方案就是SUM(C(8,i)) i=0,2,4...8,把所有情况求出来算个乘积,减去所有都是0的情况即可

#include <iostream>
#include <unordered_map>
#include <vector>
#include "bits/stdc++.h"
using namespace std;
using ll = long long;
const ll mod = 1e9+7;
const int maxn = 2e5+5;
ll fact[maxn],inv[maxn];
inline ll Inv(ll n){
    ll p = mod-2;
 	ll res=1LL;
	while(p)
	{
		if(p&1)
			res=res*n%mod;
		n=n*n%mod;
		p>>=1LL;
	}
	return res;   
}
void init()
{
	fact[0]=1LL;
	for(int i=1;i<=200000;i++)
		fact[i]=fact[i-1]*i%mod;
	inv[200000]=Inv(fact[200000]);
	for(int i=199999;i>=0;i--)
		inv[i]=inv[i+1]*(i+1)%mod;
}
int main() {
    init();
    std::string s ;
    std::cin>>s;
    int len = s.size();
    unordered_map<char, int>mp;
    for(int i = 0;i<len;i++){
        mp[s[i]]++;
    }
    vector<ll>vec;
    for(auto it:mp){
        int nums = it.second;
        if(nums<2){
            continue;
        }
        // printf("%d\n",nums);
        ll sum = 0;
        for(int i = 0;i<=nums;i+=2){
            ll tmp = fact[nums]*inv[nums-i]%mod*inv[i]%mod;
            sum  = (sum%mod+tmp%mod)%mod;
            // printf("%lld\n",tmp);
            // tmp%=mod;
        }
        vec.emplace_back(sum);
    }
    ll ans = 1LL;
    for(auto it:vec){
        ans = ans*it%mod;
    }
    ans = (ans+mod-1LL)%mod;
    printf("%lld\n",ans);
    
}
// 64 位输出请用 printf("%lld")