diff --git a/1092/en.md b/1092/en.md
new file mode 100644
index 00000000..40bf11bb
--- /dev/null
+++ b/1092/en.md
@@ -0,0 +1,136 @@
+# LOJ 1092 - Lighted Panels
+
+
+## Prerequisite
+[Bitmask DP](https://www.hackerearth.com/practice/algorithms/dynamic-programming/bit-masking/tutorial/)
+
+## Solution
+`Observation 1`: At the end of the day, a cell will be toggled if it has been toggled an odd number of times; otherwise, it will remain in the same state. The specific cells causing the toggling are irrelevant; only the parity of the toggles matters.
+
+`Observation 2`: If there is a sequence of moves that lead to an answer then it's also possible to do the moves in top-down manner, i.e, toggle the necessary cells from the topmost row to the bottommost row. Follows immediately from `observation 1` Hence, dynamic programming at rescue!
+
+`Approach`: We iterate through each row, starting from the topmost. For each row, we explore every combination of toggle switching, determining which cells to toggle and which to leave unchanged. By selecting specific cells, we toggle all adjacent and diagonal cells that correspond to the immediate upper, lower, and current row cells.
+
+Before moving on to the next row, we check if all cells in the previous row are lit. If any cells remain unlit, we discard the current combination as a potential path to a local optimum, and proceed to the next combination. This process continues until we reach the bottommost row, which represents a local optimum.
+
+Among all the local optimums, we select the one with the minimum value as the answer to our problem.
+
+## Complexity
+- Time Complexity: **O(T * R * 22C)**.
+- Memory Complexity: **O(R * 22C)**.
+
+## Code
+
+### C++
+
+```cpp
+#include
+
+using namespace std;
+
+
+const int INF = 100;
+
+const int MAX_ROW = 9;
+const int MAX_COL = 9;
+
+int mask[MAX_ROW], dp[MAX_ROW][1<= 0) {
+ for(int k = 0; k < 3; ++k) {
+ tmp[k] = tmp[k] ^ (1<<(j-1));
+ }
+ }
+
+ if (j + 1 < c) {
+ for(int k = 0; k < 3; ++k) {
+ tmp[k] = tmp[k] ^ (1<<(j+1));
+ }
+ }
+ }
+
+ // All cells of the previous row have to lighted. Otherwise there will be no way around for them to be toggled later
+ if (row == 0 || (tmp[0] == (1<> t;
+
+ for(int ts = 1; ts <= t; ++ts) {
+ cin >> r >> c;
+
+ memset(dp, -1, sizeof(dp));
+ memset(mask, 0, sizeof(mask));
+
+ for(int i = 0; i < r; ++i) {
+ for(int j = 0; j < c; ++j) {
+ char ch;
+ cin >> ch;
+ if (ch == '*') {
+ mask[i] |= 1<