#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
const int base = 13331;
vector< pair<int, int> > prime[500001];
long long hash[500001], power[500001];
bool check[500001];
char str[500001];
int main() {
int n, q;
scanf("%d%s%d", &n, str, &q);
memset(check, false, sizeof(check));
for (int i = 2; i <= n; i ++)
if (! check[i])
for (int j = i; j <= n; j += i) {
int tmp = j, cnt = 0;
while (tmp % i == 0) {
cnt ++;
tmp /= i;
}
prime[j].push_back(make_pair(i, cnt));
check[j] = true;
}
hash[0] = 0;
for (int i = 0; i < n; i ++)
hash[i+1] = hash[i] * base + str[i];
power[0] = 1;
for (int i = 1; i < n; i ++)
power[i] = power[i-1] * base;
for (int i = 0; i < q; i ++) {
int a, b;
scanf("%d%d", &a, &b);
a --;
int len = b - a, res = 1;
for (int j = 0; j < prime[len].size(); j ++) {
int p = prime[len][j].first, cnt = prime[len][j].second, now = 1;
for (int k = 0; k < cnt; k ++) now *= p;
for (int k = cnt; k > 0; k --) {
int l = len / now;
long long t1 = hash[b-l] - hash[a] * power[b-a-l];
long long t2 = hash[b] - hash[a+l] * power[b-a-l];
if (t1 == t2) {
res *= now;
break;
}
now /= p;
}
}
printf("%d\n", len / res);
}
return 0;
}
CiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBiYXNlID0gMTMzMzE7Cgp2ZWN0b3I8IHBhaXI8aW50LCBpbnQ+ID4gcHJpbWVbNTAwMDAxXTsKbG9uZyBsb25nIGhhc2hbNTAwMDAxXSwgcG93ZXJbNTAwMDAxXTsKYm9vbCBjaGVja1s1MDAwMDFdOwpjaGFyIHN0cls1MDAwMDFdOwoKaW50IG1haW4oKSB7CglpbnQgbiwgcTsKCXNjYW5mKCIlZCVzJWQiLCAmbiwgc3RyLCAmcSk7CgltZW1zZXQoY2hlY2ssIGZhbHNlLCBzaXplb2YoY2hlY2spKTsKCWZvciAoaW50IGkgPSAyOyBpIDw9IG47IGkgKyspCgkJaWYgKCEgY2hlY2tbaV0pCgkJCWZvciAoaW50IGogPSBpOyBqIDw9IG47IGogKz0gaSkgewoJCQkJaW50IHRtcCA9IGosIGNudCA9IDA7CgkJCQl3aGlsZSAodG1wICUgaSA9PSAwKSB7CgkJCQkJY250ICsrOwoJCQkJCXRtcCAvPSBpOwoJCQkJfQoJCQkJcHJpbWVbal0ucHVzaF9iYWNrKG1ha2VfcGFpcihpLCBjbnQpKTsKCQkJCWNoZWNrW2pdID0gdHJ1ZTsKCQkJfQoJaGFzaFswXSA9IDA7Cglmb3IgKGludCBpID0gMDsgaSA8IG47IGkgKyspCgkJaGFzaFtpKzFdID0gaGFzaFtpXSAqIGJhc2UgKyBzdHJbaV07Cglwb3dlclswXSA9IDE7Cglmb3IgKGludCBpID0gMTsgaSA8IG47IGkgKyspCgkJcG93ZXJbaV0gPSBwb3dlcltpLTFdICogYmFzZTsKCWZvciAoaW50IGkgPSAwOyBpIDwgcTsgaSArKykgewoJCWludCBhLCBiOwoJCXNjYW5mKCIlZCVkIiwgJmEsICZiKTsKCQlhIC0tOwoJCWludCBsZW4gPSBiIC0gYSwgcmVzID0gMTsKCQlmb3IgKGludCBqID0gMDsgaiA8IHByaW1lW2xlbl0uc2l6ZSgpOyBqICsrKSB7CgkJCWludCBwID0gcHJpbWVbbGVuXVtqXS5maXJzdCwgY250ID0gcHJpbWVbbGVuXVtqXS5zZWNvbmQsIG5vdyA9IDE7CgkJCWZvciAoaW50IGsgPSAwOyBrIDwgY250OyBrICsrKSBub3cgKj0gcDsKCQkJZm9yIChpbnQgayA9IGNudDsgayA+IDA7IGsgLS0pIHsKCQkJCWludCBsID0gbGVuIC8gbm93OwoJCQkJbG9uZyBsb25nIHQxID0gaGFzaFtiLWxdIC0gaGFzaFthXSAqIHBvd2VyW2ItYS1sXTsKCQkJCWxvbmcgbG9uZyB0MiA9IGhhc2hbYl0gLSBoYXNoW2ErbF0gKiBwb3dlcltiLWEtbF07CgkJCQlpZiAodDEgPT0gdDIpIHsKCQkJCQlyZXMgKj0gbm93OwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJbm93IC89IHA7CgkJCX0KCQl9CgkJcHJpbnRmKCIlZFxuIiwgbGVuIC8gcmVzKTsKCX0KCQoJcmV0dXJuIDA7Cn0K