diff --git a/solutions/bronze/cf-581D.mdx b/solutions/bronze/cf-581D.mdx
index 7f4ad4badc..eb001ec992 100644
--- a/solutions/bronze/cf-581D.mdx
+++ b/solutions/bronze/cf-581D.mdx
@@ -2,7 +2,7 @@
id: cf-581D
source: CF
title: Three Logos
-author: Chongtian Ma
+author: Chongtian Ma, Ayush Shukla
---
[Official Editorial](https://codeforces.com/blog/entry/20508)
@@ -89,4 +89,149 @@ int main() {
```
+
+
+```java
+import java.io.*;
+import java.util.*;
+
+public class Logos {
+ public static void main(String[] args) {
+ Kattio io = new Kattio();
+ int[] logos = new int[6];
+ for (int i = 0; i < logos.length; i++) { logos[i] = io.nextInt(); }
+ int k;
+ for (int i = 0; i < logos.length; i += 2) {
+ if (logos[i] < logos[i + 1]) {
+ k = logos[i];
+ logos[i] = logos[i + 1];
+ logos[i + 1] = k;
+ }
+ }
+ if (logos[0] == logos[2] && logos[4] == logos[2] &&
+ (logos[1] + logos[3] + logos[5]) == logos[0]) {
+ int n = logos[0];
+ char c = 'A';
+ io.println(n);
+ k = 0;
+ for (int j, i = 1; i < 6; i += 2, c++) {
+ for (j = 0; j < logos[i]; j++) {
+ for (k = 0; k < n; k++) { io.print(c); }
+ io.println();
+ }
+ }
+ io.close();
+ return;
+ }
+
+ int n = Math.max(logos[0], Math.max(logos[2], logos[4]));
+ int h = -1;
+
+ char[] let = new char[] {'A', 'B', 'C'};
+ for (int i = 0; i < 6; i += 2) {
+ if (logos[i] == n) {
+ h = logos[i + 1];
+ char _t = let[2];
+ let[2] = let[i / 2];
+ let[i / 2] = _t;
+ logos[i] = logos[4];
+ logos[i + 1] = logos[5];
+ logos[4] = -1;
+ logos[5] = -1;
+ break;
+ }
+ }
+ if (h == -1) {
+ io.println(-1);
+ io.close();
+ return;
+ }
+ boolean ok = false;
+ int p = -1;
+ if (logos[0] == logos[2] && logos[0] == n - h &&
+ logos[1] + logos[3] == n) {
+ ok = true;
+ p = logos[1];
+ } else if (logos[0] == logos[3] && logos[0] == n - h &&
+ logos[1] + logos[2] == n) {
+ ok = true;
+ p = logos[1];
+ } else if (logos[1] == logos[2] && logos[1] == n - h &&
+ logos[0] + logos[3] == n) {
+ ok = true;
+ p = logos[0];
+ } else if (logos[1] == logos[3] && logos[1] == n - h &&
+ logos[0] + logos[2] == n) {
+ ok = true;
+ p = logos[0];
+ }
+ if (!ok) {
+ io.println(-1);
+ io.close();
+ return;
+ }
+ io.println(n);
+ k = 0;
+ for (int j = 0; j < h; j++) {
+ for (k = 0; k < n; k++) { io.print(let[2]); }
+ io.println();
+ }
+
+ k = 0;
+ for (int j = h; j < n; j++) {
+ for (k = 0; k < p; k++) { io.print(let[0]); }
+ for (k = p; k < n; k++) { io.print(let[1]); }
+ io.println();
+ }
+ io.close();
+ }
+ // CodeSnip{Kattio}
+}
+```
+
+
+
+
+```py
+a, b, c, d, e, f = list(map(int, input().split()))
+n, n2 = 1, a * b + c * d + e * f
+while n * n < n2:
+ n += 1
+
+if n * n > n2:
+ print(-1)
+ exit()
+
+l = sorted(
+ [
+ [max(a, b), min(a, b), "A"],
+ [max(c, d), min(c, d), "B"],
+ [max(e, f), min(e, f), "C"],
+ ]
+)
+
+if l[2][0] != n:
+ print(-1)
+ exit()
+
+v = str(n) + "\n" + (l[2][2] * n + "\n") * l[2][1]
+
+if l[0][0] == n and l[1][0] == n:
+ for i in range(2):
+ v += (l[i][2] * n + "\n") * l[i][1]
+else:
+ s = n - l[2][1]
+ if s not in l[0] or s not in l[1]:
+ print(-1)
+ exit()
+ logos, y = (
+ l[0][1] if l[0][0] == s else l[0][0],
+ l[1][1] if l[1][0] == s else l[1][0],
+ )
+ v += (l[0][2] * logos + l[1][2] * y + "\n") * s
+
+print(v)
+```
+
+