def add_labels_to_predictions_strict(preds, golds, strict=True):
    """
    Returns predictions and missed gold annotations with
    a "label" key, which can take one of "TP", "FP", or "FN".
    """
    pred_spans = {(s["start"], s["end"]) for s in preds}
    gold_spans = {(s["start"], s["end"]) for s in golds}
    outspans = []
    for pred in preds:
        pred_span = (pred["start"], pred["end"])
        if pred_span in gold_spans:
            label = "TP"
        else:
            label = "FP"
        pred_copy = dict(pred)
        pred_copy["label"] = label
        outspans.append(pred_copy)

    for gold in golds:
        if (gold["start"], gold["end"]) not in pred_spans:
            gold_copy = dict(gold)
            gold_copy["label"] = "FN"
            outspans.append(gold_copy)

    return sorted(outspans, key=lambda s: s["start"])