diff --git a/FirstKrFirstTry/FirstKrFirstTry.sln b/FirstKrFirstTry/FirstKrFirstTry.sln
new file mode 100644
index 0000000..a0dc0c2
--- /dev/null
+++ b/FirstKrFirstTry/FirstKrFirstTry.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.4.33403.182
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FirstKrFirstTry", "FirstKrFirstTry\FirstKrFirstTry.csproj", "{A3FCBF78-047E-4041-8702-06D2A789B8B3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestsForQueue", "TestsForQueue\TestsForQueue.csproj", "{7E21A81B-A989-4A58-912F-B3ADA4467362}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A3FCBF78-047E-4041-8702-06D2A789B8B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A3FCBF78-047E-4041-8702-06D2A789B8B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A3FCBF78-047E-4041-8702-06D2A789B8B3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A3FCBF78-047E-4041-8702-06D2A789B8B3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7E21A81B-A989-4A58-912F-B3ADA4467362}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7E21A81B-A989-4A58-912F-B3ADA4467362}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7E21A81B-A989-4A58-912F-B3ADA4467362}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7E21A81B-A989-4A58-912F-B3ADA4467362}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {0DA28CAF-6796-472A-AF42-4830E4DF9DF0}
+ EndGlobalSection
+EndGlobal
diff --git a/FirstKrFirstTry/FirstKrFirstTry/EmtpyQueueException.cs b/FirstKrFirstTry/FirstKrFirstTry/EmtpyQueueException.cs
new file mode 100644
index 0000000..a902c48
--- /dev/null
+++ b/FirstKrFirstTry/FirstKrFirstTry/EmtpyQueueException.cs
@@ -0,0 +1,6 @@
+namespace PriorityQueue;
+
+///
+/// An exception related to an empty queue
+///
+public class EmtpyQueueException : Exception {}
\ No newline at end of file
diff --git a/FirstKrFirstTry/FirstKrFirstTry/FirstKrFirstTry.csproj b/FirstKrFirstTry/FirstKrFirstTry/FirstKrFirstTry.csproj
new file mode 100644
index 0000000..f02677b
--- /dev/null
+++ b/FirstKrFirstTry/FirstKrFirstTry/FirstKrFirstTry.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net7.0
+ enable
+ enable
+
+
+
diff --git a/FirstKrFirstTry/FirstKrFirstTry/Program.cs b/FirstKrFirstTry/FirstKrFirstTry/Program.cs
new file mode 100644
index 0000000..746f853
--- /dev/null
+++ b/FirstKrFirstTry/FirstKrFirstTry/Program.cs
@@ -0,0 +1,9 @@
+namespace PriorityQueue;
+
+public class Program
+{
+ public static void Main()
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/FirstKrFirstTry/FirstKrFirstTry/Queue.cs b/FirstKrFirstTry/FirstKrFirstTry/Queue.cs
new file mode 100644
index 0000000..72abc3e
--- /dev/null
+++ b/FirstKrFirstTry/FirstKrFirstTry/Queue.cs
@@ -0,0 +1,84 @@
+namespace PriorityQueue;
+
+///
+/// Queue with priority
+///
+public class Queue
+{
+ private QueueElement? Head;
+
+ ///
+ /// Add element in queue by priority
+ ///
+ /// Adding element
+ public void Enqueue(int element, int priority)
+ {
+
+ if (IsEmpty())
+ {
+ Head = new QueueElement(element, priority);
+ return;
+ }
+ var item = new QueueElement(element, priority);
+ if (Head.Priority < priority)
+ {
+ item.Next = Head;
+ Head = item;
+ }
+ var walker = Head;
+ while (walker.Next != null)
+ {
+ if (walker.Next.Priority < priority)
+ {
+ var data = walker.Next;
+ walker.Next = item;
+ item.Next = data;
+ return;
+ }
+ walker = walker.Next;
+ }
+ walker.Next = item;
+ }
+
+ ///
+ /// Deleting first element with the highest priority
+ ///
+ /// Element with the highest priority
+ /// Exception if queue empty
+ public int Dequeue()
+ {
+ if (IsEmpty())
+ {
+ throw new EmtpyQueueException();
+ }
+ var walker = Head.Next;
+ var data = Head.Element;
+ Head = walker;
+ return data;
+ }
+
+ ///
+ /// Checking if queue is null
+ ///
+ /// Returns true if queue null
+ public bool IsEmpty()
+ {
+ return Head == null;
+ }
+
+ private class QueueElement
+ {
+ public QueueElement(int element, int priority){
+ Element = element;
+ Priority = priority;
+ }
+
+
+ public int Element { get; set; }
+
+ public QueueElement Next{ get; set; }
+
+ public int Priority { get; set; }
+
+ }
+}
diff --git a/FirstKrFirstTry/TestsForQueue/TestsForQueue.cs b/FirstKrFirstTry/TestsForQueue/TestsForQueue.cs
new file mode 100644
index 0000000..244afe6
--- /dev/null
+++ b/FirstKrFirstTry/TestsForQueue/TestsForQueue.cs
@@ -0,0 +1,64 @@
+namespace TestsForQueue;
+
+using PriorityQueue;
+
+public class Tests
+{
+ Queue queue;
+
+ [SetUp]
+ public void Setup()
+ {
+ queue = new Queue();
+ }
+
+ [TestCaseSource(nameof(QueueForTest))]
+ public void QueueShouldBeEmptyWhenCreated(Queue queue)
+ {
+ Assert.True(queue.IsEmpty());
+ }
+
+ [TestCaseSource(nameof(QueueForTest))]
+ public void QueueShouldThrowExceptionWhenDeletingFromAnEmptyQueue(Queue queue)
+ {
+ Assert.Throws(() => queue.Dequeue());
+ }
+
+ [TestCaseSource(nameof(QueueForTest))]
+ public void QueueShouldNotBeEmptyWhenAddedSomething(Queue queue)
+ {
+ queue.Enqueue(12, 1);
+ Assert.False(queue.IsEmpty());
+ }
+
+ [TestCaseSource(nameof(QueueForTest))]
+ public void QueueShouldReturnValueWhenAddedSomething(Queue queue)
+ {
+ queue.Enqueue(12, 1);
+ Assert.True(queue.Dequeue() == 12);
+ }
+
+ [TestCaseSource(nameof(QueueForTest))]
+ public void QueueShouldReturnValueWithTheHighestPriorityWhenAddedSomething(Queue queue)
+ {
+ queue.Enqueue(11, 1);
+ queue.Enqueue(16, 2);
+ queue.Enqueue(12, 1);
+ Assert.True(queue.Dequeue() == 16);
+ }
+
+ [TestCaseSource(nameof(QueueForTest))]
+ public void QueueShouldReturnFirstValueWhenPriorityTheSame(Queue queue)
+ {
+ queue.Enqueue(15, 1);
+ queue.Enqueue(13, 2);
+ queue.Enqueue(14, 2);
+ Assert.True(queue.Dequeue() == 13);
+ }
+
+ private static IEnumerable QueueForTest
+ => new TestCaseData[]
+ {
+ new TestCaseData(new Queue()),
+ };
+}
\ No newline at end of file
diff --git a/FirstKrFirstTry/TestsForQueue/TestsForQueue.csproj b/FirstKrFirstTry/TestsForQueue/TestsForQueue.csproj
new file mode 100644
index 0000000..093cf8f
--- /dev/null
+++ b/FirstKrFirstTry/TestsForQueue/TestsForQueue.csproj
@@ -0,0 +1,23 @@
+
+
+
+ net7.0
+ enable
+ enable
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/FirstKrFirstTry/TestsForQueue/Usings.cs b/FirstKrFirstTry/TestsForQueue/Usings.cs
new file mode 100644
index 0000000..cefced4
--- /dev/null
+++ b/FirstKrFirstTry/TestsForQueue/Usings.cs
@@ -0,0 +1 @@
+global using NUnit.Framework;
\ No newline at end of file