/* Problem name : Algorithm : Not Sure Yet Contest/Practice : Source : Comment : Whenever you start to believe yourself, people also start to believe in you Date : -- Last Update : 25-Mar-2015 */ #include #define pause system("pause"); #define FOR(s,e,inc) for(int i=s;i<=e;i+=inc) #define mod 1000000007 #define UNIQUE(V) (V).erase(unique((V).begin(),(V).end()),(V).end())//vector must be sorted #define inf 1<<30 #define pb push_back #define ppb pop_back #define mp make_pair #define F first #define S second #define sz(x) ((int)x.size()) #define sqr(x) ( (x)* (x) ) #define eps 1e-9 #define lcm(x,y) (abs(x) /gcd(x,y))* abs(y) #define on(x,w) x|(1< inline T mod_v(T num) { if(num>=0) return num%mod; else return (num%mod+mod)%mod; } template inline T gcd(T a,T b) { a=abs(a); b=abs(b); while(b) b ^= a ^= b ^= a %= b; return a; } template T fast_pow(T n , T p) { if(p==0) return 1; if(p%2) { T g=mod_v ( mod_v(n) * mod_v(fast_pow(n,p-1)) ); return g; } else { T g=fast_pow(n,p/2); g=mod_v( mod_v(g) * mod_v(g) ) ; return g; } } template inline T modInverse(T n) { return fast_pow(n,mod-2LL); } bool equalTo ( double a, double b ){ if ( fabs ( a - b ) <= eps ) return true; else return false; } bool notEqual ( double a, double b ){if ( fabs ( a - b ) > eps ) return true; else return false; } bool lessThan ( double a, double b ){ if ( a + eps < b ) return true; else return false; } bool lessThanEqual ( double a, double b ){if ( a < b + eps ) return true; else return false;} bool greaterThan ( double a, double b ){if ( a > b + eps ) return true;else return false;} bool greaterThanEqual ( double a, double b ){if ( a + eps > b ) return true;else return false;} #define debug(args...) {dbg,args; cerr< debugger& operator , (const T& v){ cerr< inline int in(register T& num) { register char c=0; num=0; bool n=false; while(c<33)c=getchar(); while(c>33){ if(c=='-') n=true; else num=num*10+c-'0'; c=getchar(); } num=n?-num:num; return 1; } /******* ! Code start from here ! *******/ ll fac[100005]; ll vfac[100005]; int cnt[100005][30]; int solve(int l,int r){ int odd = 0,even = 0; int sum = 0; vectorss; for(int i=0;i<26;i++){ int tmp = cnt[r][i]; if(l) tmp-=cnt[l-1][i]; if(tmp%2){ odd++; tmp--; } tmp/=2; sum+=tmp; ss.pb(tmp); } ll res = fac[sum]; for(auto i:ss ){ res = mod_v(res * vfac[i] ); } res = mod_v(res * max(odd,1) ); return res; } int main() { // std::ios_base::sync_with_stdio(false); #ifdef kimbbakar freopen ( "E:/Code/in.txt", "r", stdin ); // freopen ( "E:/Code/out.txt", "w", stdout ); #endif fac[0] = 1; for(int i=1;i<=100000;i++) fac[i] = mod_v(fac [i-1] * i ); vfac[100000 ] = modInverse(fac[100000] ); for(int i=100000-1;i>=0;i--) vfac[i] = mod_v(vfac[i+1] * (i+1) ); string s; int q; cin>>s; for(int i=0;i