def parse(path):
    with open(os.path.join(os.getcwd(), path), "r") as data:
        total_jobs, total_machines, max_operations = re.findall(
            '\S+', data.readline())
        number_total_jobs, number_total_machines, number_max_operations = int(
            total_jobs), int(total_machines), int(float(max_operations))
        jobs_list = []
        # Current job's id
        id_job = 1

        for key, line in enumerate(data):
            if key >= number_total_jobs:
                break
            # Split data with multiple spaces as separator
            parsed_line = re.findall('\S+', line)
            # Current job
            job = Job(id_job)
            # Current activity's id
            id_activity = 1
            # Current item of the parsed line
            i = 1

            while i < len(parsed_line):
                # Total number of operations for the activity
                number_operations = int(parsed_line[i])
                # Current activity
                activity = Activity(job, id_activity)
                for id_operation in range(1, number_operations + 1):
                    activity.add_operation(
                        Operation(id_operation,
                                  int(parsed_line[i + 2 * id_operation - 1]),
                                  int(parsed_line[i + 2 * id_operation])))

                job.add_activity(activity)
                i += 1 + 2 * number_operations
                id_activity += 1

            jobs_list.append(job)
            id_job += 1

    # Machines
    machines_list = []
    for id_machine in range(1, number_total_machines + 1):
        machines_list.append(Machine(id_machine, number_max_operations))

    return jobs_list, machines_list, number_max_operations