#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

vector<unsigned long long> t;
vector<unsigned long long> codes;
const unsigned long long prime = 61;
vector<unsigned  long long> pows;

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];
    }
}

unsigned long long sum (int v, int tl, int tr, int l, int r) {
    if (l > r){
        //cout << "here";
        return 0;
    }
    if (l == tl && r == tr)
        return t[v];
    int tm = (tl + tr) / 2;
    return sum (2 * v, tl, tm, l, min(r, tm))
           + sum (2 * v + 1, tm + 1, tr, max(l, tm + 1), r);
}

void update (int v, int tl, int tr, int pos, unsigned long 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];
    }
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n, k;
    cin >> n >> k;
    t.resize(4 * n);
    string a;
    cin >> a;
    codes.resize(n + 1);
    for(int i = 1; i <= n; i++){
        codes[i] = a[i - 1] - 'A' + 1;
    }
    pows.resize(n + 1);
    pows[0] = 1;
    for(int i = 1; i <= n; i++){
        pows[i] = pows[i - 1] * prime;
    }
    build(1, 1, n);
    cin.ignore();
    for(int t = 0; t < k; t++){
        char q;
        cin >> q;
        if(q == '?'){
            int i, j, len;
            cin >> i >> j >>len;
            if(i > j){
                swap(i, j);
            }
            if(sum(1, 1, n, i, i + len - 1) * pows[j - i] == sum(1, 1, n, j, j + len - 1)){
                cout << "+";
            }
            else{
                cout << "-";
            }
        }
        else if(q == '*'){
            int temp;
            char c;
            cin >> temp >> c;
            update(1, 1, n, temp, c - 'A' + 1);
        }
        cin.ignore();
    }
    return 0;
}