INSTRUCTIONS = ARGF.read.split("\n")

def scramble(input)
  INSTRUCTIONS.each do |instruction|
    case instruction
    when /swap position (\d+) with position (\d+)/
      x = $1.to_i
      y = $2.to_i
      input[x], input[y] = input[y], input[x]
    when /swap letter (\w+) with letter (\w+)/
      x = $1
      y = $2
      input.tr!("#{x}#{y}", "#{y}#{x}")
    when /rotate (left|right) (\d+) steps?/
      steps = $2.to_i
      steps = -steps if $1 == 'right'
      input = input.chars.rotate(steps).join
    when /rotate based on position of letter (\w+)/
      index = input.index($1)
      index += 1 if index >= 4
      index += 1
      index = -index
      input = input.chars.rotate(index).join
    when /reverse positions (\d+) through (\d+)/
      x = $1.to_i
      y = $2.to_i
      input[x..y] = input[x..y].reverse
    when /move position (\d+) to position (\d+)/
      x = $1.to_i
      x = input[x]
      input[x] = ''

      y = $2.to_i
      input.insert(y, x)
    else
      raise "invalid instruction: '#{instruction}'"
    end
  end
  input
end

input = 'abcdefgh'.chars
input.permutation.each do |candidate|
  if scramble(candidate.join) == 'fbgdceah'
    puts candidate.join
    exit
  end
end