/* The Computer Language Shootout
   http://shootout.alioth.debian.org/
   contributed by Isaac Gouy
*/

import java.io._
import scala.collection.mutable.Stack

object revcomp { 

   val IUB = IUBCodeComplements

   def IUBCodeComplements() = {
      val code = "ABCDGHKMNRSTVWYabcdghkmnrstvwy".getBytes
      val comp = "TVGHCDMKNYSABWRTVGHCDMKNYSABWR".getBytes
      val a: Array[byte] = new Array( 'z'.toByte )

      for (val indexValue <- code zip comp)
         indexValue match { case Pair(i,v) => a(i) = v }

      a
   }


   type LineStack = Stack[Array[byte]]

   def main(args: Array[String]) = {
      val r = new BufferedReader(new InputStreamReader(System.in))
      val w = new BufferedOutputStream(System.out)

      var lines: LineStack = new Stack
      var desc = ""

      var line = r.readLine
      while (line != null) {
         val c = line.charAt(0)
         if (c == '>'){
            if (desc.length > 0){
               complementReverseWrite(desc, lines, w)
               lines = new Stack
            }
            desc = line
         } else {
            if (c != ';') lines += line.getBytes
         }
         line = r.readLine
      }
      r.close

      if (desc.length > 0) complementReverseWrite(desc, lines, w)
      w.close
   } 


   def complementReverseWrite(desc: String, lines: LineStack, 
         w: BufferedOutputStream) = {

      def inplaceComplementReverse(b: Array[byte]) = {
         var i = 0 
         var j = b.length - 1
         while (i < j){
            val swap = b(i) 
            b(i) = IUB( b(j) ) 
            b(j) = IUB( swap )
            i = i + 1
            j = j - 1
         }
         if (i == j) b(i) = IUB( b(i) )
      }

      val nl = '\n'.toByte
      w.write(desc.getBytes); w.write(nl)

      val n = 60
      val k = if (lines.isEmpty) 0 else lines.top.length
      val isSplitLine = k < n
      var isFirstLine = true

      while (!lines.isEmpty) {
        val line = lines.pop
        inplaceComplementReverse(line)
        
        if (isSplitLine){
           if (isFirstLine){ w.write(line); isFirstLine = false }
           else { w.write(line,0,n-k); w.write(nl); w.write(line,n-k,k) }
        } 
        else { w.write(line); w.write(nl) }
      }
      if (isSplitLine && !isFirstLine) w.write(nl)
   }

}
