#include <bits/stdc++.h>
using namespace std;
long long mod = 10e9 + 7;
long long gcd(long long a, long long b) {
  if (b == 0)
    return a;
  else
    return gcd(b, a % b);
}
long long modularExp(long long x, long long n, long long mod) {
  long long result = 1;
  while (n > 0) {
    if (n % 2 == 1) result = (result * x) % mod;
    x = ((x % mod) * (x % mod)) % mod;
    n = n / 2;
  }
  return (result) % mod;
}
bool isPrime(long long n) {
  for (long long i = 2; i * i <= n; i++)
    if (n % i == 0) return false;
  return true;
}
long long n;
string s;
vector<long long> v[26];
bool check(string st, long long mid) {
  string ns = s.substr(0, mid);
  sort(ns.begin(), ns.end());
  long long i, j;
  while (i < mid && j < st.length()) {
    if (ns[i] == st[j]) {
      i += 1;
      j += 1;
    } else
      i += 1;
  }
  if (j == st.length())
    return true;
  else
    return false;
}
int main() {
  cin >> n;
  cin >> s;
  long long i;
  for (i = 0; i < n; i++) v[s[i] - 'a'].push_back(i);
  long long t;
  cin >> t;
  while (t--) {
    string st;
    cin >> st;
    long long l = st.length();
    sort(st.begin(), st.end());
    long long ans = -1;
    long long rec = 0;
    for (i = 0; i < l; i++) {
      if (i > 0 && st[i] == st[i - 1]) {
        rec += 1;
        ans = max(ans, v[st[i] - 'a'][rec]);
      } else {
        rec = 0;
        ans = max(ans, v[st[i] - 'a'][rec]);
      }
    }
    cout << ans + 1 << "\n";
  }
}
