#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <map> #include <string> using namespace std; const int N = 10010; int n; char s[105]; map<string, int >ma; void getminsub(char *s) { int i=0, j=1, len=strlen(s), k=0; while(i<len && j<len && k<len) { if(i==j) j++; int ni=(i+k)%len, nj=(j+k)%len; if(s[ni]>s[nj]) i += k+1, k=0; else if(s[ni]<s[nj]) j+=k+1, k=0; else k++; } char tmp[105]; strcpy(tmp, s+i); s[i] = '\0'; strcpy(tmp+len-i, s); strcpy(s, tmp); } int main() { while(scanf("%d", &n)>0) { ma.clear(); int ans = 0; for(int i=1; i<=n; i++) { scanf("%s", s); getminsub(s); if(!ma[s]) { ans++; ma[s] = i; } } printf("%d\n", ans); } return 0; }
相关文章: