#!/usr/bin/perl

####################
# generic shifting code

sub charvalue {
  my $char = substr($_[0],0,1);
  if ($char ge 'a' and $char le 'z') {
    return ord($char) - ord('a');
  } elsif ($char ge 'A' and $char le 'Z') {
    return ord($char) - ord('A');
  }
  return -1;
}

sub valuechar {
  my ($value, $base) = @_;
  return "_" if ($value < 0);
  return chr(ord($base) + $value);
}

sub shiftchar {
  my ($shift, $char) = ($_[0], substr($_[1],0,1));
  my $base;
  if ($char ge 'a' and $char le 'z') {
    $base = 'a';
  } elsif ($char ge 'A' and $char le 'Z') {
    $base = 'A';
  } else {
    return $char;
  }
  my $val = (charvalue($char) + $shift) % 26;
  $val += 26 while ($val < 0);
  return valuechar($val, $base);
}

sub shift_caesar {
  my ($value, $message) = @_;
  my @message = split('',$message);
  my $answer;
  foreach (@message) {
    $answer .= shiftchar($value, $_);
  }
  return $answer;
}

sub shift_vigenere {
  my ($value, $message) = @_;
  my @message = split('',$message);
  $value =~ tr/a-z/A-Z/;
  $value =~ s/[^A-Z]//g;
  my @offsets;
  foreach ((split '', $value)) {
    push @offsets, (charvalue $_);
  }
  my $length = scalar @offsets;
  return $message if ($length <= 0);
  my $answer;
  foreach (0..$#message) {
    $answer .= shiftchar($offsets[$_ % $length], $message[$_]);
  }
  return $answer;
}

#####################

$val = -11;
foreach (<>) {
  print shift_caesar $val, $_;
  ++$val;
}
