import sys

def profiler(frame, event, arg):
    if event == 'call':
        print(f"[ENTER] Context: {frame.f_code.co_name}")
    elif event == 'return':
        print(f"[EXIT] Context: {frame.f_code.co_name}")

def print_call_stack_decorator(func):
    def wrapper(*args, **kwargs):
        orig_profile = sys.getprofile()
        sys.setprofile(profiler)
        value = func(*args, **kwargs)
        sys.setprofile(orig_profile)
        return value
    return wrapper

def c():
    print("c")

def b():
    c()
    print('b')

@print_call_stack_decorator
def a():
    b()
    print('a')

a()