1 /*
2 CF410div2 B. Mike and strings
3 http://codeforces.com/contest/798/problem/B
4 字符串 暴力
5 题意:给你n个串,每次操作可以将某个串的第一个字符放到最后去,
6 问最少的次数,使得所有字符串都相同
7 思路:先将所有字符串复制成二倍,然后暴力枚举要变成的串
8 注意数组都要开二倍。。
9 */
10 #include <cstdio>
11 #include <algorithm>
12 #include <cstring>
13 #include <cmath>
14 #include <vector>
15 #include <queue>
16 #include <iostream>
17 #include <map>
18 #include <set>
19 //#define test
20 using namespace std;
21 const int Nmax=105;//空间记得要开两倍
22 char s[Nmax][Nmax];
23 char tmp[Nmax];
24 int ans[Nmax][Nmax];
25 int n,len=0;
26 int check(int a,int b)
27 {
28 for(int i=b;i<=b+len-1;i++)
29 {
30 if(tmp[i-b+1]!=s[a][i])
31 return 0;
32 }
33 return 1;
34 }
35 int main()
36 {
37 #ifdef test
38 #endif
39 //freopen("2.in","r",stdin);
40 scanf("%d",&n);
41 for(int i=1;i<=n;i++)
42 {
43 scanf("%s",s[i]+1);
44 //printf("%s\n",s[i]+1);
45 len=max(len,(int)strlen(s[i]+1));
46 for(int j=len+1;j<=len<<1;j++)
47 s[i][j]=s[i][j-len];
48 }
49 for(int i=1;i<=len;i++)//枚举匹配头
50 {
51 int k=i;
52 for(int j=1;j<=len;j++)
53 tmp[j]=s[1][k++];
54 for(int j=2;j<=n;j++)
55 {
56 int flag=1;
57 for(int t=1;t<=len;t++)
58 {
59 if(check(j,t))
60 {
61 ans[j][i]=t-1;
62 //printf("ans[%d][%d]=%d\n",j,i,ans[j][i]);
63 flag=0;
64 break;
65 }
66 }
67 if(flag)
68 {
69 printf("-1\n");
70 return 0;
71 }
72 }
73 }
74 for(int i=1;i<=len;i++)
75 ans[1][i]=i-1;
76 int res=1e9,book=0;
77 for(int t=1;t<=len;t++)
78 {
79 book=0;
80 for(int i=1;i<=n;i++)
81 book+=ans[i][t];
82 //printf("book[%d]:%d\n",t,book);
83 res=min(res,book);
84 }
85 printf("%d\n",res);
86 return 0;
87 }