def compute_prefix_function(pattern): m = len(pattern) prefix = [0] * m k = 0 # length of the previous longest prefix suffix for q in range(1, m): while k > 0 and pattern[k] != pattern[q]: k = prefix[k-1] if pattern[k] == pattern[q]: k += 1 prefix[q] = k return prefix def kmp_search(text, pattern, prefix): n = len(text) m = len(pattern) q = 0 # current index in pattern positions = [] for i in range(n): while q > 0 and pattern[q] != text[i]: q = prefix[q-1] if pattern[q] == text[i]: q += 1 if q == m: positions.append(i - m + 1) q = prefix[q-1] # look for next possible match return positions def main(): import sys input = sys.stdin.read().split() idx = 0 N = int(input[idx]) idx += 1 A = list(map(int, input[idx:idx+N])) idx += N S = input[idx].strip() if len(S) != N-1: print(-1) return # Generate the 'rel' array rel = [] for i in range(N): j = (i + 1) % N if A[i] < A[j]: rel.append('<') else: rel.append('>') # Text is rel concatenated twice T = rel + rel # Check if pattern is longer than N-1 pattern = list(S) m = len(pattern) if m != N-1: print(-1) return # Compute prefix function for KMP prefix = compute_prefix_function(pattern) # Find all occurrences of pattern in T positions = kmp_search(T, pattern, prefix) # Check valid k (0 <= k < N) valid_ks = [k for k in positions if 0 <= k < N] if valid_ks: print(min(valid_ks)) else: print(-1) if __name__ == '__main__': main()