output_description: Print N lines. The i-th line (1 \leq i \leq N) should contain the maximum
  value among the N-1 elements other than A_i in the sequence.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N
      A_1
      :
      A_N
attempt: """長さNの整数A1,A2,...,ANが与えられる。1以上N以下の各整数iに対し、数列中のAiを除くN-1個の要素のうち、最大の値を求める
  
      N (int): 数列の個数
          Nは整数
          2≦N≦200000
      Ai...N list(int): 数列中の各整数
          整数
          1≦Ai≦200000
  
  考え方として、最大の数値のインデックスが指定された場合は2番目に大きな値を、
  それ以外は最大の数値を出力するようにすることで、数列全体を調査するコストを最小に減らすことができる。
  
  Raises:
      ValueError: 数列の個数に制約外の値が指定された場合
  """
  
  from typing import List, Any, Iterable
  
  
  SEQUENCE_LEN_MIN = 2
  SEQUENCE_LEN_MAX = 200000
  NUMERIC_MIN = 1
  NUMERIC_MAX = 200000
  
  
  class NumericInfo:
      """数列中の値とその値のインデックスを管理する"""
  
      def __init__(self):
          # 初期状態は言語仕様・制約上入力されない値を指定する
          self.index = -1
          self.value = NUMERIC_MIN - 1
  
      def update(self, idx: int, val: int):
          self.index = idx
          self.value = val
  
      def copy(self, info: Any):
          self.update(info.index, info.value)
  
  
  class SequenceProcessor:
      def __init__(self, sequence: List[int]):
          self.sequence_length = len(sequence)
          self.first_largest_num_info = NumericInfo()
          self.second_largest_num_info = NumericInfo()
          self._process(sequence)
  
      def _process(self, sequence: List[int]):
          """引数で渡される数列をもとに、後の処理で使うインスタンス変数を初期化する
              sequence_length (int): 配列の個数
              first_largest_num_info (NumericInfo): 最大値のインデックスと値
              second_largest_num_info (NumericInfo): 2番目に大きな値のインデックスと値
  
          Args:
              sequence (List[int]): 数列
          """
          for i, num in enumerate(sequence):
              if self.first_largest_num_info.value < num:
                  self.second_largest_num_info.copy(self.first_largest_num_info)
                  self.first_largest_num_info.update(i, num)
              elif self.second_largest_num_info.value < num:
                  self.second_largest_num_info.update(i, num)
  
      def _max_value(self, idx: int) -> int:
          """指定されたインデックスの値を除く、数列中の最大値を求める
  
          Args:
              idx (int): 指定されたインデックス
          """
          if idx == self.first_largest_num_info.index:
              return self.second_largest_num_info.value
          else:
              return self.first_largest_num_info.value
  
      def all_max_value(self) -> Iterable[int]:
          """数列全てのインデックスに対して、インデックスの値を除く、数列中の最大値を求める"""
          for i in range(self.sequence_length):
              yield self._max_value(i)
  
  
  def _validate_sequence_length(s: str):
      """入力値（数列の個数）が制約通りか検証する
  
      Args:
          s (str): 数列の個数が制約通りか検証する文字列
              制約1. 整数であること
              制約2. 2以上200000以下であること
      Raises:
          ValueError: 制約外の値が渡された場合
      """
      if not s.isdigit():
          raise ValueError("数列の個数の入力値が整数ではありません")
      r = int(s)
      if not SEQUENCE_LEN_MIN <= r <= SEQUENCE_LEN_MAX:
          raise ValueError(
              f"数列の個数は{SEQUENCE_LEN_MIN}から"
              f"{SEQUENCE_LEN_MAX}の間で指定してください"
          )
  
  
  def get_sequence_length_from_stdin() -> int:
      """数列の個数を標準入力から取得する
  
      Returns:
          int: 数列の個数
      """
      s = input()
      s = s.strip()
      _validate_sequence_length(s)
      return int(s)
  
  
  def _validate_numeric(s):
      """入力値（数値）が制約通りか検証する
  
      Args:
          s (str): 数値が制約通りか検証する文字列
              制約1. 整数であること
              制約2. 1以上200000以下であること
      Raises:
          ValueError: 制約外の値が渡された場合
      """
      if not s.isdigit():
          raise ValueError("数値の入力値が整数ではありません")
      r = int(s)
      if not NUMERIC_MIN <= r <= NUMERIC_MAX:
          raise ValueError(f"数値は{NUMERIC_MIN}から{NUMERIC_MAX}の間で指定してください")
  
  
  def get_sequence_from_stdin(length: int) -> List[int]:
      """標準入力から数列を作成する
  
      Args:
          length (int): 作成する数列の個数
  
      Returns:
          List[int]: 数列
      """
      result = []
      for i in range(1, length + 1):
          while True:
              n = input()
              try:
                  _validate_numeric(n)
                  result.append(int(n))
                  break
              except ValueError:
                  print("入力値に誤りがあります。再入力してください。")
                  continue
      return result
  
  
  def main():
      seq_len = get_sequence_length_from_stdin()
      sequence = get_sequence_from_stdin(seq_len)
      seq_processor = SequenceProcessor(sequence)
      for num in seq_processor.all_max_value():
          print(num)
  
  
  if __name__ == "__main__":
      main()
  
problem_description: Statement
  
  You are given a sequence of length N: A_1, A_2, ..., A_N. For each integer i
  between 1 and N (inclusive), answer the following question:
  
    * Find the maximum value among the N-1 elements other than A_i in the sequence.
samples: [{"input": "3\n    1\n    4\n    3", "output": "4\n    3\n    4\n    \n\n  * The maximum value among the two elements other than A_1, that is, A_2 = 4 and A_3 = 3, is 4.\n  * The maximum value among the two elements other than A_2, that is, A_1 = 1 and A_3 = 3, is 3.\n  * The maximum value among the two elements other than A_3, that is, A_1 = 1 and A_2 = 4, is 4.\n\n* * *"}, {"input": "2\n    5\n    5", "output": "5\n    5"}]