Pagini recente » Cod sursa (job #1601268) | Cod sursa (job #2364185) | Cod sursa (job #1199566) | Cod sursa (job #1199685) | Cod sursa (job #1015430)
#include <fstream>
#include <vector>
#include <string.h>
using namespace std;
const int MAXN = 2013;
int N, M, Prefix[MAXN], Ans[MAXN];
char A[MAXN];
ifstream cin("map.in");
ofstream cout("map.out");
inline int BuildPrefix(int act) {
memset(Prefix, 0, sizeof(Prefix));
int K = 0;
Prefix[1] = 0;
for(int i = 2 ; i <= M ; ++ i) {
while(K > 0 && A[K+1] != A[i])
K = Prefix[K];
if(A[i] == A[K+1])
++ K;
Prefix[i] = K;
}
Ans[act] = Prefix[M];
}
int main() {
cin >> N >> M;
for(int i = 1 ; i <= N ; ++ i) {
//for(int j = 1 ; j <= M ; ++ j)
cin >> (A+1);
BuildPrefix(i);
}
int ans = (1 << 30);
for(int i = 1 ; i <= N ; ++ i)
if(Ans[i])
ans = min(ans, Ans[i]);
if(ans == (1 << 30))
ans = M;
cout << ans << '\n';
return 0;
}