text: # Task 3:
  
  # Нужно написать функцию, которая получает на вход словарь с интервалами и
  # возвращает время общего присутствия ученика и учителя на уроке (в секундах).
  
  from flask import Flask
  
  app = Flask(__name__)
  
  
  def check_even_number(timastamps):
      if len(timastamps) % 2 == 0:
          return True
      else:
          return False
  
  
  @app.route('/joint_time', methods=['GET'])
  def appearance(intervals):
      if not check_even_number(intervals['lesson']):
          return f"Нечетное число элементов в lesson: {intervals['lesson']}"
      if not check_even_number(intervals['pupil']):
          return f"Нечетное число элементов в pupil: {intervals['pupil']}"
      if not check_even_number(intervals['tutor']):
          return f"Нечетное число элементов в tutor: {intervals['tutor']}"
  
      all_timestamps = []
      for ranges in intervals.values():
          for index, timestamp in enumerate(ranges):
              if index % 2 == 0:
                  all_timestamps.append((timestamp, True))
              else:
                  all_timestamps.append((timestamp, False))
  
      all_timestamps.sort()
  
      count = 0
      start_time = 0
      joint_time = 0
  
      for timestamp in all_timestamps:
          if timestamp[1]:
              if count < 3:
                  count += 1
              if count == 3:
                  start_time = timestamp[0]
          else:
              if count == 3:
                  joint_time += (timestamp[0] - start_time)
              if count != 0:
                  count -= 1
  
      return joint_time
  
  
  tests = [
     {'data': {'lesson': [1594663200, 1594666800],
               'pupil': [1594663340, 1594663389,
                         1594663390, 1594663395,
                         1594663396, 1594666472],
               'tutor': [1594663290, 1594663430,
                         1594663443, 1594666473]},
      'answer': 3117
      },
     {'data': {'lesson': [1594702800, 1594706400],
               'pupil': [1594702789, 1594704500,
                         1594702807, 1594704542,
                         1594704512, 1594704513,
                         1594704564, 1594705150,
                         1594704581, 1594704582,
                         1594704734, 1594705009,
                         1594705095, 1594705096,
                         1594705106, 1594706480,
                         1594705158, 1594705773,
                         1594705849, 1594706480,
                         1594706500, 1594706875,
                         1594706502, 1594706503,
                         1594706524, 1594706524,
                         1594706579, 1594706641],
               'tutor': [1594700035, 1594700364,
                         1594702749, 1594705148,
                         1594705149, 1594706463]},
      'answer': 3180 # 3577
      },
     {'data': {'lesson': [1594692000, 1594695600],
               'pupil': [1594692033, 1594696347],
               'tutor': [1594692017, 1594692066,
                         1594692068, 1594696341]},
      'answer': 3565
      },
  ]
  
  if __name__ == '__main__':
      for i, test in enumerate(tests):
          test_answer = appearance(test['data'])
          assert test_answer == test['answer'], f'Error on test case {i}, ' \
                                                f'got {test_answer}, ' \
                                                f'expected {test["answer"]}'
  
  