TL;DR
Long runs of numbers break LLMs not because the models lack brains, but because their attention gets “smeared” across hundreds of look-alike numbers. The fix is dead simple: insert a line break every N numbers. That is SepSeq — a way to structure input data with zero fine-tuning.
When a model sees 300 comma-separated numbers in a row, it loses focus: every number looks like every other, and the attention mechanism spreads its weights evenly across the whole sequence instead of zeroing in on the parts that matter. The result: ask it for the maximum of 300 values and it gets it wrong half the time. And adding Chain-of-Thought (“think step by step”) makes things worse, not better — the problem isn’t logic, it’s that the model simply can’t “see” the data.
Line breaks create “attention anchors” — special points that pull the model’s focus toward them. A long sequence turns into a series of short segments, and the model handles each one precisely. Accuracy on numeric tasks goes up by 35% on average, and token usage actually drops.
Want this for your own case? Apply this study to your task: AI adapts its method to what you are working on and writes the prompt.
Method Blueprint
The method applies in exactly one place — when you paste data into the prompt.
WITHOUT SepSeq (bad):
1.2, 1.5, 1.8, 2.1, 1.9, 2.3, 1.7, 2.0, 1.8, 2.2, 1.6, 2.4, ...
WITH SepSeq (good):
1.2, 1.5, 1.8, 2.1, 1.9
2.3, 1.7, 2.0, 1.8, 2.2
1.6, 2.4, ...
STEP 1: Take the number sequence
STEP 2: Split it into blocks of k numbers (k = 5–10 for long series)
STEP 3: Insert line breaks between the blocks
STEP 4: Paste the formatted data into the prompt as usual
All of this happens by hand before you send the prompt. The model needs no extra instructions.
Example in Action
Task: You’re a financial analyst. A client wants you to break down the revenue trend of their Amazon store over the last six months (180 days) and find growth streaks of 3+ days in a row.
Prompt without SepSeq (bad version):
Here is revenue for 180 days, in thousands of dollars:
45, 52, 38, 61, 49, 44, 67, 71, 68, 55, 42, 38, 77, 82, 91, 88, 79, 65,
43, 41, 59, 63, 71, 74, 68, 55, 44, 83, 91, 95, 88, 76, 61, 48, 45, 52...
[140+ more numbers in a row]
Find all growth streaks of 3 or more days in a row.
Prompt with SepSeq (working version):
Here is revenue for 180 days, in thousands of dollars (each line = 5 days):
45, 52, 38, 61, 49
44, 67, 71, 68, 55
42, 38, 77, 82, 91
88, 79, 65, 43, 41
59, 63, 71, 74, 68
55, 44, 83, 91, 95
88, 76, 61, 48, 45
...and so on
Day 1 = the first number on the first line.
Find all growth streaks of 3 or more days in a row. List the day numbers and values.
Result:
The model walks through the entire sequence with high accuracy, correctly compares neighboring values and returns a list of streaks with specific day numbers and values. Without formatting it will most likely miss some streaks or mix up positions; with formatting, accuracy jumps sharply on long series.
Why It Works
LLMs’ weak spot with numbers. Regular text is rich in meaning — the word “cat” looks nothing like “thunderstorm.” Numbers in a series look alike: 1.87 and 1.92 and 1.84. When there are 300 of them in a row, the attention mechanism doesn’t know where to look and bets on everything at once — which means on nothing in particular. Focus gets “smeared.”
How line breaks exploit this. The model treats \n (a line break) as a meaningful separator — stronger than a comma or a space. A line break pulls attention toward itself. When an “anchor” like that sits every 5 numbers, the model processes the sequence as a series of small blocks — and inside each block the focus is sharp.
Control knobs:
- Segment size (k) — the longer the series and the harder the task, the smaller k should be. For series of 30–100 numbers try k=10, for 100–500 use k=5
- Separator — \n works best; a double break \n\n creates harder boundaries between blocks if you need even crisper segmentation
- Data caption — add “each line = N values” or “day 1 = the first number” so the model understands the structure explicitly
Prompt Template
Here is {data_name} for {period} ({total_count} values).
Each line = {k} {unit}:
{number_1}, {number_2}, ..., {number_k}
{number_k+1}, {number_k+2}, ..., {number_2k}
...
{numbering_or_position_note}
{question_or_task}
Placeholders:
- {data_name} — “store revenue,” “dollar exchange rate,” “temperature,” “website traffic”
- {k} — segment size: 5 for long series (100+), 10 for shorter ones (30–100)
- {numbering} — optional: “Day 1 = the first number” or “Record 1 = line 1, position 1”
- {question} — a concrete task: find the maximum, count streaks, flag anomalies
🚀 Quick start — paste into the chat:
Help me apply the SepSeq method to format numeric data.
My task: {describe the task}.
Ask me questions so you can format the sequence correctly.
[paste the template above]
The LLM will ask about data volume and task type to pick the right segment size. It will take the pattern from the template and adapt it to your numbers.
Limitations
⚠️ Complex reasoning over numbers: If the task isn’t just finding a number but building a complex chain of reasoning across the whole series at once (say, “find all patterns correlated with X”), the gain is minimal — about +1%.
⚠️ Mixed data (numbers + text): The method is built for purely numeric sequences. If numbers are interleaved with text, the effect is weaker.
⚠️ Short series (under 30 numbers): No point in formatting. The gain is negligible because attention doesn’t have time to scatter anyway.
⚠️ Not a substitute for data preprocessing: If your data has outliers or gaps, or needs normalizing, clean it first, then format it with SepSeq.
How They Tested It
The idea was simple: take 9 different models (from the small Qwen3-8B up to Claude 3.7 Sonnet, Gemini 2.5 Pro and GPT-4) and check whether plain formatting helps where fancy techniques fail. The researchers compared four approaches: ordinary commas, Chain-of-Thought (“think step by step”), a single example in the prompt (ICL), and SepSeq with line breaks.
The most surprising result: CoT and ICL made accuracy worse — from 51.6% down to 49%. That’s a strong insight: the problem isn’t that the model “thinks poorly,” it’s that it literally “can’t see” the data in long number series. Adding an example or telling it to think step by step doesn’t help when attention is already scattered across 300 look-alike numbers.
On real-world data — stock prices and weather series — SepSeq delivered gains of +100% and +61% respectively. Especially impressive: the method cut token usage by 16.4% at the same time, because line breaks replace the spaces between numbers rather than being added on top.
Original from the Paper
Vanilla format:
"... How many 1's in [0 1 0 1 0 1 0 0 0] ..."
SepSeq format:
"... How many 1's in [0 1 0 1\n0 1 0 0\n0] ..."
Context: The authors show the smallest possible format change — commas between numbers are replaced with \n every k positions. The visual difference is trivial. The difference in accuracy is huge.
Adaptations and Extrapolations
💡 Adaptation for time series with dates:
Here are daily sales (in $K) for January–March 2025:
January (1–10): 45, 52, 38, 61, 49, 44, 67, 71, 68, 55
January (11–20): 42, 38, 77, 82, 91, 88, 79, 65, 43, 41
January (21–31): 59, 63, 71, 74, 68, 55, 44, 83, 91, 95, 88
February (1–10): 76, 61, 48, 45, 52, 58, 63, 69, 72, 66
...
Find the month with the highest volatility (max–min spread).
Blocking by calendar units — 10 values with an explicit date — lets the model use a positional anchor, not just a numeric one.
🔧 Technique: double break as a hard boundary → isolating periods
When you need to compare across periods (week vs. week) rather than search within one series:
Week 1:
120, 135, 118, 142, 155, 148, 161
Week 2:
98, 112, 127, 134, 119, 143, 156
Compare the average value by week. Which week showed stronger growth toward the end?
\n\n between blocks creates a stronger barrier than a single break — handy when segments need to be isolated from each other.
🔧 Technique: named positions → precise references
Position 1–5: 23.4, 24.1, 23.8, 25.2, 24.7
Position 6–10: 24.3, 23.9, 26.1, 25.8, 24.5
Position 11–15: 27.2, 26.8, 25.4, 28.1, 27.6
A sensor failure was logged at position 13.
Estimate the normal range for this position based on the neighboring values (11–12, 14–15).
Explicit position numbering lets you address specific elements precisely and ask the model to reason about particular indices.
Resources
Paper title: SepSeq: A Training-Free Framework for Long Numerical Sequence Processing in LLMs
Authors: Jie Sun, Yu Liu, Lu Han, Qiwen Deng, Xiang Shu, Yang Xiao, Xingyu Lu, Jun Zhou, Pengfei Liu, Lintao Ma, Jiancan Wu, Xiang Wang
Institutions: University of Science and Technology of China, Nanjing University, University of Edinburgh, East China Normal University, Hong Kong Polytechnic University, Zhejiang University, Ocean University of China, Shanghai Innovation Institute
Related work cited in the paper: SepLLM (Chen et al., 2024), StreamingLLM (Xiao et al., 2024), Chain-of-Thought prompting (Wei et al., 2023)