import java.io.{BufferedReader, InputStream, InputStreamReader}
import java.util.StringTokenizer

object Main {

  val MOD = 1000000007

  def solve(): Unit = {
    val sc = new FastScanner(System.in)
    val N = sc.nextInt
    val S1 = sc.next
    val S2 = sc.next
    var ans: Long = 1
    var prev = 0

    def countSame(remain:  List[Char], prevChar: Char, prevCnt: Int, building: List[Int]): List[Int] = remain match {
      case Nil => prevCnt :: building
      case c :: next =>
        c match {
          case `prevChar` => countSame(next, c, prevCnt + 1, building)
          case _ => countSame(next, c, 1, prevCnt :: building)
        }
    }
    val cases = countSame(S1.drop(1).toList, S1.head, 1, Nil).reverse
    cases foreach { cur =>
      val mult = (prev, cur) match {
        case (0, 1) => 3
        case (0, 2) => 6
        case (1, 1) => 2
        case (1, 2) => 2
        case (2, 1) => 1
        case (2, 2) => 3
      }
      ans = ans * mult % MOD
      prev = cur
    }
    println(ans)
  }

  def main(args: Array[String]): Unit = {
    solve()
  }

  class FastScanner(val stream: InputStream) {
    val in = new BufferedReader(new InputStreamReader(stream))
    var st: StringTokenizer = _

    def next: String = {
      while (st == null || !st.hasMoreTokens) {
        val rl = in.readLine
        if (rl == null) return null
        st = new StringTokenizer(rl)
      }
      st.nextToken
    }

    def nextInt: Int = next.toInt
  }
}
