<!--
TEMPLATE: Math Problem Note (এই file টা একটা template — সরাসরি এটায় লিখো না)

- এটা math problem-এর জন্য note-এর template।
- প্রথমে এই file টা copy করো, তারপর সংশ্লিষ্ট level-এর `problems/` ফোল্ডারে
  `NNN-title.md` নামে রাখো (যেমন: `005-palindrome-number.md`)।
- নিচের প্রতিটা section নিজের ভাষায় পূরণ করো — কোনো section ফাঁকা রেখো না।
- মূল লক্ষ্য: উত্তর মুখস্থ করা নয়, **কীভাবে ভাবতে হয়** সেটা শেখা। তাই intuition,
  visualization আর "thinking tweak" section গুলোতে বেশি সময় দাও।
- note লেখা শেষ হলে এই comment block-টা মুছে দিতে পারো।
-->

# NNN — Problem Title

> উপরের H1-এ problem-এর number আর নাম বসাও (file-এর নামের সাথে মিল রেখে), যেমন: `# 005 — Palindrome Number`। তারপর এই হিন্ট লাইনটা মুছে দাও।

<div class="problem-source" markdown="1">

<p class="source-label" id="source">Problem link ও উৎস</p>

> Attribution-এর জন্য এই block। শুধু official link এখানে রাখো — problem statement কখনো copy কোরো না।

- **Original source:** মূল উৎসের নাম (যেমন: Classic exercise / নিজের বানানো / বই-এর নাম)
- **Platform:** কোন judge বা site + link (যেমন: LeetCode — <https://leetcode.com/problems/...>; না থাকলে `—`)
- **Topic:** কোন math topic (যেমন: parity, place value, GCD, modular arithmetic)
- **Difficulty:** Easy / Medium / Hard (নিজের ধারণা মতো)
- **Pattern:** এক লাইনে pattern-এর নাম (যেমন: digit extraction)
- **Basic idea inherited from:** কোন আগের problem/idea থেকে এসেছে (যেমন: 002 — Sum of Digits; একদম নতুন হলে `—`)

</div>

## প্রশ্ন ও উদাহরণ {#problem}

### সহজ করে প্রশ্ন {#1-problem-in-simple-words}

> Problem-টা একদম সহজ বাংলায়, নিজের ভাষায় বুঝিয়ে লেখো — যেন একজন বন্ধুকে বোঝাচ্ছ। Original statement copy কোরো না, নিজের মতো করে বলো।

### Input ও output {#6-example-input-and-output}

> অন্তত একটা concrete input আর তার expected output দেখাও। কোনো edge case থাকলে (যেমন: 0, negative, খুব বড় সংখ্যা) সেটাও আলাদা করে দাও।

### চেনা উদাহরণে বোঝা {#4-real-life-analogy}

> বাস্তব জীবনের একটা উদাহরণ দিয়ে বোঝাও যাতে intuition তৈরি হয় (যেমন: জোড়ায় জোড়ায় বাঁধা যায় = even, একটা বাকি থাকে = odd)।

## ভিত্তির ধারণা {#idea}

### আগের কোন ধারণাটি লাগবে {#3-which-basic-idea-does-this-inherit-from}

> এই problem কোন আগের বা সহজ idea-র উপর দাঁড়িয়ে আছে? Source block-এর "Basic idea inherited from" এখানে একটু বিস্তারিত বুঝিয়ে বলো।

### ভেতরের অঙ্ক {#2-what-is-the-math-idea}

> এর পেছনের core math concept-টা কী, এক-দুই লাইনে লেখো (যেমন: parity, place value, GCD, modular arithmetic)।

## ধাপে ধাপে সমাধান {#walkthrough}

### প্রথম সরল উপায় {#7-brute-force-thinking}

> সবচেয়ে সহজ, সরাসরি যে সমাধান প্রথমে মাথায় আসে সেটা লেখো — efficient না হলেও চলবে। আগে "কোনোভাবে হলেও হয়" এই version-টা লিখে ফেলো।

### কোথায় বেশি কাজ হতে পারে {#8-why-brute-force-may-be-slow}

> ওই brute force কেন ধীর হতে পারে বুঝিয়ে বলো — বড় input-এ কত সময় লাগবে, কোথায় একই কাজ বারবার হচ্ছে, বা কোথায় nested loop লাগছে।

### আরও ভালোভাবে ভাবা {#9-better-thinking}

> কীভাবে আরও ভালো বা দ্রুত করা যায়? মূল insight বা observation-টা লেখো যেটা সমাধানটা সহজ করে দেয়।

### ভাবনার পরিবর্তন {#10-thinking-tweak}

> ছোট্ট কোন চিন্তার মোচড় brute force থেকে optimal-এ নিয়ে গেল? এক লাইনের সেই "aha" মুহূর্তটা ধরো — এটাই note-এর প্রাণ।

### ছবিতে বোঝা {#5-visual-explanation}

> ছবি এঁকে বোঝাও — number line, box, বা table। নিচের fence-এ ASCII diagram আঁকো (নিজের example দিয়ে replace করো)।

```text
17  ->  [ 1 ][ 7 ]        (digit গুলো আলাদা box-এ)
sum =     1 + 7  = 8
```

### ছোট input-এ ধাপে ধাপে {#11-step-by-step-dry-run}

> একটা ছোট input নিয়ে হাতে হাতে চালাও — প্রতিটা step-এ variable-এর value কীভাবে বদলায় লেখো। নিচের মতো step list বানাও:

1. শুরুর অবস্থা: কোন variable-এ কী value আছে
2. Step 1: কী হলো, কোন value বদলালো
3. Step 2: কী হলো
4. শেষ অবস্থা: final answer কীভাবে এল

## কোড ও ব্যাখ্যা {#code}

### Python {#12-python-solution}

> পরিষ্কার, পড়ার মতো Python code লেখো। Comment কম রাখো, variable name অর্থপূর্ণ রাখো। নিচের fence-এ লেখো:

```python

```

### কোডের প্রতিটি অংশ {#13-line-by-line-explanation}

> Code-এর প্রতিটা গুরুত্বপূর্ণ লাইন বাংলায় বুঝিয়ে বলো — কেন ওই লাইন আছে আর কী করছে।

### Output মিলিয়ে দেখা {#14-output-walkthrough}

> Section 6-এর example দিয়ে code চালালে step by step কী output আসবে দেখাও — যেন কেউ code না চালিয়েও বুঝতে পারে।

## খরচ ও সাধারণ ভুল {#cost}

### সময় {#15-time-complexity}

> Big-O-তে time complexity লেখো আর এক লাইনে কেন সেটা বুঝিয়ে দাও (যেমন: O(log n) — প্রতি step-এ সংখ্যা 10 দিয়ে ভাগ হচ্ছে)।

### অতিরিক্ত জায়গা {#16-space-complexity}

> কত extra memory লাগছে? O(1)? O(n)? এক লাইনে কারণসহ লেখো।

### যে ভুলগুলো এড়াতে হবে {#17-common-mistakes}

> এই ধরনের problem-এ যেসব ভুল প্রায়ই হয় bullet করে লেখো (off-by-one, edge case ভুলে যাওয়া, overflow না ভাবা, ইত্যাদি):

- এখানে প্রথম common ভুলটা লেখো
- এখানে দ্বিতীয়টা লেখো

## শেখা ও পরের অনুশীলন {#practice}

### এই ধারণার পরের অনুশীলন {#18-harder-problems-that-inherit-this-idea}

> এই idea ব্যবহার করে আর কোন কঠিন problem solve করা যায়? নাম + official link দাও (statement copy কোরো না)।

### কৌশলটি মনে রাখুন {#19-pattern-learned}

> এই problem থেকে যে reusable pattern শিখলে সেটা এক লাইনে নাম দিয়ে লেখো — পরে একই ধরনের problem-এ দ্রুত মনে পড়বে।

### নিজেকে যাচাই করুন {#20-final-summary}

> "ভবিষ্যতের আমাকে এক-দুই লাইনে কী বলব" — মূল insight কী, আর কোন signal দেখলে এই pattern মনে পড়বে, সেটা লেখো।

---

> **মনে রাখার নিয়ম (legal):** সব নিজের ভাষায় লেখো; problem statement copy কোরো না; official link শুধু attribution-এর জন্য রাখো; "asked by Google/Amazon" এমন দাবি কোরো না — বরং "Google-style pattern" / "common interview pattern" লেখো।
