//把出现次数>=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")