#include #include using namespace std; using namespace atcoder; typedef long long int ll; typedef long double ld; #define FOR(i,l,r) for(ll i=l;i=l;i--) #define RREP(i,n) RFOR(i,0,n) #define ALL(x) x.begin(),x.end() #define PA pair #define F first #define S second #define BS(A,x) binary_search(ALL(A),x) #define LB(A,x) (ll)(lower_bound(ALL(A),x)-A.begin()) #define UB(A,x) (ll)(upper_bound(ALL(A),x)-A.begin()) #define COU(A,x) (UB(A,x)-LB(A,x)) //#include //namespace mp=boost::multiprecision; //using Bint=mp::cpp_int; templateusing min_priority_queue=priority_queue,greater>; templatebool chmax(T&a,T b){if(abool chmin(T&a,T b){if(bvoid print(vectorA){REP(i,A.size()){if(i)cout<<" ";cout<>N>>M; vectorS(N); REP(i,N)cin>>S[i]; sort(ALL(S)); if(S[0]==S.back()){cout<<26*(M+1)<K; vectorMae(M+1),Usiro(M+1); REP(i,M)Mae[i+1]=Mae[i]+T[i]; RREP(i,M)Usiro[i]=T[i+1]+Usiro[i+1]; REP(i,M+1)K.insert(Mae[i]+Usiro[i]); bool ok=1; REP(i,N)if(!K.count(S[i]))ok=0; ans+=ok; T=S.back().substr(0,t+1)+S[0].substr(t,M-t); K.clear(); REP(i,M)Mae[i+1]=Mae[i]+T[i]; RREP(i,M)Usiro[i]=T[i+1]+Usiro[i+1]; REP(i,M+1)K.insert(Mae[i]+Usiro[i]); ok=1; REP(i,N)if(!K.count(S[i]))ok=0; ans+=ok; cout<