#!/usr/bin/env python3
"""
GetSharpe.io — Market Data Feed Parser

Parse a raw market data feed of order book messages and output
BBO (Best Bid and Offer) snapshots at regular intervals.

Input format (stdin):
  Line 1: NUM_MESSAGES SNAPSHOT_INTERVAL
  Lines 2..N+1: One of:
    A,TIMESTAMP,ORDER_ID,SIDE,PRICE,QUANTITY    (Add order)
    M,TIMESTAMP,ORDER_ID,NEW_QUANTITY            (Modify order)
    D,TIMESTAMP,ORDER_ID                         (Delete order)
    T,TIMESTAMP,ORDER_ID,EXEC_QUANTITY            (Trade/execute)

Output format (stdout):
  After every SNAPSHOT_INTERVAL messages, output:
    TIMESTAMP,BID_PRICE,BID_QUANTITY,ASK_PRICE,ASK_QUANTITY
"""
import sys


def main():
    data = sys.stdin.read().split('\n')
    idx = 0

    header = data[idx].split()
    num_messages = int(header[0])
    snapshot_interval = int(header[1])
    idx += 1

    # TODO: Initialize your order book data structures
    #
    # Suggested:
    #   orders = {}            # order_id -> (side, price, quantity)
    #   bid_levels = {}        # price -> aggregate quantity
    #   ask_levels = {}        # price -> aggregate quantity

    output = []

    for i in range(1, num_messages + 1):
        line = data[idx]
        idx += 1
        parts = line.split(',')
        msg_type = parts[0]
        timestamp = int(parts[1])

        if msg_type == 'A':
            order_id = int(parts[2])
            side = parts[3]
            price = int(parts[4])
            quantity = int(parts[5])
            # TODO: Add order to book

        elif msg_type == 'M':
            order_id = int(parts[2])
            new_qty = int(parts[3])
            # TODO: Modify order quantity (if new_qty == 0, treat as delete)

        elif msg_type == 'D':
            order_id = int(parts[2])
            # TODO: Delete order from book

        elif msg_type == 'T':
            order_id = int(parts[2])
            exec_qty = int(parts[3])
            # TODO: Execute trade (reduce quantity, remove if zero)

        if i % snapshot_interval == 0:
            # TODO: Find best bid (highest bid price) and best ask (lowest ask price)
            # bid_price, bid_qty = ...
            # ask_price, ask_qty = ...
            # output.append(f"{timestamp},{bid_price},{bid_qty},{ask_price},{ask_qty}")
            pass

    print('\n'.join(output))


if __name__ == '__main__':
    main()
