object Main extends App {
  val sc = new java.util.Scanner(System.in)
  val n = sc.nextInt()
  val s = sc.next()
  val q = sc.nextInt()
  val seg = new SegmentTree()
  seg.init(n)
  for (i <- 0 until n) {
    seg.update(i, 1 << (s(i) - 'a'))
  }
  for (i <- 0 until q) {
    val t = sc.nextInt()
    if (t == 1) {
      val i = sc.nextInt() - 1
      val c = sc.next()(0)
      seg.update(i, 1 << (c - 'a'))
    } else {
      val l, r = sc.nextInt() - 1
      println(bitCount(seg.query(l, r + 1, 0, 0, seg.n)))
    }
  }
  def bitCount(n: Int): Int = {
    var i = n
    i = i - ((i >>> 1) & 0x55555555)
    i = (i & 0x33333333) + ((i >>> 2) & 0x33333333)
    i = (i + (i >>> 4)) & 0x0f0f0f0f
    i = i + (i >>> 8)
    i = i + (i >>> 16)
    i & 0x3f
  }
  class SegmentTree {
    var n = 1
    val id = 0
    var node = Array[Int]()
    def init(sz: Int) {
      n = 1
      while (n < sz) n *= 2
      node = Array.fill(2 * n - 1)(id)
    }
    def update(i: Int, k: Int) = {
      var x = i + n - 1
      node(x) = k
      while (x > 0) {
        x = (x - 1) / 2
        node(x) = node(2 * x + 1) | node(2 * x + 2)
      }
    }
    def query(a: Int, b: Int, k: Int, l: Int, r: Int): Int = {
      if (r <= a || b <= l) {
        id
      } else if (a <= l && r <= b) {
        node(k)
      } else {
        val lv = query(a, b, 2 * k + 1, l, (l + r) / 2)
        val rv = query(a, b, 2 * k + 2, (l + r) / 2, r)
        (lv | rv)
      }
    }
  }
}
