import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    private static long[] t;
    private static long[]codes;
    private static final long prime = 61;
    private static long[] pows;
    private static void build (int v, int tl, int tr) {
        if (tl == tr){
            t[v] = (codes[tl] * pows[tl - 1]);
        }
        else {
            int tm = (tl + tr) / 2;
            build (2 * v, tl, tm);
            build (2 * v + 1, tm + 1, tr);
            t[v] = (t[2 * v] + t[2 * v + 1]);
        }
    }

    private static long sum (int v, int tl, int tr, int l, int r) {
        if (l > r){
            return 0;
        }
        if (l == tl && r == tr)
            return t[v];
        int tm = (tl + tr) / 2;
        return sum (2 * v, tl, tm, l, Math.min(r, tm))
                + sum (2 * v + 1, tm + 1, tr, Math.max(l, tm + 1), r);
    }

    private static void update (int v, int tl, int tr, int pos, long newVal) {
        if (tl == tr)
            t[v] = (newVal * pows[pos - 1]);
        else {
            int tm = (tl + tr) / 2;
            if (pos <= tm)
                update (v*2, tl, tm, pos, newVal);
            else
                update (2 * v + 1, tm + 1, tr, pos, newVal);
            t[v] = (t[2 * v] + t[2 * v + 1]);
        }
    }
    public static void main(String[] args) throws Exception{
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String[] params = bufferedReader.readLine().split(" ");
        int n = Integer.parseInt(params[0]);
        codes = new long[n + 1];
        pows = new long[n + 1];
        t = new long[4 * n];
        int k = Integer.parseInt(params[1]);
        String a = bufferedReader.readLine();
        for (int i = 1; i <= n; i++) {
            codes[i] = a.charAt(i - 1) - 'A' + 1;
        }
        pows[0] = 1;
        for (int i = 1; i <= n; i++) {
            pows[i] = pows[i - 1] * prime;
        }
        build(1, 1, n);
        for (int t = 0; t <k; t++) {
            char q = (char) bufferedReader.read();
            bufferedReader.skip(1);
            if (q == '?') {
                String[] query = bufferedReader.readLine().split(" ");
                int i = Integer.parseInt(query[0]);
                int j = Integer.parseInt(query[1]);
                int len = Integer.parseInt(query[2]);
                if (i > j) {
                    int temp = i;
                    i = j;
                    j = temp;
                }
                // System.out.println(sum(1, 1, n, i, i + len - 1) * pows[j - i]);
                // System.out.println( sum(1, 1, n, j, j + len - 1));
                if(sum(1, 1, n, i, i + len - 1) * pows[j - i] == sum(1, 1, n, j, j + len - 1)){
                    System.out.print("+");
                }
                else{
                    System.out.print("-");
                }
            }
            else if(q == '*') {
                String[] query = bufferedReader.readLine().split(" ");
                int temp = Integer.parseInt(query[0]);
                char c = query[1].charAt(0);
                update(1, 1, n, temp, c - 'A' + 1);
            }
        }
    }
}