等价于一个不左移一个左移然后结果乘上n,也就是第二个串的每个字符都会和第一个串的某个字符配对一次,所以选择出现次数最多的字符更好.
如果有多个字符出现次数都是最多的,结果为最多的字符种类数的n次方
/* ***********************************************
Author :CKboss
Created Time :2015年03月02日 星期一 21时54分48秒
File Name :C.cpp
************************************************ */
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <queue>
#include <set>
#include <map>
using namespace std;
typedef long long int LL;
const int maxn=100100;
const int mod=1e9+7;
int n,A,G,C,T;
char dna[maxn];
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
scanf("%d",&n);
scanf("%s",dna);
for(int i=0;i<n;i++)
{
if(dna[i]=='A') A++;
if(dna[i]=='G') G++;
if(dna[i]=='C') C++;
if(dna[i]=='T') T++;
}
int mx=max(max(A,G),max(C,T));
int nt=0;
if(A==mx) nt++; if(G==mx) nt++; if(C==mx) nt++; if(T==mx) nt++;
LL ans=1LL;
for(int i=0;i<n;i++)
{
ans=(ans*nt)%mod;
}
cout<<ans%mod<<endl;
return 0;
}