Due to work I was unable to solve it on time and thus I had to take help from here.

## Solution

```
data,data1 = get_data(day=12)
class Solver:
def __init__(self, data):
self.paths = {}
self.data = data
self.visited = set()
self.prepare_paths()
print(self.solve(part="1"))
print(self.solve(part="2"))
def prepare_paths(self):
for d in self.data:
l,r = d.split("-")
if self.paths.get(l):
self.paths[l].append(r)
else:
self.paths[l] = [r]
if self.paths.get(r):
self.paths[r].append(l)
else:
self.paths[r]=[l]
def solve(self, curr_cave="start", part="1"):
if (curr_cave=="end"):
return 1
if curr_cave.islower():
self.visited.add(curr_cave)
ways_count = sum([self.solve(cave, part) for cave in self.paths[curr_cave] if cave not in self.visited])
ways_count += 0 if part!="2" else sum([self.solve(cave, cave) for cave in self.paths[curr_cave] if cave in self.visited and cave != "start"])
if (curr_cave != part): self.visited.discard(curr_cave)
return ways_count
s = Solver(data1)
```

Search either BFS or DFS comes into the aid.

## Why not read more?

- Gesture Based Visually Writing System Using OpenCV and Python
- Gesture Based Visually Writing System: Adding Visual User Interface
- Gesture Based Visually Writing System: Adding Virtual Animationn, New Mode and New VUI
- Gesture Based Visually Writing System: Add Slider, More Colors and Optimized OOP code
- Gesture Based Visually Writing System: A Web App
- Contour Based Game: Break The Bricks
- Linear Regression from Scratch
- Writing Popular ML Optimizers from Scratch
- Feed Forward Neural Network from Scratch
- Convolutional Neural Networks from Scratch
- Writing a Simple Image Processing Class from Scratch
- Deploying a RASA Chatbot on Android using Unity3d
- Naive Bayes for text classifications: Scratch to Framework
- Simple OCR for Devanagari Handwritten Text

## Discussion (0)