package main
import (
"bufio"
"fmt"
"os"
)
type Node struct {
l, r *Node
pr uint32
sz int64
isLeaf bool
L, R int
}
var base []byte
var rng uint32 = 123456789
func nextRand() uint32 {
rng ^= rng << 13
rng ^= rng >> 17
rng ^= rng << 5
return rng
}
func sz(t *Node) int64 {
if t == nil {
return 0
}
return t.sz
}
func pull(t *Node) {
if t == nil {
return
}
if t.isLeaf {
t.sz = int64(t.R-t.L+1)
} else {
t.sz = sz(t.l) + sz(t.r)
}
}
func newLeaf(L, R int) *Node {
n := &Node{pr: nextRand(), isLeaf: true, L: L, R: R}
pull(n)
return n
}
func clone(t *Node) *Node {
if t == nil {
return nil
}
n := *t
return &n
}
func split(t *Node, k int64) (a, b *Node) {
if t == nil {
return nil, nil
}
if k <= 0 {
return nil, t
}
if k >= sz(t) {
return t, nil
}
if t.isLeaf {
lenLeaf := int64(t.R - t.L + 1)
if k >= lenLeaf {
return t, nil
}
leftL := t.L
leftR := t.L + int(k) - 1
rightL := leftR + 1
rightR := t.R
return newLeaf(leftL, leftR), newLeaf(rightL, rightR)
}
t2 := clone(t)
if sz(t2.l) >= k {
la, lb := split(t2.l, k)
t2.l = lb
pull(t2)
return la, t2
}
ra, rb := split(t2.r, k-sz(t2.l))
t2.r = ra
pull(t2)
return t2, rb
}
func merge(a, b *Node) *Node {
if a == nil {
return b
}
if b == nil {
return a
}
if a.pr < b.pr {
a2 := clone(a)
a2.r = merge(a2.r, b)
pull(a2)
return a2
}
b2 := clone(b)
b2.l = merge(a, b2.l)
pull(b2)
return b2
}
func kth(t *Node, k int64) byte {
for {
if t.isLeaf {
return base[t.L+int(k)]
}
ls := sz(t.l)
if k < ls {
t = t.l
} else {
k -= ls
t = t.r
}
}
}
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var n, q int
fmt.Fscan(in, &n, &q)
var s string
fmt.Fscan(in, &s)
base = []byte(s)
root := newLeaf(0, n-1)
for ; q > 0; q-- {
var tp int
fmt.Fscan(in, &tp)
if tp == 1 {
var l, r int64
fmt.Fscan(in, &l, &r)
if l > 0 {
l--
}
if r > 0 {
r--
}
if l < 0 {
l = 0
}
if r >= sz(root) {
r = sz(root) - 1
}
if r < l {
continue
}
A, B := split(root, l)
M, C := split(B, r-l+1)
root = merge(A, merge(M, merge(M, C)))
} else {
var i int64
fmt.Fscan(in, &i)
if i > 0 {
i--
}
if i < 0 {
i = 0
}
if i >= sz(root) {
i = sz(root) - 1
}
fmt.Fprintln(out, string([]byte{kth(root, i)}))
}
}
}
cGFja2FnZSBtYWluCgppbXBvcnQgKAoJImJ1ZmlvIgoJImZtdCIKCSJvcyIKKQoKdHlwZSBOb2RlIHN0cnVjdCB7CglsLCByICAgKk5vZGUKCXByICAgICB1aW50MzIKCXN6ICAgICBpbnQ2NAoJaXNMZWFmIGJvb2wKCUwsIFIgICBpbnQKfQoKdmFyIGJhc2UgW11ieXRlCnZhciBybmcgdWludDMyID0gMTIzNDU2Nzg5CgpmdW5jIG5leHRSYW5kKCkgdWludDMyIHsKCXJuZyBePSBybmcgPDwgMTMKCXJuZyBePSBybmcgPj4gMTcKCXJuZyBePSBybmcgPDwgNQoJcmV0dXJuIHJuZwp9CgpmdW5jIHN6KHQgKk5vZGUpIGludDY0IHsKCWlmIHQgPT0gbmlsIHsKCQlyZXR1cm4gMAoJfQoJcmV0dXJuIHQuc3oKfQoKZnVuYyBwdWxsKHQgKk5vZGUpIHsKCWlmIHQgPT0gbmlsIHsKCQlyZXR1cm4KCX0KCWlmIHQuaXNMZWFmIHsKCQl0LnN6ID0gaW50NjQodC5SLXQuTCsxKQoJfSBlbHNlIHsKCQl0LnN6ID0gc3oodC5sKSArIHN6KHQucikKCX0KfQoKZnVuYyBuZXdMZWFmKEwsIFIgaW50KSAqTm9kZSB7CgluIDo9ICZOb2Rle3ByOiBuZXh0UmFuZCgpLCBpc0xlYWY6IHRydWUsIEw6IEwsIFI6IFJ9CglwdWxsKG4pCglyZXR1cm4gbgp9CgpmdW5jIGNsb25lKHQgKk5vZGUpICpOb2RlIHsKCWlmIHQgPT0gbmlsIHsKCQlyZXR1cm4gbmlsCgl9CgluIDo9ICp0CglyZXR1cm4gJm4KfQoKZnVuYyBzcGxpdCh0ICpOb2RlLCBrIGludDY0KSAoYSwgYiAqTm9kZSkgewoJaWYgdCA9PSBuaWwgewoJCXJldHVybiBuaWwsIG5pbAoJfQoJaWYgayA8PSAwIHsKCQlyZXR1cm4gbmlsLCB0Cgl9CglpZiBrID49IHN6KHQpIHsKCQlyZXR1cm4gdCwgbmlsCgl9CglpZiB0LmlzTGVhZiB7CgkJbGVuTGVhZiA6PSBpbnQ2NCh0LlIgLSB0LkwgKyAxKQoJCWlmIGsgPj0gbGVuTGVhZiB7CgkJCXJldHVybiB0LCBuaWwKCQl9CgkJbGVmdEwgOj0gdC5MCgkJbGVmdFIgOj0gdC5MICsgaW50KGspIC0gMQoJCXJpZ2h0TCA6PSBsZWZ0UiArIDEKCQlyaWdodFIgOj0gdC5SCgkJcmV0dXJuIG5ld0xlYWYobGVmdEwsIGxlZnRSKSwgbmV3TGVhZihyaWdodEwsIHJpZ2h0UikKCX0KCgl0MiA6PSBjbG9uZSh0KQoJaWYgc3oodDIubCkgPj0gayB7CgkJbGEsIGxiIDo9IHNwbGl0KHQyLmwsIGspCgkJdDIubCA9IGxiCgkJcHVsbCh0MikKCQlyZXR1cm4gbGEsIHQyCgl9CglyYSwgcmIgOj0gc3BsaXQodDIuciwgay1zeih0Mi5sKSkKCXQyLnIgPSByYQoJcHVsbCh0MikKCXJldHVybiB0MiwgcmIKfQoKZnVuYyBtZXJnZShhLCBiICpOb2RlKSAqTm9kZSB7CglpZiBhID09IG5pbCB7CgkJcmV0dXJuIGIKCX0KCWlmIGIgPT0gbmlsIHsKCQlyZXR1cm4gYQoJfQoJaWYgYS5wciA8IGIucHIgewoJCWEyIDo9IGNsb25lKGEpCgkJYTIuciA9IG1lcmdlKGEyLnIsIGIpCgkJcHVsbChhMikKCQlyZXR1cm4gYTIKCX0KCWIyIDo9IGNsb25lKGIpCgliMi5sID0gbWVyZ2UoYSwgYjIubCkKCXB1bGwoYjIpCglyZXR1cm4gYjIKfQoKZnVuYyBrdGgodCAqTm9kZSwgayBpbnQ2NCkgYnl0ZSB7Cglmb3IgewoJCWlmIHQuaXNMZWFmIHsKCQkJcmV0dXJuIGJhc2VbdC5MK2ludChrKV0KCQl9CgkJbHMgOj0gc3oodC5sKQoJCWlmIGsgPCBscyB7CgkJCXQgPSB0LmwKCQl9IGVsc2UgewoJCQlrIC09IGxzCgkJCXQgPSB0LnIKCQl9Cgl9Cn0KCmZ1bmMgbWFpbigpIHsKCWluIDo9IGJ1ZmlvLk5ld1JlYWRlcihvcy5TdGRpbikKCW91dCA6PSBidWZpby5OZXdXcml0ZXIob3MuU3Rkb3V0KQoJZGVmZXIgb3V0LkZsdXNoKCkKCgl2YXIgbiwgcSBpbnQKCWZtdC5Gc2NhbihpbiwgJm4sICZxKQoKCXZhciBzIHN0cmluZwoJZm10LkZzY2FuKGluLCAmcykKCWJhc2UgPSBbXWJ5dGUocykKCglyb290IDo9IG5ld0xlYWYoMCwgbi0xKQoKCWZvciA7IHEgPiAwOyBxLS0gewoJCXZhciB0cCBpbnQKCQlmbXQuRnNjYW4oaW4sICZ0cCkKCQlpZiB0cCA9PSAxIHsKCQkJdmFyIGwsIHIgaW50NjQKCQkJZm10LkZzY2FuKGluLCAmbCwgJnIpCgoJCQlpZiBsID4gMCB7CgkJCQlsLS0KCQkJfQoJCQlpZiByID4gMCB7CgkJCQlyLS0KCQkJfQoJCQlpZiBsIDwgMCB7CgkJCQlsID0gMAoJCQl9CgkJCWlmIHIgPj0gc3oocm9vdCkgewoJCQkJciA9IHN6KHJvb3QpIC0gMQoJCQl9CgkJCWlmIHIgPCBsIHsKCQkJCWNvbnRpbnVlCgkJCX0KCgkJCUEsIEIgOj0gc3BsaXQocm9vdCwgbCkKCQkJTSwgQyA6PSBzcGxpdChCLCByLWwrMSkKCQkJcm9vdCA9IG1lcmdlKEEsIG1lcmdlKE0sIG1lcmdlKE0sIEMpKSkKCQl9IGVsc2UgewoJCQl2YXIgaSBpbnQ2NAoJCQlmbXQuRnNjYW4oaW4sICZpKQoKCQkJaWYgaSA+IDAgewoJCQkJaS0tCgkJCX0KCQkJaWYgaSA8IDAgewoJCQkJaSA9IDAKCQkJfQoJCQlpZiBpID49IHN6KHJvb3QpIHsKCQkJCWkgPSBzeihyb290KSAtIDEKCQkJfQoKCQkJZm10LkZwcmludGxuKG91dCwgc3RyaW5nKFtdYnl0ZXtrdGgocm9vdCwgaSl9KSkKCQl9Cgl9Cn0K