At the North Pole, Santa’s workshop runs a special **environmental sound system** to train the reindeer and entertain the elves while they prepare gifts. The system uses recordings of real-world environmental sounds — like wind, footsteps, and birds — to simulate different outdoor conditions in miniature training fields.

One hectic December morning, a young elf named **Jingle** accidentally spilled hot cocoa over the main audio mixer. The spill caused the recorder to **combine two separate environmental recordings into a single track**. Now, each file contains **two overlapping sounds**, making it impossible for the reindeer to train properly and for the elves to time the festive music and toy assembly correctly.

You’ve been hired as Santa’s **Audio Restoration Elf** to separate each mixed recording back into its original environmental sources, so the workshop can run smoothly for Christmas Eve.

For each mixed recording, reconstruct the **two original environmental audio sources**.

- Each input contains exactly two overlaid sounds
- The order of output signals does not matter

**Input**
  - One mixed audio waveform of length **16,000**

**Output**
  - Two reconstructed waveforms:
    - `sig_1` — length 16,000
    - `sig_2` — length 16,000
  - Values are continuous floats

Metric is **Mean Squared Error** for both sound arrays.

## Dataset

The elves organized the available data as follows:

```
data/
  train.csv
  test.csv
```

**Training Set (`train.csv`)**
  - Columns:
    - `file` — path to the mixed audio recording
    - `sig_1` — first original environmental sound
    - `sig_2` — second original environmental sound
  - Mono audio signals
  - Each signal contains exactly **16,000 samples**

**Test Set (`test.csv`)**
  - Columns:
    - `ID`
    - `file` — path to a mixed audio recording
  - Ground truth signals are not provided

### Evaluation Metric

The score is a **per-sample permutation-invariant mean squared error (MSE)**.

For each sample, two matchings are considered and the smaller error is used:  
`min( MSE(sig_1, sig_1_hat) + MSE(sig_2, sig_2_hat), MSE(sig_1, sig_2_hat) + MSE(sig_2, sig_1_hat) )`

The final score is the average of this value over all samples.  
Lower is better.

## Submission

Submit a file named **`submission.csv`**.

- Columns:
  - `ID` — must match `test.csv`
  - `sig_1` — Base85-encoded float32 array
  - `sig_2` — Base85-encoded float32 array
- Each decoded signal must contain exactly **16,000 float32 values**
- Row order must exactly match `test.csv`

Submissions not following this format will be considered invalid.