diff --git a/3474. Lexicographically Smallest Generated String/3474. Lexicographically Smallest Generated String.csproj b/3474. Lexicographically Smallest Generated String/3474. Lexicographically Smallest Generated String.csproj
new file mode 100644
index 0000000..2808f89
--- /dev/null
+++ b/3474. Lexicographically Smallest Generated String/3474. Lexicographically Smallest Generated String.csproj
@@ -0,0 +1,11 @@
+
+
+
+ Exe
+ net10.0
+ _3474._Lexicographically_Smallest_Generated_String
+ enable
+ enable
+
+
+
diff --git a/3474. Lexicographically Smallest Generated String/Program.cs b/3474. Lexicographically Smallest Generated String/Program.cs
new file mode 100644
index 0000000..9bb622b
--- /dev/null
+++ b/3474. Lexicographically Smallest Generated String/Program.cs
@@ -0,0 +1,9 @@
+var sol = new Solution();
+
+// System.Console.WriteLine($"TFTF | ab -> \"{sol.GenerateString("TFTF", "ab")}\"");
+// System.Console.WriteLine($"TFTF | abc -> \"{sol.GenerateString("TFTF", "abc")}\"");
+// System.Console.WriteLine($"F | d -> \"{sol.GenerateString("F", "d")}\"");
+// System.Console.WriteLine($"F | da -> \"{sol.GenerateString("F", "da")}\"");
+// System.Console.WriteLine($"FT | da -> \"{sol.GenerateString("FT", "aghbdfhf")}\"");
+// System.Console.WriteLine($"TFFFTFFF | bab -> \"{sol.GenerateString("TFFFTFFF", "bab")}\"");
+System.Console.WriteLine($"TFT | xx -> \"{sol.GenerateString("TFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFTFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFTFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFT", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")}\"");
\ No newline at end of file
diff --git a/3474. Lexicographically Smallest Generated String/Solution.cs b/3474. Lexicographically Smallest Generated String/Solution.cs
new file mode 100644
index 0000000..207c6be
--- /dev/null
+++ b/3474. Lexicographically Smallest Generated String/Solution.cs
@@ -0,0 +1,87 @@
+using System.Text;
+
+public class Solution
+{
+ public string GenerateString(string str1, string str2)
+ {
+ var len = str1.Length + str2.Length - 1;
+ var answer = new char[len];
+
+ // Сначала обработать все T
+ for (var i = 0; i < str1.Length; i++)
+ {
+ if (str1[i] == 'T')
+ {
+ var sbIdx = i;
+ for (var j = 0; j < str2.Length; j++)
+ {
+ if (answer[sbIdx] != 0 && answer[sbIdx] != str2[j])
+ return "";
+ answer[sbIdx++] = str2[j];
+ }
+ }
+ }
+ // Теперь обработать все F
+ var canChange = new bool[len];
+ var lastF = -1;
+ for (var i = 0; i < str1.Length; i++)
+ if (str1[i] == 'F')
+ {
+ if (ProcessF(answer.AsSpan()[i..(i + str2.Length)], str2, canChange.AsSpan()[i..(i + str2.Length)], out var goBack) == false)
+ return "";
+ if(goBack && lastF != -1)
+ i = lastF - 1;
+ else
+ lastF = i;
+ }
+
+ return new string(answer);
+ }
+
+ private bool ProcessF(Span chars, string s2, Span canChange, out bool goBack)
+ {
+ goBack = false;
+
+ var equal = true;
+ var emptyCount = 0;
+ var hasDiff = false;
+ var lastCanChange = -1;
+ for (var i = 0; i < s2.Length; i++)
+ {
+ equal &= chars[i] == s2[i];
+ if (chars[i] == 0)
+ emptyCount++;
+ else if (chars[i] != s2[i])
+ hasDiff = true;
+ if (canChange[i])
+ lastCanChange = i;
+ }
+ if (equal)
+ {
+ if (lastCanChange >= 0)
+ {
+ chars[lastCanChange]++;
+ if (chars[lastCanChange] == 'z' + 1)
+ chars[lastCanChange] = 'a';
+ goBack = true;
+ return true;
+ }
+ else
+ return false;
+ }
+ for (var i = 0; i < chars.Length && emptyCount > 0; i++)
+ {
+ if (chars[i] != 0)
+ continue;
+ var insert = 'a';
+ if (emptyCount == 1 && s2[i] == insert && !hasDiff)
+ insert++;
+ chars[i] = insert;
+ canChange[i] = true;
+ if (s2[i] != insert)
+ hasDiff = true;
+ emptyCount--;
+ }
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/Leetcode.sln b/Leetcode.sln
index 23425b8..e397c98 100644
--- a/Leetcode.sln
+++ b/Leetcode.sln
@@ -203,6 +203,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "2946. Matrix Similarity Aft
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "2840. Check if Strings Can be Made Equal With Operations II", "2840. Check if Strings Can be Made Equal With Operations II\2840. Check if Strings Can be Made Equal With Operations II.csproj", "{5020405E-5F4F-4AC6-932D-00F01643A2F0}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "3474. Lexicographically Smallest Generated String", "3474. Lexicographically Smallest Generated String\3474. Lexicographically Smallest Generated String.csproj", "{7493B586-527C-4D54-A048-2E9B96B52A6E}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -1413,6 +1415,18 @@ Global
{5020405E-5F4F-4AC6-932D-00F01643A2F0}.Release|x64.Build.0 = Release|Any CPU
{5020405E-5F4F-4AC6-932D-00F01643A2F0}.Release|x86.ActiveCfg = Release|Any CPU
{5020405E-5F4F-4AC6-932D-00F01643A2F0}.Release|x86.Build.0 = Release|Any CPU
+ {7493B586-527C-4D54-A048-2E9B96B52A6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7493B586-527C-4D54-A048-2E9B96B52A6E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7493B586-527C-4D54-A048-2E9B96B52A6E}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {7493B586-527C-4D54-A048-2E9B96B52A6E}.Debug|x64.Build.0 = Debug|Any CPU
+ {7493B586-527C-4D54-A048-2E9B96B52A6E}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {7493B586-527C-4D54-A048-2E9B96B52A6E}.Debug|x86.Build.0 = Debug|Any CPU
+ {7493B586-527C-4D54-A048-2E9B96B52A6E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7493B586-527C-4D54-A048-2E9B96B52A6E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7493B586-527C-4D54-A048-2E9B96B52A6E}.Release|x64.ActiveCfg = Release|Any CPU
+ {7493B586-527C-4D54-A048-2E9B96B52A6E}.Release|x64.Build.0 = Release|Any CPU
+ {7493B586-527C-4D54-A048-2E9B96B52A6E}.Release|x86.ActiveCfg = Release|Any CPU
+ {7493B586-527C-4D54-A048-2E9B96B52A6E}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE