import scala.annotation.tailrec
import scala.collection.mutable


import scala.io.StdIn._
object Main extends App {
  val letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  solve(readLine.trim)
  @tailrec def solve(arg: String): Unit = {
    if (arg != ".") {
      println(arg.foldLeft(List(Nil): List[List[Char]]){
        case (list, '?') ⇒ list.flatMap(l ⇒ letters.map(c ⇒ c::l))
        case (list, c) ⇒ list.map(l ⇒ c::l)
      }.map(_.reverse).flatMap {l ⇒
        l match {
          case Chiper(chiper, Nil) ⇒ Some(chiper.mkString(""))
          case _ ⇒ None
        }
      } match {
        case Nil ⇒ "."
        case l ⇒ l.min
      })
      solve(readLine.trim)
    }

  }
  object Chiper {
    def unapply(arg: List[Char]): Option[(List[Char], List[Char])] = {
      arg match {
        case l LetterSeq rest ⇒
          rest match {
            case Nil ⇒ Some(l, Nil)
            case c Chiper r ⇒ Some(l ++ c, r)
            case _ ⇒ Some(l, rest)
          }
        case _ ⇒ None
      }
    }
  }
  object Letter {
    def unapply(arg: List[Char]): Option[(Char, List[Char])] = {
      arg match {
        case '+'::(l Letter t) ⇒ Some((((l + 1 - 'A') % 26 + 'A').toChar, t))
        case '-'::(l Letter t) ⇒ Some((((l + 25 - 'A') % 26 + 'A').toChar, t))
        case c::r if c.isLetter ⇒ Some((c, r))
        case _ ⇒ None
      }
    }
  }
  object LetterSeq {
    def unapply(arg: List[Char]): Option[(List[Char], List[Char])] = {
      arg match {
        case '['::(seq Chiper ']'::rest) ⇒ Some((seq.reverse, rest))
        case c Letter (seq LetterSeq rest) ⇒ Some((c :: seq, rest))
        case c Letter rest ⇒ Some((List(c), rest))
        case _ ⇒ None
      }
    }
  }
}
