{-# LANGUAGE BangPatterns #-}
import Control.Arrow (second)
import Control.Monad
import Control.Monad.Fix
import Data.List (foldl')
import qualified Data.Vector.Unboxed as V
import qualified Data.Vector.Unboxed.Mutable as VM
import qualified Data.ByteString.Char8 as B
import System.IO.Unsafe

modular :: Int
modular = 1000000007

solve :: Int -> B.ByteString -> B.ByteString -> Int
solve !n !s1 !s2 = (\(_,_,acc) -> acc) $ foldl' (\(!pre1,!pre2,!acc) i ->
  let ch1 = s1 `B.index` i; ch2 = s2 `B.index` i in
  if ch1 == pre1  -- skip if letters are same as previous
    then (pre1,pre2,acc)
    else
      if pre1 == pre2 then (ch1,ch2,2 `times` acc)
      else if ch1 == ch2 then (ch1,ch2,acc)
      else (ch1,ch2,3 `times` acc)
  ) (let ch1 = B.head s1; ch2 = B.head s2 in (ch1,ch2,if ch1 == ch2 then 3 else 6)) [1..n-1]
  where
    times !x !y = (x * y) `mod` modular

main = do
  let readInt = fmap (second B.tail) . B.readInt

  Just (n,_) <- readInt <$> B.getLine
  s1 <- B.getLine
  s2 <- B.getLine
  print $ solve n s1 s2
