diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml
deleted file mode 100644
index 53549b1d..00000000
--- a/.github/workflows/greetings.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-name: Greetings
-
-on: [pull_request, issues]
-
-jobs:
-  greeting:
-    runs-on: ubuntu-latest
-    permissions:
-      issues: write
-      pull-requests: write
-    steps:
-    - uses: actions/first-interaction@v1
-      with:
-        repo-token: ${{ secrets.GITHUB_TOKEN }}
-        issue-message: 'Thanks for raising the issue🙌🏼'
-        pr-message: 'Welcome to the Project 🤓 Hoping for more good contributions🎈'
diff --git a/C++/C++Template.cpp b/C++/C++Template.cpp
new file mode 100644
index 00000000..cd8bacf1
--- /dev/null
+++ b/C++/C++Template.cpp
@@ -0,0 +1,63 @@
+//Templates are used to create generic classes in C++
+#include <iostream>
+
+using namespace std;
+template<class T>
+class Maths
+{
+    T num1,num2;
+    public:
+    void init(T num1,T num2)
+    {
+        this->num1=num1;
+        this->num2=num2;
+    }
+    T add()
+    {
+        T result=num1+num2;
+        return result;
+    }
+    T subtract()
+    {
+        T result=num1-num2;
+        return result;
+    }
+    T multiply()
+    {
+        T result=num1*num2;
+        return result;
+    }
+    float divide()
+    {
+        float result=num1/num2;
+        return result;
+    }
+    T modulo()
+    {
+        T result = num1%num2;
+        return result;
+    }
+    
+};
+
+int main()
+{
+    //Creating Object of  Maths class with values of type int
+    int a,b;
+    cout<<"Enter 2 numbers of type int"<<endl;
+    cin>>a>>b;
+    Maths<int> m;//We have to specify datatype while creating object of generic class
+    m.init(a,b);
+    cout<<"Result is \nAddition:\t"<<m.add()<<"\nSubtraction:\t"<<m.subtract()<<"\nMultiplication:\t"
+    <<m.multiply()<<"\nDivision:\t"<<m.divide()<<endl;
+    //Creating Object of  Maths class with values of type float
+    float a1,b1;
+    cout<<"Enter 2 numbers of type float"<<endl;
+    cin>>a1>>b1;
+    Maths<float> m1;//We have to specify datatype while creating object of generic class
+    m1.init(a1,b1);
+    cout<<"Result is \nAddition:\t"<<m1.add()<<"\nSubtraction:\t"<<m1.subtract()<<"\nMultiplication:\t"
+    <<m1.multiply()<<"\nDivision:\t"<<m1.divide()<<endl;
+    
+    return 0;
+}
diff --git a/C++/ClassConcepts.cpp b/C++/ClassConcepts.cpp
new file mode 100644
index 00000000..f35c645f
--- /dev/null
+++ b/C++/ClassConcepts.cpp
@@ -0,0 +1,95 @@
+#include<bits/stdc++.h>
+using namespace std;
+
+class Employee
+{
+	int id;
+	float sal;
+	string dept;
+	string name;
+	public:
+		
+	//default constructors
+	Employee()
+	{
+		dept="General";
+		sal=10000;
+	}
+	//paramterised constructor
+	Employee(int x)
+	{
+		id=x;
+	}
+	
+	Employee(int x,float y,string z)
+	{
+		id=x;
+		sal=y;
+		dept=z;
+	}
+	//copy constructors
+	Employee(Emplyoee )&e)
+	{
+		id=e.id;
+		sal=e.sal;
+		dept=e.dept;
+	}
+	//Getters
+	int getId()
+	{
+		return id;
+	}
+	float getSal()
+	{
+		return sal;
+	}
+	string getDept()
+	{
+		return dept;
+	}
+	
+	string getName()
+	{
+		return name;
+	}
+	
+	//Setters
+	void setId(int x)
+	{
+		id=x;
+	}
+	void setSal(float x)
+	{
+		sal=x;
+	}
+	void setDept(string x)
+	{
+		dept=x;
+	}
+	void setName()
+	{
+		cin.ignore();
+		getline(cin,name);
+	}
+	
+	//functions
+	void showDetails()
+	{
+		cout<<getId()<<" "<<getSal()<<" "<<getDept()<<" "<<getName()<<endl;
+	}
+	
+};
+
+int main(void)
+{
+	Employee e1,e2(3,23000,"Acc");
+	e1.setId(1);
+	e1.setName();
+	e1.setSal(50000);
+	e1.setDept("Engg");
+	Employee e3=e1;
+	e1.showDetails();
+	e2.showDetails();
+	e3.showDetails();
+}
+
diff --git a/C++/ExceptionHandlingUsingTryCatch.cpp b/C++/ExceptionHandlingUsingTryCatch.cpp
new file mode 100644
index 00000000..716b3b7c
--- /dev/null
+++ b/C++/ExceptionHandlingUsingTryCatch.cpp
@@ -0,0 +1,38 @@
+
+#include <iostream>
+
+using namespace std;
+void divide(int numerator,int denominator)
+{
+    //try block: We add the that part of code which might throw exception
+    try
+    {
+        if(denominator==0)
+        throw denominator;//throw statement:used to Handle Exceptions
+        cout<<numerator/denominator;
+        
+    }
+    catch(int x)//catch block:It catches the exception;
+    {
+        cout<<"Exception Occurred and handled successfully"<<endl;
+    }
+}
+
+int main()
+{
+    
+    int numerator,denominator,result;
+    cout<<"Enter a number"<<endl;
+    cin>>numerator;
+    //We have set denominator 0 as dividing any number by 0 causes exception
+    denominator=0;
+    cout<<"Trying to divide by 0"<<endl;
+    divide(numerator,denominator);
+    
+    //Now we set denominator to a non zero value
+    denominator=5;
+    cout<<"Trying to divide by non zero value(5)"<<endl;
+    divide(numerator,denominator);
+    
+    return 0;
+}
\ No newline at end of file
diff --git a/C++/Fizz_Buzz.cpp b/C++/Fizz_Buzz.cpp
new file mode 100644
index 00000000..ab735aef
--- /dev/null
+++ b/C++/Fizz_Buzz.cpp
@@ -0,0 +1,28 @@
+#include<bits/stdc++.h>
+using namespace std;
+    vector<string> fizzBuzz(int n) {
+        vector<string>ans;
+        for(int i=1;i<=n;i++)
+        {
+            if((i)%15==0)
+            {
+                string str="FizzBuzz";
+                ans.push_back(str);
+            }
+            else if((i)%5==0){
+                string str="Buzz";
+                ans.push_back(str);
+            }
+            else if((i)%3==0){
+               string str="Fizz";
+                ans.push_back(str);
+            }
+            else
+                ans.push_back(to_string(i));
+        } 
+        return ans;
+    }
+int main()
+{
+    vector<string> answer= fizzBuzz(5);
+}
\ No newline at end of file
diff --git a/C++/Foreachloop.cpp b/C++/Foreachloop.cpp
new file mode 100644
index 00000000..c696e7b7
--- /dev/null
+++ b/C++/Foreachloop.cpp
@@ -0,0 +1,17 @@
+
+#include <iostream>
+
+using namespace std;
+
+int main()
+{
+    
+    int ArrayofFirstTenOddNumber[]={1,3,5,7,9,11,13,15,17,19};
+    cout<<"elements of Array are:\t";
+    //Foreach Loop to output elements of array
+    for(int element:ArrayofFirstTenOddNumber)
+    {
+        cout<<element<<" ";
+    }
+    return 0;
+}
\ No newline at end of file
diff --git a/C++/Matrix multiplication.cpp b/C++/Matrix multiplication.cpp
new file mode 100644
index 00000000..7f946272
--- /dev/null
+++ b/C++/Matrix multiplication.cpp	
@@ -0,0 +1,48 @@
+#include <iostream>  
+using namespace std;  
+int main()  
+{  
+int a[10][10],b[10][10],mul[10][10],r,c,i,j,k;    
+cout<<"enter the number of row=";    
+cin>>r;    
+cout<<"enter the number of column=";    
+cin>>c;    
+cout<<"enter the first matrix element=\n";    
+for(i=0;i<r;i++)    
+{    
+for(j=0;j<c;j++)    
+{    
+cin>>a[i][j];  
+}    
+}    
+cout<<"enter the second matrix element=\n";    
+for(i=0;i<r;i++)    
+{    
+for(j=0;j<c;j++)    
+{    
+cin>>b[i][j];    
+}    
+}    
+cout<<"multiply of the matrix=\n";    
+for(i=0;i<r;i++)    
+{    
+for(j=0;j<c;j++)    
+{    
+mul[i][j]=0;    
+for(k=0;k<c;k++)    
+{    
+mul[i][j]+=a[i][k]*b[k][j];    
+}    
+}    
+}    
+//--> PRINTING  
+for(i=0;i<r;i++)    
+{    
+for(j=0;j<c;j++)    
+{    
+cout<<mul[i][j]<<" ";    
+}    
+cout<<"\n";    
+}    
+return 0;  
+}
diff --git a/C++/Maximum_Subarray_Sum.cpp b/C++/Maximum_Subarray_Sum.cpp
new file mode 100644
index 00000000..20975833
--- /dev/null
+++ b/C++/Maximum_Subarray_Sum.cpp
@@ -0,0 +1,24 @@
+//Program to find subarray with largest sum
+#include <iostream>
+#include <vector>
+
+using namespace std;
+
+int main() {
+    int n;
+    cin >> n;
+
+    vector<int> nums(n);
+    for(int i = 0; i < n; i++)
+        cin >> nums[i];
+
+    int best = 0, sum = 0;
+    for(int i = 0; i < n; i++) {
+        sum = max(nums[i], sum + nums[i]);
+        best = max(best, sum);
+    }
+
+    cout << best << endl;
+
+    return 0;
+}
\ No newline at end of file
diff --git a/C++/Program to reverse number.cpp b/C++/Program to reverse number.cpp
new file mode 100644
index 00000000..ea69a3e4
--- /dev/null
+++ b/C++/Program to reverse number.cpp	
@@ -0,0 +1,21 @@
+#include <iostream>  
+using namespace std;  
+int reverseNum(int n){
+int reverse=0,rem;
+  while(n!=0)    
+  {    
+     rem=n%10;      
+     reverse=reverse*10+rem;    
+     n/=10;    
+  }   
+  return reverse;
+}
+int main()  
+{  
+int n;
+cout<<"Enter a number: ";    
+cin>>n;    
+ 
+ cout<<"Reversed Number: "<<reverseNum(n)<<endl;     
+return 0;  
+}  
diff --git a/C++/Program to swap two numbers without third variable.cpp b/C++/Program to swap two numbers without third variable.cpp
new file mode 100644
index 00000000..a3bf7287
--- /dev/null
+++ b/C++/Program to swap two numbers without third variable.cpp	
@@ -0,0 +1,15 @@
+#include <iostream>  
+using namespace std;  
+void swapWithoutTemp(int &a,int &b){
+a=a*b; //a=50 (5*10)    
+b=a/b; //b=5 (50/10)    
+a=a/b; //a=10 (50/5) 
+}
+int main()  
+{  
+int a=5, b=10;      
+cout<<"Before swap a= "<<a<<" b= "<<b<<endl;      
+   swapWithoutTemp(a,b);
+cout<<"After swap a= "<<a<<" b= "<<b<<endl;      
+return 0;  
+}  
diff --git a/C++/Projects/rideTransportSystem/Project.cpp b/C++/Projects/rideTransportSystem/Project.cpp
new file mode 100644
index 00000000..903c943c
--- /dev/null
+++ b/C++/Projects/rideTransportSystem/Project.cpp
@@ -0,0 +1,3367 @@
+#include "Project.h"
+#include <cstring>
+#include <string>
+#include <iostream>
+using namespace std;
+
+//Name
+Name::Name() {
+	fName = " ";
+	lName = " ";
+}
+
+Name::Name(string fN, string lN) {
+	fName = fN;
+	lName = lN;
+
+}
+
+Name::Name(const Name& copy) {
+	fName = copy.fName;
+	lName = copy.lName;
+}
+
+string Name::getFName() {
+	return fName;
+}
+
+string Name::getLName() {
+	return lName;
+}
+
+void Name::setFName(string fN) {
+	fName = fN;
+}
+
+void Name::setLName(string lN) {
+	lName = lN;
+}
+
+ostream& operator<<(ostream& out, const Name& n) {
+	out << n.fName << " " << n.lName << endl;
+	return out;
+}
+
+ifstream& operator>>(ifstream& fin, Name& n)
+{
+	string fN;
+	string lN;
+
+	fin >> fN;
+	fin >> lN;
+
+	n.setFName(fN);
+	n.setLName(lN);
+
+	return fin;
+}
+
+
+ofstream& operator<<(ofstream& fout, Name& n) {
+	fout << n.fName << " " << n.lName << endl;
+	return fout;
+}
+
+
+istream& operator>>(istream& in, Name& n)
+{
+	string fN;
+	string lN;
+
+	cout << "Enter First Name: ";
+	in >> fN;
+	cin.ignore();
+
+
+	cout << "Enter Last Name: ";
+	in >> lN;
+	cin.ignore();
+
+	n.setFName(fN);
+	n.setLName(lN);
+
+
+	return in;
+}
+
+
+
+Name::~Name(){
+	//
+}
+
+
+//Date
+Date::Date() {
+	day = 0;
+	month = 0;
+	year = 0;
+}
+
+Date::Date(int d, int m, int y) {
+	day = d;
+	month = m;
+	year = y;
+}
+
+Date::Date(const Date& date) {
+	day = date.day;
+	month = date.month;
+	year = date.year;
+}
+
+void Date::setDay(int d) {
+	day = d;
+}
+void Date::setMonth(int m) {
+	month = m;
+}
+void Date::setYear(int y) {
+	year = y;
+}
+
+int Date::getDay() {
+	return day;
+}
+int Date::getMonth() {
+	return month;
+}
+int Date::getYear() {
+	return year;
+}
+ostream& operator<<(ostream& out, const Date& date) {
+	out << date.day << " / " << date.month << " / " << date.year << endl;
+	return out;
+}
+
+ifstream& operator>>(ifstream& fin, Date& d)
+{
+	int day, month, year;
+
+	fin >> day;
+	fin >> month;
+	fin >> year;
+
+	d.setDay(day);
+	d.setMonth(month);
+	d.setYear(year);
+
+	return fin;
+}
+
+ofstream& operator<<(ofstream& fout, const Date& date) {
+	fout << date.day << " " << date.month << " " << date.year << endl;
+	return fout;
+}
+
+
+istream& operator>>(istream& in, Date& d)
+{
+	int day, month, year;
+
+	cout << "Enter day: ";
+	in >> day;
+
+	cout << "Enter month: ";
+	in >> month;
+
+	cout << "Enter year: ";
+	in >> year;
+
+	d.setDay(day);
+	d.setMonth(month);
+	d.setYear(year);
+
+	return in;
+}
+
+
+
+//mTime
+mTime::mTime() {
+	hour = 0;
+	min = 0;
+	sec = 0;
+}
+
+mTime::mTime(int h, int m, int s) {
+	hour = h;
+	min = m;
+	sec = s;
+}
+
+mTime::mTime(const mTime& time) {
+	hour = time.hour;
+	min = time.min;
+	sec = time.sec;
+}
+
+void mTime::setHour(int h) {
+	hour = h;
+}
+void mTime::setMin(int m) {
+	min = m;
+}
+void mTime::setSec(int s) {
+	sec = s;
+}
+
+int mTime::getHour() {
+	return hour;
+}
+int mTime::getMin() {
+	return min;
+}
+int mTime::getSec() {
+	return sec;
+}
+
+ostream& operator<<(ostream& out, const mTime& Time) {
+	out << Time.hour << " : " << Time.min << " : " << Time.sec << endl;
+	return out;
+}
+
+istream& operator>>(istream& in, mTime& Time) {
+	int h, m, s;
+
+	cout << "Enter hour: ";
+	in >> h;
+
+	cout << "Enter minute: ";
+	in >> m;
+
+	cout << "Enter second: ";
+	in >> s;
+
+	Time.setSec(s);
+	Time.setMin(m);
+	Time.setHour(h);
+
+
+	return in;
+}
+
+
+ofstream& operator<<(ofstream& fout, const mTime& Time) {
+	fout << Time.hour << " " << Time.min << " " << Time.sec << endl;
+	return fout;
+}
+
+ifstream& operator>>(ifstream& in, mTime& Time) {
+	int h, m, s;
+
+	in >> h;
+	in >> m;
+	in >> s;
+
+	Time.setSec(s);
+	Time.setMin(m);
+	Time.setHour(h);
+
+
+	return in;
+}
+
+//Service
+
+Service::Service() {
+	source = " ";
+	destination = " ";
+	distance = 0;
+	bookingDate = Date();
+	bookingTime = mTime();
+	status = 0;
+	fuelrate = 0;
+	cId = 0;
+	dId = 0;
+	vId = 0;
+	sId = 0;
+}
+
+Service::Service(string s, string d, float dis, Date bDate, mTime bTime, int st, float fRate, int cID, int dID, int vID , int sID, float fare) {
+	source = s;
+	destination = d;
+	distance = dis;
+	bookingDate = bDate;
+	bookingTime = bTime;
+	status = st;
+	fuelrate = fRate;
+	cId = cID;
+	dId = dID;
+	vId = vID;
+	sId = sID;
+	this->fare = fare;
+}
+
+Service::~Service() {
+
+	//
+}
+
+
+void Service::setSource(string source) {
+	this->source = source;
+}							
+
+void Service::setDestination(string destination) {
+	this->destination = destination;
+}
+
+void Service::setDistance(float distance) {
+	this->distance = distance;
+}
+
+void Service::setBookingDate(Date date) {
+	bookingDate = date;
+}
+
+void Service::setBookingTime(mTime time) {
+	bookingTime = time;
+}
+
+void Service::setStatus(int status) {
+	this->status = status;
+}
+
+void Service::setFuelRate(float rate) {
+	this->fuelrate = rate;
+}
+
+void Service::setCId(int cid) {
+	this->cId = cid;
+}
+
+void Service::setVId(int vid) {
+	this->vId = vid;
+}
+
+void Service::setDId(int did) {
+	this->dId = did;
+}
+
+void Service::setSId(int id) {
+	this->sId = id;
+}
+
+void Service::setFare(float fare) {
+	this->fare = fare;
+}
+
+
+
+string Service::getSource() {
+	return source;
+}
+
+string Service::getDestination() {
+	return destination;
+}
+
+float Service::getDistance() {
+	return distance;
+}
+
+Date Service::getBookingDate() {
+	return bookingDate;
+}
+
+mTime Service::getBookingTime() {
+	return bookingTime;
+}
+
+int Service::getStatus() {
+	return status;
+}
+
+float Service::getFuelRate() {
+	return fuelrate;
+}
+
+int Service::getCId() {
+	return cId;
+}
+
+int Service::getVId() {
+	return vId;
+}
+
+int Service::getDId() {
+	return dId;
+}
+
+int Service::getSId() {
+	return sId;
+}
+
+float Service::getFare() {
+	return fare;
+}
+
+ostream& operator<<(ostream& out, Service& service) {
+	out << "------------------Ride Information------------------\n";
+	out << "Source: " << service.getSource() << endl;
+	out << "Destination: "<< service.getDestination() << endl;
+	out << "Distance: " << service.getDistance() << endl;
+	out << "Booking Date: " << service.getBookingDate() << endl;
+	out << "Booking Time: " << service.getBookingTime() << endl;
+	out << "Status (0: pending, 1: completed ): " << service.getStatus() << endl;
+	out << "Customer ID: " << service.getCId() << endl;
+	out << "Driver ID: " << service.getDId() << endl;
+	out << "Vehicle ID: " << service.getVId() << endl;
+	out << "Fare: " << service.getFare() << endl;
+
+	out << "----------------------------------------------------\n";
+	return out;
+}
+
+istream& operator>>(istream& in, Service& service) {
+
+	string source, destination;
+	float distance;
+	Date date;
+	mTime mtime;
+	int status;
+	int cid, did, vid;
+
+	cout << "Enter Source: ";
+	in >> source;
+	in.ignore();
+
+	cout << "Enter Destiantion: ";
+	in >> destination;
+	in.ignore();
+
+	cout << "Enter distance (in KMs): ";
+	in >> distance;
+
+	cout << "Enter Booking Date: \n";
+	in >> date;
+
+	cout << "Enter Booking Time: \n";
+	in >> mtime;
+
+	cout << "Enter Status (0 for pending, 1 if complete): ";
+	in >> status;
+
+	cout << "Enter Customer ID: ";
+	in >> cid;
+
+	cout << "Enter Driver ID: ";
+	in >> did;
+
+	cout << "Enter Vehicle ID: ";
+	in >> vid;
+
+	srand(time(0));
+	int sid = rand();
+
+	service.setSource(source);
+	service.setDestination(destination);
+	service.setDistance(distance);
+	service.setBookingDate(date);
+	service.setBookingTime(mtime);
+	service.setStatus(status);
+	service.setCId(cid);
+	service.setDId(did);
+	service.setVId(vid);
+	service.setSId(sid);
+	service.setFare(distance * 21);
+
+	return in;
+}
+
+
+ofstream& operator<<(ofstream& fout, Service& service) {
+
+	fout << service.getSource() << endl;
+	fout << service.getDestination() << endl;
+	fout << service.getDistance() << endl;
+	fout << service.getBookingDate();
+	fout << service.getBookingTime();
+	fout << service.getStatus() << endl;
+	fout << service.getCId() << endl;
+	fout << service.getDId() << endl;
+	fout << service.getVId() << endl;
+	fout << service.getSId() << endl;
+	fout << service.getFare() << endl;
+
+	return fout;
+}
+
+ifstream& operator>>(ifstream& fin, Service& service) {
+
+	string source, destination;
+	float distance, fare;
+	Date date;
+	mTime time;
+	int status;
+	int cid, did, vid, sid;
+
+	fin >> source;
+
+	fin >> destination;
+
+	fin >> distance;
+
+	fin >> date;
+
+	fin >> time;
+
+	fin >> status;
+
+	fin >> cid;
+
+	fin >> did;
+
+	fin >> vid;
+
+	fin >> sid;
+
+	fin >> fare;
+
+	service.setSource(source);
+	service.setDestination(destination);
+	service.setDistance(distance);
+	service.setBookingDate(date);
+	service.setBookingTime(time);
+	service.setStatus(status);
+	service.setCId(cid);
+	service.setDId(did);
+	service.setVId(vid);
+	service.setSId(sid);
+	service.setFare(fare);
+
+	return fin;
+}
+
+
+//Ride
+
+Ride::Ride(string s = " ", string d = " ", float dis = 0, Date bDate = Date(), mTime bTime = mTime(), int st = 0, float fRate = 0, int cID = 0, int dID = 0, int vID = 0, int sID = 0, float fare = 0, int noP = 0, string type = " ", float dRanking = 0, float vRanking = 0) :Service(s, d, dis, bDate, bTime, st, fRate, cID, dID, vID, sID, fare) {
+	noofPassengers = noP;
+	rideType = type;
+	DriverRanking = dRanking;
+	VehicleRanking = vRanking;
+}
+
+void Ride::setNoofPassengers(int no) {
+	noofPassengers = no;
+}
+
+
+void Ride::setRideType(string type) {
+	rideType = type;
+}
+
+void Ride::setDRank(float rank) {
+	DriverRanking = rank;
+}
+
+void Ride::setVRank(float rank) {
+	VehicleRanking = rank;
+}
+
+int Ride::getNoofPassengers() {
+	return noofPassengers;
+}
+
+
+string Ride::getRideType() {
+	return rideType;
+}
+
+float Ride::getDRank() {
+	return DriverRanking;
+}
+
+float Ride::getVRank() {
+	return VehicleRanking;
+}
+
+
+Ride::~Ride() {
+	//
+}
+
+
+
+ostream& operator<<(ostream& out, Ride& ride) {
+	out << "------------------Ride Information------------------\n";
+	out << "Source: " << ride.getSource() << endl;
+	out << "Destination: " << ride.getDestination() << endl;
+	out << "Distance: " << ride.getDistance() << endl;
+	out << "Booking Date: " << ride.getBookingDate();
+	out << "Booking Time: " << ride.getBookingTime();
+	out << "Status: " << ride.getStatus() << endl;
+	out << "Customer ID: " << ride.getCId() << endl;
+	out << "Driver ID: " << ride.getDId() << endl;
+	out << "Vehicle ID: " << ride.getVId() << endl;
+	out << "No. of Passengers: " << ride.noofPassengers << endl;
+	out << "Ride type: " << ride.rideType << endl;
+	out << "Driver Ranking: " << ride.DriverRanking << endl;
+	out << "Vehicle Ranking: " << ride.VehicleRanking << endl;
+	out << "Fare: " << ride.getFare() << endl;
+	out << "Service ID: " << ride.getSId() << endl;
+
+	out << "----------------------------------------------------\n";
+	return out;
+}
+
+istream& operator>>(istream& in, Ride& ride) {
+
+	string source, destination, type;
+	
+	float distance, fare;
+	Date date;
+	mTime mtime;
+	int status;
+	int cid, did, vid, sid;
+
+	cout << "Enter Source: ";
+	in >> source;
+	in.ignore();
+
+	cout << "Enter Destiantion: ";
+	in >> destination;
+	in.ignore();
+
+	cout << "Enter distance (in KMs): ";
+	in >> distance;
+
+	cout << "Enter Booking Date: \n";
+	in >> date;
+
+	cout << "Enter Booking Time: \n";
+	in >> mtime;
+
+	//cout << "Enter Status (0 for pending, 1 if complete): ";
+	//in >> status;
+
+	cout << "Enter Customer ID: ";
+	in >> cid;
+
+	cout << "Enter Driver ID: ";
+	in >> did;
+
+	cout << "Enter Vehicle ID: ";
+	in >> vid;
+
+	cout << "Enter No of Passengers: ";
+	in >> ride.noofPassengers;
+
+	cout << "Enter ride type (intercity, intracity): ";
+	in >> type;
+
+	/*cout << "Enter Driver ranking (0 to 5 scale (worst to best)): ";
+	in >> ride.DriverRanking;
+
+	cout << "Enter Vehiclle ranking (0 to 5 scale (worst to best)): ";
+	in >> ride.VehicleRanking;*/
+
+	srand(time(0));
+	sid = rand();
+
+	ride.setSource(source);
+	ride.setDestination(destination);
+	ride.setDistance(distance);
+	ride.setBookingDate(date);
+	ride.setBookingTime(mtime);
+	ride.setStatus(0);
+	ride.setCId(cid);
+	ride.setDId(did);
+	ride.setVId(vid);
+	ride.setRideType(type);
+	ride.setSId(sid);
+	ride.setDRank(0);
+	ride.setVRank(0);
+	ride.setFare(distance * 21);
+
+	return in;
+}
+
+
+ofstream& operator<<(ofstream& fout, Ride& ride) {
+
+	fout << ride.getSource() << endl;
+	fout << ride.getDestination() << endl;
+	fout << ride.getDistance() << endl;
+	fout << ride.getBookingDate();
+	fout << ride.getBookingTime();
+	fout << ride.getStatus() << endl;
+	fout << ride.getCId() << endl;
+	fout << ride.getDId() << endl;
+	fout << ride.getVId() << endl;
+	fout << ride.getNoofPassengers() << endl;
+	fout << ride.getRideType() << endl;
+	fout << ride.getDRank() << endl;
+	fout << ride.getVRank() << endl;
+	fout << ride.getFare() << endl;
+	fout << ride.getSId() << endl << endl;
+
+	return fout;
+}
+
+ifstream& operator>>(ifstream& fin, Ride& ride) {
+
+	string source, destination, type;
+	float distance, fare;
+	Date date;
+	mTime time;
+	int status;
+	int cid, did, vid, sid;
+
+	fin >> source;
+
+	fin >> destination;
+
+	fin >> distance;
+
+	fin >> date;
+
+	fin >> time;
+
+	fin >> status;
+
+	fin >> cid;
+
+	fin >> did;
+
+	fin >> vid;
+
+	fin >> ride.noofPassengers;
+
+	fin >> type;
+
+	fin >> ride.DriverRanking;
+
+	fin >> ride.VehicleRanking;
+
+	fin >> fare;
+
+	fin >> sid;
+
+	ride.setSource(source);
+	ride.setDestination(destination);
+	ride.setDistance(distance);
+	ride.setBookingDate(date);
+	ride.setBookingTime(time);
+	ride.setStatus(status);
+	ride.setCId(cid);
+	ride.setDId(did);
+	ride.setVId(vid);
+	ride.setFare(fare);
+	ride.setSId(sid);
+
+	ride.setRideType(type);
+
+	return fin;
+}
+
+
+Delivery::Delivery(string s = " ", string d = " ", float dis = 0, Date bDate = Date(), mTime bTime = mTime(), int st = 0, float fRate = 0, int cID = 0, int dID = 0, int vID = 0, int sID = 0, float fare = 0, float weight = 0, string type = " ") :Service(s, d, dis, bDate, bTime, st, fRate, cID, dID, vID, sID, fare) {
+
+	goodsWeight = weight;
+	goodsType = type;
+
+}
+
+void Delivery::setGoodsWeight(float weight) {
+	goodsWeight = weight;
+}
+
+void Delivery::setGoodsType(string type = " ") {
+	goodsType = type;
+}
+
+float Delivery::getGoodsWeight() {
+	return goodsWeight;
+}
+
+string Delivery::getGoodsType() {
+	return goodsType;
+}
+
+Delivery::~Delivery() {
+	//
+}
+
+
+
+ostream& operator<<(ostream& out, Delivery& delivery) {
+	out << "------------------Delivery Information------------------\n";
+	out << "Source: " << delivery.getSource() << endl;
+	out << "Destination: " << delivery.getDestination() << endl;
+	out << "Distance: " << delivery.getDistance() << endl;
+	out << "Booking Date: " << delivery.getBookingDate();
+	out << "Booking Time: " << delivery.getBookingTime();
+	out << "Status: " << delivery.getStatus() << endl;
+	out << "Customer ID: " << delivery.getCId() << endl;
+	out << "Driver ID: " << delivery.getDId() << endl;
+	out << "Vehicle ID: " << delivery.getVId() << endl;
+	out << "Goods Weight: " << delivery.getGoodsWeight() << endl;
+	out << "Goods Type: " << delivery.getGoodsType() << endl;
+	out << "Fare: " << delivery.getFare() << endl;
+	out << "Service ID: " << delivery.getSId() << endl;
+
+	out << "--------------------------------------------------------\n";
+	return out;
+}
+
+istream& operator>>(istream& in, Delivery& delivery) {
+
+	string source, destination, goodsType;
+	float distance, weight;
+	Date date;
+	mTime mtime;
+	int status;
+	int cid, did, vid, sid;
+
+	cout << "Enter Source: ";
+	in >> source;
+	in.ignore();
+
+	cout << "Enter Destiantion: ";
+	in >> destination;
+	in.ignore();
+
+	cout << "Enter distance (in KMs): ";
+	in >> distance;
+
+	cout << "Enter Booking Date: \n";
+	in >> date;
+
+	cout << "Enter Booking Time: \n";
+	in >> mtime;
+
+	/*cout << "Enter Status (0 for pending, 1 if complete): ";
+	in >> status;*/
+
+	cout << "Enter Customer ID: ";
+	in >> cid;
+
+	cout << "Enter Driver ID: ";
+	in >> did;
+
+	cout << "Enter Vehicle ID: ";
+	in >> vid;
+
+	cout << "Enter Goods Weight: ";
+	in >> weight;
+	in.ignore();
+
+	cout << "Enter Goods Type: ";
+	in >> goodsType;
+
+	srand(time(0));
+	sid = rand();
+
+	delivery.setSource(source);
+	delivery.setDestination(destination);
+	delivery.setDistance(distance);
+	delivery.setBookingDate(date);
+	delivery.setBookingTime(mtime);
+	delivery.setStatus(0);
+	delivery.setCId(cid);
+	delivery.setDId(did);
+	delivery.setVId(vid);
+	delivery.setSId(sid);
+	delivery.setFare(distance * 11);
+
+	delivery.setGoodsWeight(weight);
+	delivery.setGoodsType(goodsType);
+	
+	return in;
+}
+
+
+ofstream& operator<<(ofstream& fout, Delivery& delivery) {
+
+	fout << delivery.getSource() << endl;
+	fout << delivery.getDestination() << endl;
+	fout << delivery.getDistance() << endl;
+	fout << delivery.getBookingDate();
+	fout << delivery.getBookingTime();
+	fout << delivery.getStatus() << endl;
+	fout << delivery.getCId() << endl;
+	fout << delivery.getDId() << endl;
+	fout << delivery.getVId() << endl;
+	fout << delivery.getGoodsWeight() << endl;
+	fout << delivery.getGoodsType() << endl;
+	fout << delivery.getFare() << endl << endl;
+	fout << delivery.getSId() << endl << endl;
+
+	return fout;
+}
+
+ifstream& operator>>(ifstream& fin, Delivery& delivery) {
+
+	string source, destination, goodsType;
+	float distance, weight, fare;
+	Date date;
+	mTime time;
+	int status;
+	int cid, did, vid, sid;
+
+	fin >> source;
+
+	fin >> destination;
+
+	fin >> distance;
+
+	fin >> date;
+
+	fin >> time;
+
+	fin >> status;
+
+	fin >> cid;
+
+	fin >> did;
+
+	fin >> vid;
+
+	fin >> weight;
+
+	fin >> goodsType;
+
+	fin >> fare;
+
+	fin >> sid;
+
+	delivery.setSource(source);
+	delivery.setDestination(destination);
+	delivery.setDistance(distance);
+	delivery.setBookingDate(date);
+	delivery.setBookingTime(time);
+	delivery.setStatus(status);
+	delivery.setCId(cid);
+	delivery.setDId(did);
+	delivery.setVId(vid);
+	delivery.setSId(sid);
+	delivery.setFare(fare);
+	delivery.setGoodsWeight(weight);
+	delivery.setGoodsType(goodsType);
+
+	return fin;
+}
+
+
+//Person
+
+Person::Person() {
+	pName = Name();
+	DOB = Date();
+	Age = 0;
+	Nid = 0;
+}
+
+Person::Person(Name name, Date dob, int age, int id) {
+	pName = name;
+	DOB = dob;
+	Age = age;
+	Nid = id;
+}
+
+Person::Person(const Person& person) {
+	pName = person.pName;
+	DOB = person.DOB;
+	Age = person.Age;
+	Nid = person.Nid;
+}
+
+void Person::setName(Name name) {
+	pName = name;
+}
+void Person::setDOB(Date dob) {
+	DOB = dob;
+}
+void Person::setAge(int age) {
+	Age = age;
+}
+void Person::setID(int id) {
+	Nid = id;
+}
+
+Name Person::getName() {
+	return pName;
+}
+
+Date Person::getDOB() {
+	return DOB;
+}
+int Person::getAge() {
+	return Age;
+}
+int Person::getID() {
+	return Nid;
+}
+
+ostream& operator<<(ostream& out, const Person& person) {
+	out << "-------- Person Information --------" << endl;
+	out << "Person ID: " << person.Nid << endl;
+	out << "Name: " << person.pName << endl;
+	out << "DOB: " << person.DOB << endl;
+	out << "Age: " << person.Age << endl;
+	out << "------------------------------------" << endl;
+	return out;
+}
+
+istream& operator>>(istream& in, Person& person) {
+	int id, age;
+	Name name;
+	
+	Date dob;
+	srand(time(0));
+	id = rand();
+	
+	in>>name;
+
+
+	cout << "Enter Date of Birth: \n";
+	in >> dob;
+	cout << "Enter age: ";
+	in >> age;
+	
+	person.setID(id);
+	person.setName(name);
+	person.setDOB(dob);
+	person.setAge(age);
+
+	return in;
+}
+
+ofstream& operator<<(ofstream& fout, Person& person) {
+	fout << "-------- Person Information --------" << endl;
+	fout << "Person ID: " << person.Nid << endl;
+	fout << "Name: " << person.pName << endl;
+	fout << "DOB: " << person.DOB << endl;
+	fout << "Age: " << person.Age << endl;
+	fout << "------------------------------------" << endl;
+	return fout;
+}
+
+ifstream& operator>>(ifstream& fin, Person& person) {
+	int id, age;
+	Name name;
+	Date dob;
+
+	fin >> id;
+
+	fin >> name;
+
+
+	fin >> dob;
+	fin >> age;
+
+	person.setID(id);
+	person.setName(name);
+	person.setDOB(dob);
+	person.setAge(age);
+
+	return fin;
+}
+
+
+//Customer
+
+Customer::Customer() {
+	cId = 0;
+	noofBookings = 0;
+	bookingHistory = nullptr;
+	bookingHistory = new Service * [1];
+}
+
+Customer::Customer(Name name, Date dob, int age, int id, int cID, Service** history,int noofbookings) :Person(name, dob, age, id) {
+	cId = cID;
+	bookingHistory = nullptr;
+	bookingHistory = new Service * [1];
+	noofBookings = noofbookings;
+
+	if (history != nullptr || noofbookings > 0) {
+		bookingHistory[0] = new Service[noofbookings];
+		for (int i = 0; i < noofbookings; i++)
+		{
+			bookingHistory[0][i] = history[0][i];
+		}
+	}
+}
+
+Customer::Customer(const Customer& customer) {
+	cId = customer.cId;
+	bookingHistory = nullptr;
+	noofBookings = customer.noofBookings;
+	bookingHistory = new Service * [1];
+
+	if (customer.bookingHistory != nullptr || customer.noofBookings > 0) {
+		bookingHistory[0] = new Service[customer.noofBookings];
+		for (int i = 0; i < customer.noofBookings; i++)
+		{
+			bookingHistory[0][i] = customer.bookingHistory[0][i];
+		}
+	}
+}
+
+void Customer::setCId(int id) {
+	cId = id;
+}
+void Customer::setHistorry(Service** history,int size) {
+	noofBookings = size;
+	if (history != nullptr || size > 0) {
+		bookingHistory[0] = new Service[size];
+		for (int i = 0; i < size; i++)
+		{
+			bookingHistory[0][i] = history[0][i];
+		}
+	}
+}
+
+int Customer::getCId() {
+	return cId;
+}
+
+int Customer::getNoofServices() {
+	return noofBookings;
+}
+
+Service** Customer::getHistory() {
+	return bookingHistory;
+}
+
+Customer::~Customer() {
+	if (bookingHistory != nullptr) {
+
+		for (int i = 0; i < noofBookings; i++)
+		{
+			delete[] bookingHistory[i];
+		}
+		delete[] bookingHistory;
+	}
+}
+
+int Customer::findHistory(int id,int &noofrides) {
+	int total = 0;
+	int found = 0;
+	int found1 = 0;
+	Delivery* deliveries = nullptr;
+	Ride* rides = nullptr;
+	ifstream dFile("deliveries.txt");
+	if (dFile.is_open()) {
+		dFile >> total;
+		if (total > 0) {
+			deliveries = new Delivery[total];
+			for (int i = 0; i < total; i++)
+			{
+				dFile >> deliveries[i];
+			}
+		}
+	}
+	dFile.close();
+	for (int i = 0; i < total; i++)
+	{
+		if (deliveries[i].getCId() == id) {
+			found++;
+		}
+	}
+
+
+	ifstream rFile("rides.txt");
+	if (rFile.is_open()) {
+		rFile >> total;
+		if (total > 0) {
+			rides = new Ride[total];
+			for (int i = 0; i < total; i++)
+			{
+				rFile >> rides[i];
+			}
+		}
+	}
+	rFile.close();
+
+	for (int i = 0; i < total; i++)
+	{
+		if (rides[i].getCId() == id) {
+			found1++;
+		}
+	}
+	noofrides = found1;
+
+	delete[] deliveries;
+	delete[] rides;
+	deliveries = nullptr;
+	rides = nullptr;
+
+	return found;
+}
+void Customer::loadHistory(int id) {
+	int noofRides = 0;
+	int noofDeliveries = findHistory(id, noofRides);
+	int total = noofDeliveries + noofRides;
+	int noofentries = 0;
+
+	noofBookings = total;
+
+	bookingHistory = new Service*[1];
+	bookingHistory[0] = new Service[total];
+
+	Ride* temp1 = nullptr;
+	Delivery* temp2 = nullptr;
+
+	ifstream rFile("rides.txt");
+	if (rFile.is_open()) {
+		rFile >> noofentries;
+		temp1 = new Ride[noofentries];
+		for (int i = 0; i < noofentries; i++)
+		{
+			rFile >> temp1[i];
+		}
+	}
+	rFile.close();
+	int j = 0;
+	for (int i = 0; i < noofentries; i++)
+	{
+		if (temp1[i].getCId() == id) {
+			bookingHistory[0][j++] = temp1[i];
+		}
+	}
+
+
+
+	ifstream dFile("deliveries.txt");
+	if (dFile.is_open()) {
+		dFile >> noofentries;
+		temp2 = new Delivery[noofentries];
+		for (int i = 0; i < noofentries; i++)
+		{
+			dFile >> temp2[i];
+		}
+	}
+	dFile.close();
+	for (int i = 0; i < noofentries; i++)
+	{
+		if (temp2[i].getCId() == id) {
+			bookingHistory[0][j++] = temp2[i];
+		}
+	}
+	delete[] temp1;
+	delete[] temp2;
+	temp1 = nullptr;
+	temp2 = nullptr;
+}
+
+ostream& operator<<(ostream& out, Customer& customer) {
+	out << "------------- Customer Information -------------------" << endl;
+	out << "Name: " << customer.getName();
+	out << "Customer ID: "<<customer.getCId() << endl;
+	out << "Person ID: "<<customer.getID() << endl;
+	out << "DOB: " << customer.getDOB();
+	out << "Age: " << customer.getAge() << endl;
+	customer.loadHistory(customer.cId);
+	out << "Total Services: " << customer.noofBookings << endl;
+	out << "------------------------------------------------------" << endl;
+	return out;
+
+}
+
+istream& operator>>(istream& in, Customer& customer) {
+
+	int age, pid, cid;
+	string fN, lN;
+	Date dob;
+	Name name;
+
+	in >> name;
+
+	cout << "Enter Date of Birth: \n";
+	in >> dob;
+
+	cout << "Enter age: ";
+	in >> age;
+
+	srand(time(0));
+
+	pid = rand();
+	cid = rand();
+
+	customer.setName(name);
+	customer.setDOB(dob);
+	customer.setAge(age);
+	customer.setID(pid);
+	customer.setCId(cid);
+	customer.setHistorry(nullptr,0);
+
+	return in;
+}
+
+
+ifstream& operator>>(ifstream& fin, Customer& cust)
+{
+
+	int cid, pid;
+	string fN, lN;
+	Name name;
+	Date dob;
+
+
+	fin >> cid;
+	fin >> pid;
+	fin >> name;
+
+	fin >> dob;
+
+	cust.setCId(cid);
+	cust.setID(pid);
+	cust.setName(name);
+	cust.setDOB(dob);
+
+	return fin;
+}
+
+ofstream& operator<<(ofstream& fout, Customer& cust)
+{
+	fout << cust.getCId() << endl;
+	fout << cust.getID() << endl;
+	fout << cust.getName();
+	fout << cust.getDOB();
+	fout << cust.getAge() << endl << endl;
+
+	return fout;
+}
+
+
+
+//Driver
+
+Driver::Driver() {
+	dId = 0;
+	LicencesList = nullptr;
+	noofLicences = 0;
+	overallRanking = 0;
+	salary = 0;
+	experience = 0;
+	status = 1;
+	noofServices = 0;
+	serviceHistory = nullptr;
+	serviceHistory = new Service * [1];
+	LicencesList = new char* [1];
+}
+
+Driver::Driver(Name name, Date dob, int age, int id, int dID, char** list, int totalLicence, float rank, float salary, int experience, int status, Service** history,int noofservices = 0) :Person(name, dob, age, id) {
+	dId = dID;
+	LicencesList = nullptr;
+	if (list != nullptr) {
+
+		LicencesList = new char* [totalLicence];
+		for (int i = 0; i < totalLicence; i++)
+		{
+			LicencesList[i] = new char[strlen(list[i]) + 1];
+			strcpy(LicencesList[i], list[i]);
+		}
+
+	}
+	noofLicences = totalLicence;
+	overallRanking = rank;
+	this->salary = salary;
+	this->experience = experience;
+	this->status = status;
+	this->noofServices = noofservices;
+	serviceHistory = new Service * [1];
+
+	if (history!=nullptr||noofservices > 0) {
+		serviceHistory[0] = new Service[noofservices];
+		for (int i = 0; i < noofservices; i++)
+		{
+			serviceHistory[0][i] = history[0][i];
+		}
+	}
+	LicencesList = new char* [1];
+	//LicencesList[0] = new char [20];
+}
+
+Driver::Driver(const Driver& driver) {
+	dId = driver.dId;
+
+	LicencesList = nullptr;
+	if (driver.LicencesList != nullptr) {
+
+		LicencesList = new char* [driver.noofLicences];
+		for (int i = 0; i < driver.noofLicences; i++)
+		{
+			LicencesList[i] = new char[strlen(driver.LicencesList[i]) + 1];
+			strcpy(LicencesList[i], driver.LicencesList[i]);
+		}
+
+	}
+	noofLicences = driver.noofLicences;
+	overallRanking = driver.overallRanking;
+	this->salary = driver.salary;
+	this->experience = driver.experience;
+	this->status = driver.status;
+	this->noofServices = driver.noofServices;
+	serviceHistory = new Service * [1];
+
+	if (driver.noofServices> 0 || driver.serviceHistory!=nullptr) {
+		serviceHistory[0] = new Service[driver.noofServices];
+		for (int i = 0; i < driver.noofServices; i++)
+		{
+			serviceHistory[0][i] = driver.serviceHistory[0][i];
+		}
+	}
+	if (noofLicences > 0) {
+		LicencesList = new char* [noofLicences];
+		for (int i = 0; i < noofLicences; i++)
+		{
+			LicencesList[i] = new char[20];
+		}
+	}
+}
+
+Driver::~Driver() {
+	if (LicencesList != nullptr) {
+
+		for (int i = 0; i < noofLicences; i++)
+		{
+			delete[] LicencesList[i];
+		}
+		delete[] LicencesList;
+		LicencesList = nullptr;
+	}
+
+	if (serviceHistory != nullptr) {
+
+		for (int i = 0; i < noofServices; i++)
+		{
+			delete[] serviceHistory[i];
+		}
+		delete[] serviceHistory;
+	}
+	if (LicencesList != nullptr) {
+		for (int i = 0; i < noofLicences; i++)
+		{
+			delete[] LicencesList[i];
+		}
+		delete[] LicencesList;
+	}
+}
+
+void Driver::setDId(int id) {
+	dId = id;
+}
+void Driver::setLicenceList(char** list,int size) {
+	noofLicences = size;
+	if (list != nullptr) {
+
+		LicencesList = new char* [size];
+		for (int i = 0; i < size; i++)
+		{
+			LicencesList[i] = new char[strlen(list[i]) + 1];
+			strcpy(LicencesList[i], list[i]);
+		}
+
+	}
+}
+void Driver::setNoofLicences(int no) {
+	noofLicences = no;
+}
+void Driver::setRanking(float rank) {
+	overallRanking = rank;
+}
+void Driver::setSalary(float salary) {
+	this->salary = salary;
+}
+void Driver::setExperience(int exp) {
+	experience = exp;
+}
+void Driver::setStatus(int sts) {
+	status = sts;
+}
+
+void Driver::setHistory(Service** history,int size) {
+	noofServices = size;
+	if (history !=nullptr||size > 0) {
+		serviceHistory[0] = new Service[size];
+		for (int i = 0; i < size; i++)
+		{
+			serviceHistory[0][i] = history[0][i];
+		}
+	}
+}
+
+int Driver::getDId() {
+	return	dId;
+}
+char** Driver::getLicenceList() {
+	return LicencesList;
+}
+int Driver::getNoofLicences() {
+	return noofLicences;
+}
+float Driver::getRanking() {
+	return overallRanking;
+}
+float Driver::getSalary() {
+	return salary;
+}
+int Driver::getExperience() {
+	return experience;
+}
+int Driver::getStatus() {
+	return status;
+}
+
+Service** Driver::getHistory() {
+	return serviceHistory;
+}
+
+int Driver::getNoofServices() {
+	return noofServices;
+}
+
+int Driver::findHistory(int id, int& noofrides) {
+	int total = 0;
+	int found = 0;
+	int found1 = 0;
+	Delivery* deliveries = nullptr;
+	Ride* rides = nullptr;
+
+	ifstream dFile("deliveries.txt");
+	if (dFile.is_open()) {
+		dFile >> total;
+		if (total > 0) {
+			deliveries = new Delivery[total];
+			for (int i = 0; i < total; i++)
+			{
+				dFile >> deliveries[i];
+			}
+		}
+	}
+	dFile.close();
+	for (int i = 0; i < total; i++)
+	{
+		if (deliveries[i].getDId() == id) {
+			found++;
+		}
+	}
+
+
+	ifstream rFile("rides.txt");
+	if (rFile.is_open()) {
+		rFile >> total;
+		if (total > 0) {
+			rides = new Ride[total];
+			for (int i = 0; i < total; i++)
+			{
+				rFile >> rides[i];
+			}
+		}
+	}
+	rFile.close();
+
+	for (int i = 0; i < total; i++)
+	{
+		if (rides[i].getDId() == id) {
+			found1++;
+		}
+	}
+	noofrides = found1;
+
+	delete[] deliveries;
+	delete[] rides;
+	deliveries = nullptr;
+	rides = nullptr;
+
+	return found;
+}
+void Driver::loadHistory(int id) {
+	int noofRides = 0;
+	int noofDeliveries = findHistory(id, noofRides);
+	int total = noofDeliveries + noofRides;
+	int noofentries = 0;
+
+	noofServices = total;
+
+	serviceHistory = new Service * [1];
+	serviceHistory[0] = new Service[total];
+
+	Ride* temp1 = nullptr;
+	Delivery* temp2 = nullptr;
+
+	ifstream rFile("rides.txt");
+	if (rFile.is_open()) {
+		rFile >> noofentries;
+		temp1 = new Ride[noofentries];
+		for (int i = 0; i < noofentries; i++)
+		{
+			rFile >> temp1[i];
+		}
+	}
+	rFile.close();
+	int j = 0;
+	for (int i = 0; i < noofentries; i++)
+	{
+		if (temp1[i].getDId() == id) {
+			serviceHistory[0][j++] = temp1[i];
+		}
+	}
+
+
+
+	ifstream dFile("deliveries.txt");
+	if (dFile.is_open()) {
+		dFile >> noofentries;
+		temp2 = new Delivery[noofentries];
+		for (int i = 0; i < noofentries; i++)
+		{
+			dFile >> temp2[i];
+		}
+	}
+	dFile.close();
+	for (int i = 0; i < noofentries; i++)
+	{
+		if (temp2[i].getDId() == id) {
+			serviceHistory[0][j++] = temp2[i];
+		}
+	}
+	delete[] temp1;
+	delete[] temp2;
+	temp1 = nullptr;
+	temp2 = nullptr;
+}
+
+
+ostream& operator<<(ostream& out, Driver& driver) {
+	out << "------------- Driver Information -------------------" << endl;
+	out << "Name: " << driver.getName();
+	out << "Driver ID: " << driver.getDId() << endl;
+	out << "Person ID: " << driver.getID() << endl;
+	out << "DOB: " << driver.getDOB();
+	out << "Age: " << driver.getAge() << endl;
+	out << "No of Licences: " << driver.getNoofLicences() << endl;
+	out << "Licence List: ";
+	for (int i = 0; i < driver.getNoofLicences(); i++)
+	{
+		out << driver.getLicenceList()[i] << ", ";
+	}
+	out << endl;
+	out << "Ranking: " << driver.getRanking() << endl;
+	out << "Salary: " << driver.getSalary() << endl;
+	out << "Status (1:free, 2: booked, 3: cancelled): " << driver.getStatus() << endl;
+	 
+	driver.loadHistory(driver.dId);
+	out << "Total Services: " << driver.noofServices << endl;
+
+	out << "----------------------------------------------------" << endl;
+
+	return out;
+
+}
+
+istream& operator>>(istream& in, Driver& driver) {
+
+	Name name;
+	Date dob;
+	int pid, did, age, noofLicences, status, experience;
+
+	float ranking, salary;
+
+	in >> name;
+
+	cout << "Enter Date of Birth: \n";
+	in >> dob;
+
+	cout << "Enter age: ";
+	in >> age;
+
+	cout << "No. of Licences: ";
+	in >> noofLicences;
+
+	char** Licences = new char* [noofLicences];
+
+	for (int i = 0; i < noofLicences; i++)
+	{
+		Licences[i] = new char[20];
+	}
+
+	for (int i = 0; i < noofLicences; i++)
+	{
+		cout << "Enter Licence " << i + 1 << ": ";
+		in >> Licences[i];
+		in.ignore();
+	}
+
+	cout << "Enter ranking: ";
+	in >> ranking;
+
+	cout << "Enter salary: ";
+	in >> salary;
+
+	cout << "Enter experience: ";
+	in >> experience;
+
+	cout << "Enter status (1 for free, 2 if booked and 3 if canceled): ";
+	in >> status;
+
+	srand(time(0));
+
+	pid = rand();
+	did = rand();
+
+	driver.setName(name);
+	driver.setDOB(dob);
+	driver.setAge(age);
+	driver.setID(pid);
+	driver.setDId(did);
+	driver.setHistory(nullptr, 0);
+	driver.setNoofLicences(noofLicences);
+	driver.setLicenceList(Licences, noofLicences);
+	driver.setRanking(ranking);
+	driver.setSalary(salary);
+	driver.setStatus(status);
+	driver.setExperience(experience);
+
+	for (int i = 0; i < noofLicences; i++)
+	{
+		delete[] Licences[i];
+	}
+	delete[] Licences;
+
+	return in;
+}
+
+
+ofstream& operator<<(ofstream& fout, Driver& driver) {
+
+	fout << driver.getDId() << endl;
+	fout << driver.getID() << endl;
+	fout << driver.getName();
+	fout << driver.getDOB();
+	fout << driver.getAge() << endl;
+	fout << driver.getNoofLicences() << endl;
+	for (int i = 0; i < driver.getNoofLicences(); i++)
+	{
+		fout << driver.getLicenceList()[i] <<" ";
+	}
+	fout << endl;
+	fout << driver.getRanking() << endl;
+	fout << driver.getSalary() << endl;
+	fout << driver.getExperience() << endl;
+	fout << driver.getStatus() << endl << endl;
+
+	//licences, history
+
+	return fout;
+}
+
+
+ifstream& operator>>(ifstream& fin, Driver& driver) {
+
+	Name name;
+	Date dob;
+	int pid, did, age, noofLicences, status, experience;
+
+	float ranking, salary;
+
+	fin >> did;
+
+	fin >> pid;
+
+	fin >> name;
+
+	fin >> dob;
+
+	fin >> age;
+
+	fin >> noofLicences;
+
+	char** Licences = new char* [noofLicences];
+
+	for (int i = 0; i < noofLicences; i++)
+	{
+		Licences[i] = new char[20];
+	}
+
+	for (int i = 0; i < noofLicences; i++)
+	{
+		fin >> Licences[i];
+	}
+
+	fin >> ranking;
+
+	fin >> salary;
+
+	fin >> experience;
+
+	fin >> status;
+
+	driver.setName(name);
+	driver.setDOB(dob);
+	driver.setAge(age);
+	driver.setID(pid);
+	driver.setDId(did);
+	driver.setHistory(nullptr, 0);
+	driver.setNoofLicences(noofLicences);
+	driver.setLicenceList(Licences, noofLicences);
+	driver.setRanking(ranking);
+	driver.setSalary(salary);
+	driver.setStatus(status);
+	driver.setExperience(experience);
+
+	for (int i = 0; i < noofLicences; i++)
+	{
+		delete[] Licences[i];
+	}
+	delete[] Licences;
+
+	//licences & history
+	return fin;
+}
+
+
+//Feature 
+
+Feature::Feature(int fid = 0, string desc = " ", float cost = 0) {
+	this->fId = fid;
+	description = desc;
+	this->cost = cost;
+}
+
+void Feature::setFId(int id) {
+	fId = id;
+}
+
+void Feature::setDescription(string desc) {
+	description = desc;
+}
+void Feature::setCost(float cost) {
+	this->cost = cost;
+}
+
+int Feature::getFId() {
+	return fId;
+}
+
+string Feature::getDescription() {
+	return description;
+}
+
+float Feature::getCost() {
+	return cost;
+}
+
+
+Feature::~Feature() {
+	//
+}
+
+ostream& operator<<(ostream& out, const Feature&feat)
+{
+	cout << "Feature ID: " << feat.fId << endl;
+	cout << "Description: " << feat.description << endl;
+	cout << "Cost: " << feat.cost << endl;
+
+	return out;
+}
+
+istream& operator>>(istream& in, Feature& feat)
+{
+	cout << "Enter Feature ID: ";
+	in >> feat.fId;
+
+	cout << "Enter Feature Description (MAX 50 characters): ";
+	in >> feat.description;
+	in.ignore();
+
+	cout << "Enter Feature Cost: ";
+	in >> feat.cost;
+
+	return in;
+}
+
+
+ofstream& operator<<(ofstream& fout, Feature& feat)
+{
+	fout << feat.fId << endl;
+	fout << feat.description << endl;
+	fout << feat.cost << endl;
+
+	return fout;
+}
+
+ifstream& operator>>(ifstream& fin, Feature& feat)
+{
+	fin >> feat.fId;
+
+	fin >> feat.description;
+
+	fin >> feat.cost;
+
+	return fin;
+}
+
+
+//Vehicle
+
+Vehicle::Vehicle(int vId = 0, int regNo = 0, float avgMil = 0, string licenceType = " ", bool sts = false, string fuel = " ", float ranking = 0, Date manuDate = Date(), Feature* list = nullptr, Service** history = nullptr,int noofservices = 0, int nooffeat = 0) {
+	this->vId = vId;
+	registrationNo = regNo;
+	avgMileage = avgMil;
+
+	LicenceType = licenceType;
+	status = sts;
+
+	fueltype = fuel;
+	overallRanking = ranking;
+	manufacturingDate = manuDate;
+
+	noofFeatures = nooffeat;
+
+	this->list = nullptr;
+	if (list != nullptr) {
+		
+		this->list = new Feature[nooffeat];
+		for (int i = 0; i < nooffeat; i++)
+		{
+			this->list[i] = list[i];
+		}
+	}
+	noofServices = noofservices;
+	serviceHistory = new Service * [1];
+	if (history != nullptr||noofservices>0) {
+
+		serviceHistory[0] = new Service[noofservices];
+
+		for (int i = 0; i < noofservices; i++)
+		{
+			serviceHistory[0][i] = history[0][i];
+		}
+
+	}
+}
+
+Vehicle::~Vehicle() {
+	delete[] list;
+	list = nullptr;
+
+	if (serviceHistory != nullptr) {
+
+		for (int i = 0; i < noofServices; i++)
+		{
+			delete[] serviceHistory[i];
+		}
+		delete[] serviceHistory;
+	}
+}
+
+int Vehicle::getVId() {
+	return vId;
+}
+
+int Vehicle::getRegNo() {
+	return registrationNo;
+}
+
+int Vehicle::getAvgMil() {
+	return avgMileage;
+}
+
+string Vehicle::getLicenceType() {
+	return LicenceType;
+}
+
+bool Vehicle::getStatus() {
+	return status;
+}
+
+string Vehicle::getFuelType() {
+	return fueltype;
+}
+
+int Vehicle::getOverallRanking() {
+	return overallRanking;
+}
+
+Date Vehicle::getManuDate() {
+	return manufacturingDate;
+}
+
+Feature* Vehicle::getFeatList() {
+	return list;
+}
+
+int Vehicle::getNoofFeatures() {
+	return noofFeatures;
+}
+
+Service** Vehicle::getServiceHistory() {
+	return serviceHistory;
+}
+
+int Vehicle::getNoofServices() {
+	return noofServices;
+}
+
+void Vehicle::setVId(int id) {
+	vId = id;
+}
+
+void Vehicle::setRegNo(int no) {
+	registrationNo = no;
+}
+
+void Vehicle::setAvgMil(int mil) {
+	avgMileage = mil;
+}
+
+
+void Vehicle::setFuelType(string type) {
+	fueltype = type;
+}
+
+void Vehicle::setLicenceType(string type) {
+	LicenceType = type;
+}
+
+void Vehicle::setStatus(bool sts) {
+	status = sts;
+}
+
+void Vehicle::setOverallRanking(int ranking) {
+	overallRanking = ranking;
+}
+
+void Vehicle::setManuDate(Date date) {
+	manufacturingDate = date;
+}
+
+void Vehicle::setNoofFeatures(int no) {
+	noofFeatures = no;
+}
+
+void Vehicle::setFeatList(Feature*fList,int no) {
+	noofFeatures = no;
+
+	this->list = nullptr;
+	if (fList != nullptr) {
+
+		this->list = new Feature[no];
+		for (int i = 0; i < no; i++)
+		{
+			this->list[i] = fList[i];
+		}
+	}
+}
+
+void Vehicle::setServiceHistory(Service**services,int no) {
+	noofServices = no;
+	serviceHistory = new Service * [1];
+	if (services != nullptr || no > 0) {
+
+		serviceHistory[0] = new Service[no];
+
+		for (int i = 0; i < no; i++)
+		{
+			serviceHistory[0][i] = services[0][i];
+		}
+
+	}
+}
+
+
+int Vehicle::findHistory(int id, int& noofrides) {
+	int total = 0;
+	int found = 0;
+	int found1 = 0;
+	Delivery* deliveries = nullptr;
+	Ride* rides = nullptr;
+
+	ifstream dFile("deliveries.txt");
+	if (dFile.is_open()) {
+		dFile >> total;
+		if (total > 0) {
+			deliveries = new Delivery[total];
+			for (int i = 0; i < total; i++)
+			{
+				dFile >> deliveries[i];
+			}
+		}
+	}
+	dFile.close();
+	for (int i = 0; i < total; i++)
+	{
+		if (deliveries[i].getVId() == id) {
+			found++;
+		}
+	}
+
+
+	ifstream rFile("rides.txt");
+	if (rFile.is_open()) {
+		rFile >> total;
+		if (total > 0) {
+			rides = new Ride[total];
+			for (int i = 0; i < total; i++)
+			{
+				rFile >> rides[i];
+			}
+		}
+	}
+	rFile.close();
+
+	for (int i = 0; i < total; i++)
+	{
+		if (rides[i].getVId() == id) {
+			found1++;
+		}
+	}
+	noofrides = found1;
+
+	delete[] deliveries;
+	delete[] rides;
+	deliveries = nullptr;
+	rides = nullptr;
+
+	return found;
+}
+void Vehicle::loadHistory(int id) {
+	int noofRides = 0;
+	int noofDeliveries = findHistory(id, noofRides);
+	int total = noofDeliveries + noofRides;
+	int noofentries = 0;
+
+	noofServices = total;
+
+	serviceHistory = new Service * [1];
+	serviceHistory[0] = new Service[total];
+
+	Ride* temp1 = nullptr;
+	Delivery* temp2 = nullptr;
+
+	ifstream rFile("rides.txt");
+	if (rFile.is_open()) {
+		rFile >> noofentries;
+		temp1 = new Ride[noofentries];
+		for (int i = 0; i < noofentries; i++)
+		{
+			rFile >> temp1[i];
+		}
+	}
+	rFile.close();
+	int j = 0;
+	for (int i = 0; i < noofentries; i++)
+	{
+		if (temp1[i].getVId() == id) {
+			serviceHistory[0][j++] = temp1[i];
+		}
+	}
+
+
+
+	ifstream dFile("deliveries.txt");
+	if (dFile.is_open()) {
+		dFile >> noofentries;
+		temp2 = new Delivery[noofentries];
+		for (int i = 0; i < noofentries; i++)
+		{
+			dFile >> temp2[i];
+		}
+	}
+	dFile.close();
+	for (int i = 0; i < noofentries; i++)
+	{
+		if (temp2[i].getVId() == id) {
+			serviceHistory[0][j++] = temp2[i];
+		}
+	}
+	delete[] temp1;
+	delete[] temp2;
+	temp1 = nullptr;
+	temp2 = nullptr;
+}
+
+
+ostream& operator<<(ostream& out, Vehicle& vehicle)
+{
+	out << "---------------Vehicle Information---------------\n";
+	out << "Vehicle ID: " << vehicle.vId << endl;
+	out << "Registration No.: " << vehicle.registrationNo << endl;
+	out << "Average Mileage: " << vehicle.avgMileage << endl;
+	out << "Licence Type: " << vehicle.LicenceType << endl;
+	out << "Status (false for free, true if booked): " << vehicle.status << endl;
+	out << "Fuel Type: " << vehicle.fueltype << endl;
+	out << "Overall Ranking: " << vehicle.overallRanking << endl;
+	out << "Manufactured Date: "<< vehicle.manufacturingDate;
+	out << "No of Features: " << vehicle.noofFeatures << endl;
+	for (int i = 0; i < vehicle.noofFeatures; i++)
+	{
+		out << "Feature " << i + 1 << ": \n";
+		out << "Feature ID: " << vehicle.list[i].getFId() << endl;
+		out << "Feature Description: " << vehicle.list[i].getDescription() << endl;
+		out << "Feature Cost: " << vehicle.list[i].getCost() << endl;
+	}
+
+	vehicle.loadHistory(vehicle.vId);
+	out << "Total Services: " << vehicle.noofServices << endl;
+
+	cout << "-------------------------------------------------\n";
+	return out;
+}
+
+
+istream& operator>>(istream& in, Vehicle& vehicle)
+{
+	string fType, lType, Description;
+	int vid, regNo, avgMil, rank, noofFeatures;
+	bool status;
+	Date date;
+	int fId;
+	float cost;
+
+	cout << "Enter vehicle ID: ";
+	in >> vid;
+
+	cout << "Enter Registration No.: ";
+	in >> regNo;
+
+	cout << "Enter Average Mileage: ";
+	in >> avgMil;
+
+	cout << "Enter Licence Type: ";
+	in >> lType;
+	in.ignore();
+
+	cout << "Enter Status (0 for free, 1 if booked): ";
+	in >> status;
+
+	cout << "Enter Fuel Type: ";
+	in >> fType;
+	in.ignore();
+
+	cout << "Enter Overall Ranking: ";
+	in >> rank;
+
+	cout << "Enter Manufactured Date: \n";
+	in >> date;
+
+	cout << "Enter No of Features: ";
+	in >> noofFeatures;
+
+	Feature* list = new Feature[noofFeatures];
+
+	for (int i = 0; i < noofFeatures; i++)
+	{
+		cout << "Enter Feature " << i + 1 << ": \n";
+		cout << "Enter feature ID: ";
+		in >> fId;
+		in.ignore();
+		cout << "Enter feature Description: ";
+		in >> Description;
+		in.ignore();
+
+		cout << "Enter feature cost: ";
+		in >> cost;
+		list[i].setFId(fId);
+		list[i].setDescription(Description);
+		list[i].setCost(cost);
+	}
+
+	vehicle.setVId(vid);
+	vehicle.setRegNo(regNo);
+	vehicle.setAvgMil(avgMil);
+	vehicle.setLicenceType(lType);
+	vehicle.setFuelType(fType);
+	vehicle.setStatus(status);
+	vehicle.setOverallRanking(rank);
+	vehicle.setManuDate(date);
+
+	vehicle.setFeatList(list,noofFeatures);
+	vehicle.setServiceHistory(nullptr, 0);
+
+	return in;
+}
+
+
+ofstream& operator<<(ofstream& fout, Vehicle& vehicle)
+{
+	fout << vehicle.vId << endl;
+	fout << vehicle.registrationNo << endl;
+	fout << vehicle.avgMileage << endl;
+	fout << vehicle.LicenceType << endl;
+	fout << vehicle.status << endl;
+	fout << vehicle.fueltype << endl;
+	fout << vehicle.overallRanking << endl;
+	fout << vehicle.manufacturingDate;
+	fout << vehicle.noofFeatures << endl;
+	for (int i = 0; i < vehicle.noofFeatures; i++)
+	{
+		fout << vehicle.list[i].getFId() << " " << vehicle.list[i].getCost() << " " << vehicle.list[i].getDescription() << endl;
+		fout << endl;
+	}
+
+	return fout;
+}
+
+ifstream& operator>>(ifstream& fin, Vehicle& vehicle)
+{
+	int noofFeat;
+	string fType, lType, desc;
+	int fid;
+	float cost;
+
+	fin >> vehicle.vId;
+
+	fin >> vehicle.registrationNo;
+
+	fin >> vehicle.avgMileage;
+
+	fin >> lType;
+
+	fin >> vehicle.status;
+
+	fin >> fType;
+
+	fin >> vehicle.overallRanking;
+
+	fin >> vehicle.manufacturingDate;
+
+	fin >> vehicle.noofFeatures;
+	Feature* list = new Feature[vehicle.noofFeatures];
+
+	for (int i = 0; i < vehicle.noofFeatures; i++)
+	{
+		fin >> fid;
+		fin >> cost;
+		fin >> desc;
+		list[i].setFId(fid);
+		list[i].setCost(cost);
+		list[i].setDescription(desc);
+	}
+
+	vehicle.setLicenceType(lType);
+	vehicle.setFuelType(fType);
+	vehicle.setNoofFeatures(vehicle.noofFeatures);
+	vehicle.setFeatList(list, vehicle.noofFeatures);
+	delete[] list;
+	list = nullptr;
+
+	return fin;
+}
+
+//Ride Vehicle
+RideVehicle::RideVehicle(int vId = 0, int regNo = 0, float avgMil = 0, string licenceType = " ", bool sts = false, string fuel = " ", float ranking = 0, Date manuDate = Date(), Feature* list = nullptr, Service** history = nullptr, int noofservices = 0, int nooffeat = 0) :Vehicle(vId, regNo, avgMil, licenceType, sts, fuel, ranking, manuDate, list, history, noofservices, nooffeat) {
+
+}
+
+//Transport Vehicle
+TransportVehicle::TransportVehicle(int vId = 0, int regNo = 0, float avgMil = 0, string licenceType = " ", bool sts = false, string fuel = " ", float ranking = 0, Date manuDate = Date(), Feature* list = nullptr, Service** history = nullptr, int noofservices = 0, int nooffeat = 0) : Vehicle(vId, regNo, avgMil, licenceType, sts, fuel, ranking, manuDate, list, history, noofservices, nooffeat) {
+
+}
+
+//RideTrans Vehicle
+RideTransVehicle::RideTransVehicle(int vId = 0, int regNo = 0, float avgMil = 0, string licenceType = " ", bool sts = false, string fuel = " ", float ranking = 0, Date manuDate = Date(), Feature* list = nullptr, Service** history = nullptr, int noofservices = 0, int nooffeat = 0) : Vehicle(vId, regNo, avgMil, licenceType, sts, fuel, ranking, manuDate, list, history, noofservices, nooffeat) {
+
+}
+
+//SmallRide Vehicle
+SmallRideVehicle::SmallRideVehicle(int vId = 0, int regNo = 0, float avgMil = 0, string licenceType = " ", bool sts = false, string fuel = " ", float ranking = 0, Date manuDate = Date(), Feature* list = nullptr, Service** history = nullptr, int noofservices = 0, int nooffeat = 0) : RideVehicle(vId, regNo, avgMil, licenceType, sts, fuel, ranking, manuDate, list, history, noofservices, nooffeat) {
+
+}
+
+//LargeRide Vehicle
+LargeRideVehicle::LargeRideVehicle(int vId = 0, int regNo = 0, float avgMil = 0, string licenceType = " ", bool sts = false, string fuel = " ", float ranking = 0, Date manuDate = Date(), Feature* list = nullptr, Service** history = nullptr, int noofservices = 0, int nooffeat = 0) : RideVehicle(vId, regNo, avgMil, licenceType, sts, fuel, ranking, manuDate, list, history, noofservices, nooffeat) {
+
+}
+
+
+//LightTrans Vehicle
+LightTransVehicle::LightTransVehicle(int vId = 0, int regNo = 0, float avgMil = 0, string licenceType = " ", bool sts = false, string fuel = " ", float ranking = 0, Date manuDate = Date(), Feature* list = nullptr, Service** history = nullptr, int noofservices = 0, int nooffeat = 0) : TransportVehicle(vId, regNo, avgMil, licenceType, sts, fuel, ranking, manuDate, list, history, noofservices, nooffeat) {
+
+}
+
+//HeavyTrans Vehicle
+HeavyTransVehicle::HeavyTransVehicle(int vId = 0, int regNo = 0, float avgMil = 0, string licenceType = " ", bool sts = false, string fuel = " ", float ranking = 0, Date manuDate = Date(), Feature* list = nullptr, Service** history = nullptr, int noofservices = 0, int nooffeat = 0) : TransportVehicle(vId, regNo, avgMil, licenceType, sts, fuel, ranking, manuDate, list, history, noofservices, nooffeat) {
+
+}
+
+//TMS
+
+TMS::TMS(int customers = 15, int drivers = 10, int vehicles = 20) {
+
+	this->totalCustomers = customers;
+	this->totaldDrivers = drivers;
+	this->totalVehicles = vehicles;
+	totalRides = 1000;
+	totalDeliveries = 1000;
+
+	availableCustomers = 0;
+	availableDrivers = 0;
+	availableVehicles = 0;
+	availableRides = 0;
+	availableDeliveries = 0;
+
+	Customers = new Customer * [1];
+	Customers[0] = new Customer[customers];
+
+	Drivers = new Driver * [1];
+	Drivers[0] = new Driver[drivers];
+
+	Vehicles = new Vehicle * [1];
+	Vehicles[0] = new Vehicle[vehicles];
+
+	Rides = new Ride * [1];
+	Rides[0] = new Ride[totalRides];
+
+	Deliveries = new Delivery * [1];
+	Deliveries[0] = new Delivery[totalDeliveries];
+
+	loadCustomers();
+	loadDrivers();
+	loadVehicles();
+	loadRides();
+	loadDeliveries();
+}
+
+TMS::~TMS() {
+	//for (int i = 0; i < totalCustomers; i++)
+	//{
+	//	delete[] Customers[i];
+	//}
+	//delete[] Customers;
+	//Customers = nullptr;
+
+	//for (int i = 0; i < totaldDrivers; i++)
+	//{
+	//	delete[] Drivers[i];
+	//}
+	//delete[] Drivers;
+	//Drivers = nullptr;
+
+	//for (int i = 0; i < totalVehicles; i++)
+	//{
+	//	delete[] Vehicles[i];
+	//}
+	//delete[] Vehicles;
+	//Vehicles = nullptr;
+
+}
+
+
+
+void TMS::loadCustomers() {
+	ifstream file("customers.txt");
+	if (file.is_open()) {
+		if (file) {
+			file >> availableCustomers;
+
+			for (int i = 0; i < availableCustomers; i++)
+			{
+				file >> Customers[0][i];
+			}
+
+		}
+	}
+	file.close();
+
+}
+
+void TMS::displayRideOfUser(int id) {
+	for (int i = 0; i < availableRides; i++)
+	{
+		if (Rides[0][i].getCId() == id) {
+			cout << Rides[0][i];
+		}
+	}
+}
+
+void TMS::displayRideOfDriver(int id) {
+	for (int i = 0; i < availableRides; i++)
+	{
+		if (Rides[0][i].getDId() == id) {
+			cout << Rides[0][i];
+		}
+	}
+}
+
+
+void TMS::displayDeliveryOfUser(int id) {
+	for (int i = 0; i < availableDeliveries; i++)
+	{
+		if (Deliveries[0][i].getCId() == id) {
+			cout << Deliveries[0][i];
+		}
+	}
+}
+
+void TMS::displayDeliveryOfDriver(int id) {
+	for (int i = 0; i < availableDeliveries; i++)
+	{
+		if (Deliveries[0][i].getDId() == id) {
+			cout << Deliveries[0][i];
+		}
+	}
+}
+
+void TMS::displayAllCustomers() {
+	cout << "Total Customers: " << availableCustomers << endl;
+	for (int i = 0; i < availableCustomers; i++)
+	{
+		int id = Customers[0][i].getCId();
+		cout << Customers[0][i];
+		if (Customers[0][i].getNoofServices() > 0) {
+
+			displayRideOfUser(id);
+			displayDeliveryOfUser(id);
+		}
+		cout << "\n";
+	}
+}
+
+
+void TMS::displayCustomerWithID() {
+	int id;
+	cout << "Enter Customer ID: ";
+	cin >> id;
+	for (int i = 0; i < availableCustomers; i++)
+	{
+		int custId = Customers[0][i].getCId();
+		if (id == custId) {
+			cout << Customers[0][i];
+			displayRideOfUser(custId);
+			displayDeliveryOfUser(custId);
+			cout << "\n";
+		}
+	}
+
+}
+
+
+void TMS::displayCustomerWithSameVehicle() {
+	int id;
+	cout << "Enter vehicle ID: ";
+	cin >> id;
+
+	for (int i = 0; i < availableCustomers; i++)
+	{
+		for (int j = 0; j < availableRides; j++)
+		{
+			int cid = Rides[0][j].getCId();
+			int id = Customers[0][i].getCId();
+			if (cid==id) 
+			{
+				cout << Customers[0][i];
+				//displayRideOfUser(custId);
+				//displayDeliveryOfUser(custId);
+				cout << "\n";
+			}
+		}
+	}
+
+}
+
+
+void TMS::displayAllCancelledServicesByCustomer() {
+	int id;
+	cout << "Enter customer ID: ";
+	cin >> id;
+	for (int i = 0; i <availableRides; i++)
+	{
+		if (Rides[0][i].getCId() == id) {
+			cout << Rides[0][i];
+		}
+	}
+	for (int i = 0; i < availableDeliveries; i++)
+	{
+		if (Deliveries[0][i].getCId() == id) {
+			cout << Deliveries[0][i];
+		}
+	}
+}
+
+
+void TMS::addCustomer()
+{
+
+	Customer newCustomer;
+	cin >> newCustomer;
+
+	loadCustomers();
+	Customers[0][availableCustomers++] = newCustomer;
+
+	ofstream cFile("customers.txt");
+	if (cFile.is_open()) {
+		cFile << availableCustomers << endl;
+
+		for (int i = 0; i < availableCustomers; i++)
+		{
+			cFile << Customers[0][i];
+		}
+		cout << "\nPerson ID: " << newCustomer.getID() << endl;
+		cout << "Customer ID: " << newCustomer.getCId() << endl;
+		cout << "\nSuccess 200. Customer Added Successfully!\n";
+	}
+	else {
+		cout << "Error opening file customers.txt!\n";
+	}
+	cFile.close();
+}
+
+
+
+void TMS::loadDrivers() {
+	ifstream file("drivers.txt");
+	if (file.is_open()) {
+		if (file) {
+			file >> availableDrivers;
+
+			for (int i = 0; i < availableDrivers; i++)
+			{
+				file >> Drivers[0][i];
+			}
+
+		}
+	}
+	file.close();
+
+}
+
+void TMS::writeDrivers() {
+	ofstream dFile("drivers.txt");
+	if (dFile.is_open()) {
+		dFile << availableDrivers << endl;
+
+		for (int i = 0; i < availableDrivers; i++)
+		{
+			dFile << Drivers[0][i];
+		}
+	}
+	else {
+		cout << "Error opening file drivers.txt!\n";
+	}
+	dFile.close();
+}
+
+void TMS::addDriver()
+{
+
+	Driver newDriver;
+	cin >> newDriver;
+
+	loadDrivers();
+	Drivers[0][availableDrivers++] = newDriver;
+	writeDrivers();
+	cout << "\nPerson ID: " << newDriver.getID() << endl;
+	cout << "Customer ID: " << newDriver.getDId() << endl;
+	cout << "\nSuccess 200. Driver Added Successfully!\n";
+}
+
+
+void TMS::displayAllDrivers() {
+	cout << "Total Drivers: " << availableDrivers << endl;
+	for (int i = 0; i < availableDrivers; i++)
+	{
+		int id = Drivers[0][i].getDId();
+		cout << Drivers[0][i];
+		if (Drivers[0][i].getNoofServices() > 0) {
+			displayRideOfDriver(id);
+			displayDeliveryOfDriver(id);
+		}
+		cout << endl;
+	}
+
+}
+
+
+void TMS::displayDriversWithRank4_5() {
+	int count = 0;
+	for (int i = 0; i < availableDrivers; i++)
+	{
+		if (Drivers[0][i].getRanking() >= 4.5) {
+
+			cout << Drivers[0][i];
+			count++;
+		}
+	}
+	cout << "Total Drivers Found: " << count << endl;
+}
+
+
+void TMS::displayDriversWithRank() {
+	int count = 0;
+	int rank;
+	cout << "Enter rank: ";
+	cin >> rank;
+	for (int i = 0; i < availableDrivers; i++)
+	{
+		if (Drivers[0][i].getRanking() >= rank) {
+
+			cout << Drivers[0][i];
+			count++;
+		}
+	}
+	cout << "Total Drivers Found: " << count << endl;
+}
+
+
+void TMS::displayDriverWithID() {
+	int id;
+	cout << "Enter Driver ID: ";
+	cin >> id;
+	for (int i = 0; i < availableDrivers; i++)
+	{
+		int did = Drivers[0][i].getDId();
+		if (id == did) {
+			cout << Drivers[0][i];
+			displayRideOfDriver(did);
+			displayDeliveryOfDriver(did);
+			cout << "\n";
+		}
+	}
+
+}
+void TMS::displayDriverWithMultipleLicence() {
+	for (int i = 0; i < availableDrivers; i++)
+	{
+		if (Drivers[0][i].getNoofLicences() > 1) {
+			cout << Drivers[0][i];
+			cout << "\n";
+		}
+	}
+}
+
+void TMS::displayDriverWhoDeliveredOnSameDate() {
+	int id;
+	Date date;
+	cin >> date;
+	cout << "Enter Driver ID: ";
+	cin >> id;
+	for (int i = 0; i < availableDeliveries; i++)
+	{
+		if (Deliveries[0][i].getBookingDate().getDay() == date.getDay() && Deliveries[0][i].getBookingDate().getMonth() == date.getMonth() && Deliveries[0][i].getBookingDate().getYear() == date.getYear() && Deliveries[0][i].getDId() == id) {
+			for (int i = 0; i < availableDrivers; i++)
+			{
+				if (Drivers[0][i].getDId() == id) {
+					cout << Drivers[0][i] << endl;
+				}
+			}
+		}
+	}
+
+}
+
+
+bool TMS::isDriverFound(int id) {
+	loadDrivers();
+	for (int i = 0; i < availableDrivers; i++)
+	{
+		if (id == Drivers[0][i].getDId()) {
+			return true;
+		}
+	}
+	return false;
+}
+ 
+
+void TMS::removeDriver()
+{
+	int id;
+	cout << "Enter driver ID: ";
+	cin >> id;
+
+	if (isDriverFound(id)) {
+		ofstream dFile("drivers.txt");
+		if (dFile.is_open()) {
+			dFile << availableDrivers-1 << endl;
+
+			for (int i = 0; i < availableDrivers; i++)
+			{
+				if (id != Drivers[0][i].getDId()) {
+
+					dFile << Drivers[0][i];
+				}
+			}
+			cout << "\nSuccess 200. Driver Removed Successfully!\n";
+		}
+		else {
+			cout << "Error opening file drivers.txt!\n";
+		}
+	}
+	else {
+		cout << "Error 404. Driver with ID: " << id << " not Found!\n";
+	}
+	loadDrivers();
+
+}
+
+void TMS::loadVehicles() {
+	ifstream file("vehicles.txt");
+	if (file.is_open()) {
+		if (file) {
+			file >> availableVehicles;
+
+			for (int i = 0; i < availableVehicles; i++)
+			{
+				file >> Vehicles[0][i];
+			}
+
+		}
+	}
+	file.close();
+}
+
+void TMS::writeVehicle() {
+
+	ofstream vFile("vehicles.txt");
+	if (vFile.is_open()) {
+		vFile << availableVehicles << endl;
+
+		for (int i = 0; i < availableVehicles; i++)
+		{
+			vFile << Vehicles[0][i];
+		}
+	}
+	else {
+		cout << "Error opening file vehicles.txt!\n";
+	}
+	vFile.close();
+
+}
+
+void TMS::addVehicle() {
+
+	bool isFound = true;
+	Vehicle newVehicle;
+	cin >> newVehicle;
+
+	for (int i = 0; i < availableVehicles; i++)
+	{
+		if (Vehicles[0][i].getRegNo() == newVehicle.getRegNo()) {
+			isFound = false;
+			cout << "Vehicle with Reg no already found\n";
+		}
+	}
+	if (isFound) {
+
+		loadVehicles();
+		Vehicles[0][availableVehicles++] = newVehicle;
+
+		cout << "\nSuccess 200. Vehicle Added Successfully!\n";
+		cout << "\n Vehicle ID: " << newVehicle.getVId() << endl;
+
+		writeVehicle();
+	}
+
+
+}
+
+bool TMS::isVehicleFound(int id) {
+	loadVehicles();
+	for (int i = 0; i < availableVehicles; i++)
+	{
+		if (id == Vehicles[0][i].getVId()) {
+			return true;
+		}
+	}
+	return false;
+}
+
+void TMS::removeVehicle()
+{
+	int id;
+	cout << "Enter vehicle ID: ";
+	cin >> id;
+
+	if (isVehicleFound(id)) {
+		ofstream vFile("vehicles.txt");
+		if (vFile.is_open()) {
+			vFile << availableVehicles - 1 << endl;
+
+			for (int i = 0; i < availableVehicles; i++)
+			{
+				if (id != Vehicles[0][i].getVId()) {
+
+					vFile << Vehicles[0][i];
+				}
+			}
+			cout << "\nSuccess 200. Vehicle Removed Successfully!\n";
+		}
+		else {
+			cout << "Error opening file vehicles.txt!\n";
+		}
+	}
+	else {
+		cout << "Error 404. Vehicle with ID: " << id << " not Found!\n";
+	}
+	loadVehicles();
+
+}
+
+
+void TMS::displayVehicleWithID() {
+	int id;
+	cout << "Enter ID: ";
+	cin >> id;
+
+	for (int i = 0; i < availableVehicles; i++)
+	{
+		if (Vehicles[0][i].getVId() == id) {
+			cout << Vehicles[0][i];
+		}
+	}
+}
+
+
+void TMS::displayRideWithID() {
+
+	int id;
+	cout << "Enter service ID: ";
+	cin >> id;
+
+	for (int i = 0; i < availableRides; i++)
+	{
+		if (Rides[0][i].getSId() == id) {
+			cout << Rides[0][i];
+		}
+	}
+
+}
+
+void TMS::displayDeliveryWithID() {
+
+	int id;
+	cout << "Enter service ID: ";
+	cin >> id;
+
+	for (int i = 0; i < availableDeliveries; i++)
+	{
+		if (Deliveries[0][i].getSId() == id) {
+			cout << Deliveries[0][i];
+		}
+	}
+
+}
+
+
+
+void TMS::displayRideOfVehicle(int id) {
+	for (int i = 0; i < availableRides; i++)
+	{
+		if (Rides[0][i].getVId() == id) {
+			cout << Rides[0][i];
+		}
+	}
+}
+
+void TMS::displayDeliveryOfVehicle(int id) {
+	for (int i = 0; i < availableDeliveries; i++)
+	{
+		if (Deliveries[0][i].getVId() == id) {
+			cout << Deliveries[0][i];
+		}
+	}
+}
+
+
+void TMS::completeDelivery() {
+	int id;
+	cout << "Enter service ID: ";
+	cin >> id;
+	Delivery deliv;
+
+	for (int i = 0; i < availableDeliveries; i++)
+	{
+		if (Deliveries[0][i].getSId() == id) {
+			if (Deliveries[0][i].getStatus() == 0) {
+				deliv = Deliveries[0][i];
+				Deliveries[0][i].setStatus(1);
+
+				cout << "Fare: " << Deliveries[0][i].getFare() << endl;
+				cout << "\nSuccess 200. Delivery Status Changed Successfully!\n";
+				writeDelivery();
+			}
+			else
+			{
+				cout << "Delivery is already completed!\n";
+			}
+		}
+	}
+	//update driver status
+	for (int j = 0; j < availableDrivers; j++)
+	{
+		if (Drivers[0][j].getDId() == deliv.getDId()) {
+			Drivers[0][j].setStatus(1);
+			writeDrivers();
+		}
+	}
+	//update vehicle status
+	for (int i = 0; i < availableVehicles; i++)
+	{
+		if (Vehicles[0][i].getVId() == deliv.getVId()) {
+			Vehicles[0][i].setStatus(0);
+			writeVehicle();
+		}
+	}
+
+}
+
+
+void TMS::cancelDelivery() {
+	int id;
+	cout << "Enter service ID: ";
+	cin >> id;
+	Delivery deliv;
+	ofstream dFile("deliveries.txt");
+
+	for (int i = 0; i < availableDeliveries; i++)
+	{
+		if (dFile.is_open()) {
+			if (Deliveries[0][i].getSId() == id) {
+				deliv = Deliveries[0][i];
+			}
+			if (Deliveries[0][i].getSId() != id) {
+				dFile << availableDeliveries << endl;
+				for (int i = 0; i < availableDeliveries; i++)
+				{
+					dFile << Deliveries[0][i];
+				}
+				cout << "\nSuccess 200. Delivery Cancelled Successfully!\n";
+			}
+		}
+		else {
+			cout << "Error opening file rides.txt!\n";
+		}
+		dFile.close();
+	}
+
+	//update driver status
+	for (int j = 0; j < availableDrivers; j++)
+	{
+		if (Drivers[0][j].getDId() == deliv.getDId()) {
+			Drivers[0][j].setStatus(3);
+			writeDrivers();
+		}
+	}
+	//update vehicle status
+	for (int i = 0; i < availableVehicles; i++)
+	{
+		if (Vehicles[0][i].getVId() == deliv.getVId()) {
+			Vehicles[0][i].setStatus(0);
+			writeVehicle();
+		}
+	}
+
+}
+
+
+
+void TMS::cancelRide() {
+	int id;
+	cout << "Enter service ID: ";
+	cin >> id;
+	Ride ride;
+
+	for (int i = 0; i < availableRides; i++)
+	{
+		if (Rides[0][i].getSId() == id) {
+			ride = Rides[0][i];
+			Rides[0][i].setStatus(3);
+			writeRides();
+		}
+		cout << "\nSuccess 200. Ride Cancelled Successfully!\n";
+	}
+
+	//update driver status
+	for (int j = 0; j < availableDrivers; j++)
+	{
+		if (Drivers[0][j].getDId() == ride.getDId()) {
+			Drivers[0][j].setStatus(3);
+			writeDrivers();
+		}
+	}
+	//update vehicle status
+	for (int i = 0; i < availableVehicles; i++)
+	{
+		if (Vehicles[0][i].getVId() == ride.getVId()) {
+			Vehicles[0][i].setStatus(0);
+			writeVehicle();
+		}
+	}
+}
+
+
+
+void TMS::completeRide() {
+	int id,drank,vrank;
+	cout << "Enter service ID: ";
+	cin >> id;
+	Ride ride;
+
+	for (int i = 0; i < availableRides; i++)
+	{
+		if (Rides[0][i].getSId() == id) {
+			if (Rides[0][i].getStatus() == 0) {
+				ride = Rides[0][i];
+				cout << "Enter Driver ranking (0 to 5):  ";
+				cin >> drank;
+				cout << "Enter Vehicle ranking (0 to 5): ";
+				cin >> vrank;
+				Rides[0][i].setStatus(1);
+				Rides[0][i].setDRank(drank);
+				Rides[0][i].setVRank(vrank);
+				writeRides();
+				cout << "Fare: " << Rides[0][i].getFare() << endl;
+				cout << "\nSuccess 200. Ride Status Changed Successfully!\n";
+			}
+			else
+			{
+				cout << "Ride is already completed!\n";
+			}
+		}
+	}
+	//update driver status
+	for (int j = 0; j < availableDrivers; j++)
+	{
+		if (Drivers[0][j].getDId() == ride.getDId()) {
+			Drivers[0][j].setStatus(1);
+			int salary = Drivers[0][j].getSalary();
+			if (ride.getDRank() >= 4.5) {
+				Drivers[0][j].setSalary(salary + (salary * 15 / 100));
+			}
+			
+			writeDrivers();
+		}
+	}
+	//update vehicle status
+	for (int i = 0; i < availableVehicles; i++)
+	{
+		if (Vehicles[0][i].getVId() == ride.getVId()) {
+			Vehicles[0][i].setStatus(0);
+			writeVehicle();
+		}
+	}
+}
+
+
+void TMS::displayAllVehicles() {
+	cout << "Total Vehicles: " << availableVehicles << endl;
+	for (int i = 0; i < availableVehicles; i++)
+	{
+		int id = Vehicles[0][i].getVId();
+		cout << Vehicles[0][i];
+		if (Vehicles[0][i].getNoofServices() > 0) {
+			displayRideOfVehicle(id);
+			displayDeliveryOfVehicle(id);
+		}
+	}
+}
+
+
+void TMS::loadRides() {
+	ifstream file("rides.txt");
+	if (file.is_open()) {
+		if (file) {
+			file >> availableRides;
+
+			for (int i = 0; i < availableRides; i++)
+			{
+				file >> Rides[0][i];
+			}
+
+		}
+	}
+	file.close();
+}
+
+
+void TMS::writeRides() {
+
+	ofstream rFile("rides.txt");
+	if (rFile.is_open()) {
+		rFile << availableRides << endl;
+
+		for (int i = 0; i < availableRides; i++)
+		{
+			rFile << Rides[0][i];
+		}
+	}
+	else {
+		cout << "Error opening file rides.txt!\n";
+	}
+	rFile.close();
+
+}
+
+
+void TMS::addRide() {
+
+	Ride newRide;
+	cin >> newRide;
+	bool isOkay = true;
+	
+	for (int i = 0; i < availableDrivers; i++)
+	{
+		if (Drivers[0][i].getDId() == newRide.getDId() && Drivers[0][i].getStatus() == 2) {
+			cout << "Driver is already booked!\n";
+			isOkay = false;
+		}
+		else if (Vehicles[0][i].getVId() == newRide.getVId() && Vehicles[0][i].getStatus() == 1) {
+			cout << "Vehicle is already booked!\n";
+			isOkay = false;
+		}
+	}
+
+	if (isOkay) {
+
+		loadRides();
+		Rides[0][availableRides++] = newRide;
+
+		writeRides();
+		cout << "Service ID: " << newRide.getSId() << endl;
+		cout << "\nSuccess 200. Ride Added Successfully!\n";
+
+		//update vehicle status
+		for (int i = 0; i < availableVehicles; i++)
+		{
+			if (Vehicles[0][i].getVId() == newRide.getVId()) {
+				Vehicles[0][i].setStatus(1);
+			}
+		}
+		//update in file
+		writeVehicle();
+
+		//update driver status
+
+		for (int i = 0; i < availableDrivers; i++)
+		{
+			if (Drivers[0][i].getDId() == newRide.getDId()) {
+				Drivers[0][i].setStatus(2);
+			}
+		}
+		writeDrivers();
+
+	}
+	
+}
+
+void TMS::displayAllRides() {
+	cout << "Total Rides: " << availableRides << endl;
+	for (int i = 0; i < availableRides; i++)
+	{
+		cout << Rides[0][i];
+	}
+}
+
+
+void TMS::loadDeliveries() {
+	ifstream file("deliveries.txt");
+	if (file.is_open()) {
+		if (file) {
+			file >> availableDeliveries;
+
+			for (int i = 0; i < availableDeliveries; i++)
+			{
+				file >> Deliveries[0][i];
+			}
+
+		}
+	}
+	file.close();
+
+}
+
+void TMS::displayAllDeliveries() {
+	cout << "Total Deliveries: " << availableDeliveries << endl;
+	for (int i = 0; i < availableDeliveries; i++)
+	{
+		cout << Deliveries[0][i];
+	}
+}
+
+
+void TMS::writeDelivery() {
+
+	ofstream dFile("deliveries.txt");
+	if (dFile.is_open()) {
+		dFile << availableDeliveries << endl;
+
+		for (int i = 0; i < availableDeliveries; i++)
+		{
+			dFile << Deliveries[0][i];
+		}
+	}
+	else {
+		cout << "Error opening file deliveries.txt!\n";
+	}
+	dFile.close();
+
+}
+
+
+void TMS::addDelivery()
+{
+	bool isOkay = true;
+	Delivery newDelivery;
+	cin >> newDelivery;
+
+	for (int i = 0; i < availableDrivers; i++)
+	{
+		if (Drivers[0][i].getDId() == newDelivery.getDId() && Drivers[0][i].getStatus() == 2) {
+			cout << "Driver is already booked!\n";
+			isOkay = false;
+		}
+		else if (Vehicles[0][i].getVId() == newDelivery.getVId() && Vehicles[0][i].getStatus() == 1) {
+			cout << "Vehicle is already booked!\n";
+			isOkay = false;
+		}
+	}
+
+	if (isOkay) {
+
+		loadDeliveries();
+		Deliveries[0][availableDeliveries++] = newDelivery;
+		
+		writeDelivery();
+		cout << "Service ID: " << newDelivery.getSId() << endl;
+		cout << "\nSuccess 200. Delivery Added Successfully!\n";
+
+	}
+
+
+}
+
+void TMS::displayAllPendingServicesOnDate() {
+	Date date;
+	cout << "Enter date: \n";
+	cin >> date;
+
+	for (int i = 0; i < availableRides; i++)
+	{
+		if (Rides[0][i].getBookingDate().getDay() == date.getDay() && Rides[0][i].getBookingDate().getMonth() == date.getMonth() && Rides[0][i].getBookingDate().getYear() == date.getYear() && Rides[0][i].getStatus() == 0) {
+			cout << Rides[0][i];
+		}
+	}
+
+	for (int i = 0; i < availableDeliveries; i++)
+	{
+		if (Deliveries[0][i].getBookingDate().getDay() == date.getDay() && Deliveries[0][i].getBookingDate().getMonth() == date.getMonth() && Deliveries[0][i].getBookingDate().getYear() == date.getYear() && Deliveries[0][i].getStatus() == 0) {
+			cout << Deliveries[0][i];
+		}
+	}
+}
+
+void TMS::displayAllPendingServicesbyDriver() {
+	int id;
+	cout << "Enter Driver ID: ";
+	cin >> id;
+
+	for (int i = 0; i < availableRides; i++)
+	{
+		if (Rides[0][i].getDId()==id && Rides[0][i].getStatus() == 0) {
+			cout << Rides[0][i];
+		}
+	}
+
+	for (int i = 0; i < availableDeliveries; i++)
+	{
+		if (Deliveries[0][i].getDId() == id && Deliveries[0][i].getStatus() == 0) {
+			cout << Deliveries[0][i];
+		}
+	}
+}
\ No newline at end of file
diff --git a/C++/Projects/rideTransportSystem/Project.h b/C++/Projects/rideTransportSystem/Project.h
new file mode 100644
index 00000000..c8fa237e
--- /dev/null
+++ b/C++/Projects/rideTransportSystem/Project.h
@@ -0,0 +1,469 @@
+#pragma once
+#include <fstream>
+#include <string>
+using namespace std;
+
+class Name {
+
+	string fName;
+	string lName;
+public:
+	Name();
+	Name(string fN, string lN);
+	Name(const Name&);
+	~Name();
+
+	void setFName(string);
+	void setLName(string);
+	string getFName();
+	string getLName();
+	
+	friend ostream& operator<<(ostream&, const Name&);
+	friend ifstream& operator>>(ifstream&, Name&);
+	friend ofstream& operator<<(ofstream&, Name&);
+	friend istream& operator>>(istream&, Name&);
+};
+
+class Date {
+	int day;
+	int month;
+	int year;
+
+public:
+	Date();
+	Date(int, int, int);
+	Date(const Date&);
+	~Date() {};
+	
+	void setDay(int);
+	void setMonth(int);
+	void setYear(int);
+	int getDay();
+	int getMonth();
+	int getYear();
+
+	friend ostream& operator<<(ostream&, const Date&);
+	friend ifstream& operator>>(ifstream&, Date&);
+	friend ofstream& operator<<(ofstream&, const Date&);
+	friend istream& operator>>(istream&, Date&);
+};
+
+class mTime {
+	int hour;
+	int min;
+	int sec;
+
+public:
+	mTime();
+	mTime(int, int, int);
+	mTime(const mTime&);
+	~mTime() {};
+
+	void setHour(int);
+	void setMin(int);
+	void setSec(int);
+	int getHour();
+	int getMin();
+	int getSec();
+
+	friend ostream& operator<<(ostream&, const mTime&);
+	friend ifstream& operator>>(ifstream&, mTime&);
+	friend ofstream& operator<<(ofstream&, const mTime&);
+	friend istream& operator>>(istream&, mTime&);
+};
+
+class Service {
+	string source;
+	string destination;
+	float distance; //in km
+	Date bookingDate;
+	mTime bookingTime;
+	int status; // 0 for pending, 1 if complete, 3 if cancelled
+	float fuelrate;
+	int cId; // Customer Id who booked the ride
+	int dId; // Driver Id
+	int vId; // vehicle Id
+	int sId;  //service id
+	float fare;  //fare
+
+public:
+	Service();
+	Service(string, string, float, Date, mTime, int, float, int, int, int, int, float);
+	~Service();
+
+	void setSource(string);
+	void setDestination(string);
+	void setDistance(float);
+	void setBookingDate(Date);
+	void setBookingTime(mTime);
+	void setStatus(int);
+	void setFuelRate(float);
+	void setCId(int);
+	void setDId(int);
+	void setVId(int);
+	void setSId(int);
+	void setFare(float);
+
+	string getSource();
+	string getDestination();
+	float getDistance();
+	Date getBookingDate();
+	mTime getBookingTime();
+	int getStatus();
+	float getFuelRate();
+	int getCId();
+	int getDId();
+	int getVId();
+	int getSId();
+	float getFare();
+
+	friend ostream& operator<<(ostream&, Service&);
+	friend ifstream& operator>>(ifstream&, Service&);
+	friend ofstream& operator<<(ofstream&, const Service&);
+	friend istream& operator>>(istream&, Service&);
+};
+class Ride : public Service {
+	int noofPassengers; // false for pending, true if complete
+	string rideType; // intercity, intracity
+	float DriverRanking; // 0 to 5 scale (worst to best)
+	float VehicleRanking; // 0 to 5 scale (worst to best)
+
+public:
+	Ride(string, string, float, Date, mTime, int, float, int, int, int, int,float, int, string, float, float);
+	
+	void setNoofPassengers(int);
+	void setRideType(string);
+	void setDRank(float);
+	void setVRank(float);
+
+	int getNoofPassengers();
+	string getRideType();
+	float getDRank();
+	float getVRank();
+
+	~Ride();
+
+	friend ostream& operator<<(ostream&, Ride&);
+	friend ifstream& operator>>(ifstream&, Ride&);
+	friend ofstream& operator<<(ofstream&, const Ride&);
+	friend istream& operator>>(istream&, Ride&);
+
+};
+class Delivery : public Service {
+	float goodsWeight; // Weight of goods in Kg
+	string goodsType; //type of goods food, furniture, petroleum, chemicals, etc.
+
+public:
+	Delivery(string, string, float, Date, mTime, int, float, int, int, int, int, float, float, string);
+	~Delivery();
+
+	void setGoodsWeight(float);
+	void setGoodsType(string);
+
+	float getGoodsWeight();
+	string getGoodsType();
+
+	friend ostream& operator<<(ostream&, Delivery&);
+	friend ifstream& operator>>(ifstream&, Delivery&);
+	friend ofstream& operator<<(ofstream&, const Delivery&);
+	friend istream& operator>>(istream&, Delivery&);
+};
+
+class Person {
+private:
+	Name pName;
+	Date DOB;
+	int Age;
+	int Nid;
+public:
+	Person();
+	Person(Name, Date, int, int);
+	Person(const Person&);
+	~Person() {};
+
+	void setName(Name);
+	void setDOB(Date);
+	void setAge(int);
+	void setID(int);
+
+	Name getName();
+	Date getDOB();
+	int getAge();
+	int getID();
+
+	friend ostream& operator<<(ostream&, const Person&);
+	friend istream& operator>>(istream&, Person&);
+	friend ofstream& operator<<(ofstream&, Person&);
+	friend ifstream& operator>>(ifstream&, Person&);
+};
+class Customer : public Person {
+private:
+	int cId;
+	int noofBookings;
+	Service** bookingHistory;
+public:
+	Customer();
+	Customer(Name, Date, int, int, int, Service**,int);
+	Customer(const Customer&);
+	~Customer();
+
+	void setCId(int);
+	void setHistorry(Service**,int);
+
+	int findHistory(int, int&);
+	void loadHistory(int);
+
+	int getCId();
+	int getNoofServices();
+	Service** getHistory();
+
+	friend ostream& operator<<(ostream&, Customer&);
+	friend istream& operator>>(istream&, Customer&);
+	friend ifstream& operator>>(ifstream&, Customer&);
+	friend ofstream& operator<<(ofstream&, Customer&);
+
+};
+class Driver : public Person {
+private:
+	int dId;
+	char** LicencesList;
+	int noofLicences;
+	float overallRanking;
+	float salary;
+	int experience;
+	int status; // 1 for free, 2 if booked and 3 if cancelled
+	Service** serviceHistory;
+	int noofServices;
+
+public:
+	Driver();
+	Driver(Name, Date, int, int, int, char**, int, float, float, int, int, Service**,int);
+	Driver(const Driver&);
+	~Driver();
+
+	void setDId(int);
+	void setLicenceList(char**,int);
+	void setNoofLicences(int);
+	void setRanking(float);
+	void setSalary(float);
+	void setExperience(int);
+	void setStatus(int);
+	void setHistory(Service**,int);
+
+	int getDId();
+	char** getLicenceList();
+	int getNoofLicences();
+	float getRanking();
+	float getSalary();
+	int getExperience();
+	int getStatus();
+	Service** getHistory();
+	int getNoofServices();
+
+	int findHistory(int, int&);
+	void loadHistory(int);
+
+	friend ostream& operator<<(ostream&, Driver&);
+	friend istream& operator>>(istream&, Driver&);
+	friend ofstream& operator<<(ofstream&, Driver&);
+	friend ifstream& operator>>(ifstream&, Driver&);
+};
+class Feature {
+	int fId;
+	string description;
+	float cost;
+public:
+	Feature(int, string, float);
+	~Feature();
+
+	void setFId(int);
+	void setDescription(string);
+	void setCost(float);
+
+	int getFId();
+	string getDescription();
+	float getCost();
+
+	friend ostream& operator<<(ostream&, const Feature&);
+	friend istream& operator>>(istream&, Feature&);
+	friend ofstream& operator<<(ofstream&, Feature&);
+	friend ifstream& operator>>(ifstream&, Feature&);
+};
+
+class Vehicle {
+	int vId;
+	int registrationNo;
+	float avgMileage;
+	string LicenceType; // License required for driving the vehicle
+	bool status; // false for free, true if booked in a service already
+	string fueltype;
+	float overallRanking;
+	Date manufacturingDate;
+	Feature* list;
+	Service** serviceHistory;
+	int noofServices;
+	int noofFeatures;
+
+public:
+	Vehicle(int, int, float, string, bool, string, float, Date, Feature*, Service**, int, int);
+	
+	int getVId();
+	int getRegNo();
+	int getAvgMil();
+	string getLicenceType();
+	bool getStatus();
+	string getFuelType();
+	int getOverallRanking();
+	Date getManuDate();
+	Feature* getFeatList();
+	int getNoofFeatures();
+	Service** getServiceHistory();
+	int getNoofServices();
+	
+	void setVId(int);
+	void setRegNo(int);
+	void setAvgMil(int);
+	void setLicenceType(string);
+	void setStatus(bool);
+	void setFuelType(string);
+	void setOverallRanking(int);
+	void setManuDate(Date);
+	void setFeatList(Feature*, int);
+	void setNoofFeatures(int);
+	void setServiceHistory(Service**, int);
+
+	int findHistory(int, int&);
+	void loadHistory(int);
+
+	~Vehicle();
+
+
+	friend ostream& operator<<(ostream&, Vehicle&);
+	friend istream& operator>>(istream&, Vehicle&);
+	friend ofstream& operator<<(ofstream&, Vehicle&);
+	friend ifstream& operator>>(ifstream&, Vehicle&);
+};
+//add Complete Hierarchy of vehicles based on their types and functions
+
+//Ride Vehicle
+class RideVehicle : public Vehicle {
+public:
+	RideVehicle(int, int, float, string, bool, string, float, Date, Feature*, Service**, int, int);
+};
+
+//Transport Vehicle
+class TransportVehicle : public Vehicle {
+public:
+	TransportVehicle(int, int, float, string, bool, string, float, Date, Feature*, Service**, int, int);
+};
+
+//RideTrans Vehicle
+class RideTransVehicle : public Vehicle {
+public:
+	RideTransVehicle(int, int, float, string, bool, string, float, Date, Feature*, Service**, int, int);
+};
+
+//SmallRide Vehicle
+class SmallRideVehicle : public RideVehicle
+{
+public:
+	SmallRideVehicle(int, int, float, string, bool, string, float, Date, Feature*, Service**, int, int);
+};
+
+//LargeRide Vehicle
+class LargeRideVehicle : public RideVehicle
+{
+public:
+	LargeRideVehicle(int, int, float, string, bool, string, float, Date, Feature*, Service**, int, int);
+};
+
+//LightTrans Vehicle
+class LightTransVehicle : public TransportVehicle
+{
+public:
+	LightTransVehicle(int, int, float, string, bool, string, float, Date, Feature*, Service**, int, int);
+};
+
+//HeavyTrans Vehicle
+class HeavyTransVehicle : public TransportVehicle
+{
+public:
+	HeavyTransVehicle(int, int, float, string, bool, string, float, Date, Feature*, Service**, int, int);
+};
+
+class TMS
+{
+	int totalCustomers;
+	int totaldDrivers;
+	int totalVehicles;
+	int totalRides;
+	int totalDeliveries;
+	
+	int availableCustomers;
+	int availableDrivers;
+	int availableVehicles;
+	int availableRides;
+	int availableDeliveries;
+
+	Customer** Customers;
+	Driver** Drivers;
+	Vehicle** Vehicles;
+	Ride** Rides;
+	Delivery** Deliveries;
+
+public:
+	TMS(int, int, int);
+	~TMS();
+
+	void addCustomer();
+	void loadCustomers();
+	void displayAllCustomers();
+	void displayCustomerWithID();
+	void displayCustomerWithSameVehicle();
+	void displayAllCancelledServicesByCustomer();
+
+	void loadDrivers();
+	void addDriver();
+	bool isDriverFound(int);
+	void removeDriver();
+	void displayAllDrivers();
+	void displayDriversWithRank4_5();
+	void displayDriversWithRank();
+	void displayDriverWithID();
+	void displayDriverWithMultipleLicence();
+	void displayDriverWhoDeliveredOnSameDate();
+	void writeDrivers();
+
+	void loadVehicles();
+	void addVehicle();
+	bool isVehicleFound(int);
+	void removeVehicle();
+	void displayVehicleWithID();
+	void displayAllVehicles();
+	void writeVehicle();
+
+	void loadRides();
+	void addRide();
+	void displayAllRides();
+	void displayRideOfUser(int);
+	void displayRideOfDriver(int);
+	void displayRideOfVehicle(int);
+	void completeRide();
+	void cancelRide();
+	void writeRides();
+	void displayRideWithID();
+
+	void loadDeliveries();
+	void addDelivery();
+	void displayAllDeliveries();
+	void displayDeliveryOfUser(int);
+	void displayDeliveryOfDriver(int);
+	void displayDeliveryOfVehicle(int);
+	void completeDelivery();
+	void cancelDelivery();
+	void writeDelivery();
+	void displayDeliveryWithID();
+
+	void displayAllPendingServicesOnDate();
+	void displayAllPendingServicesbyDriver();
+};
diff --git a/C++/Projects/rideTransportSystem/README.md b/C++/Projects/rideTransportSystem/README.md
new file mode 100644
index 00000000..548fc69a
--- /dev/null
+++ b/C++/Projects/rideTransportSystem/README.md
@@ -0,0 +1,6 @@
+# Ride & Transport Management System
+
+
+![TMS](https://github.com/imsamimalik/Ride-TransportManagementSystem/raw/main/TMS.png?raw=true)
+
+[imsamimalik](https://imsamimalik.com/)
diff --git a/C++/Projects/rideTransportSystem/Source.cpp b/C++/Projects/rideTransportSystem/Source.cpp
new file mode 100644
index 00000000..e45a7c12
--- /dev/null
+++ b/C++/Projects/rideTransportSystem/Source.cpp
@@ -0,0 +1,282 @@
+#include "Project.h"
+#include <fstream>
+#include <iostream>
+#include <iomanip>
+#include <windows.h>
+
+
+//for reference only
+void Menu() {
+	cout << "1. Add a new Customer" << endl;
+	cout << "2. Add or remove a Driver" << endl;
+	cout << "3. Add or remove a Vehicle" << endl;
+	cout << "4. Print List of All Customers" << endl;
+	cout << "5. Print List of All drivers" << endl;
+	cout << "6. Print complete list of vehicles with details by their category" << endl;
+	cout << "7. Print complete details and service history of a particular vehicle, (Provide vehicle ID)" << endl;
+	cout << "8. Print complete history of a particular customer, (Provide customer ID)" << endl;
+	cout << "9. Print complete history of a driver including services. (Provide driver ID)" << endl;
+	cout << "10. Print list of all drivers who have ranking above 4.5." << endl;
+	cout << "11. Print list of all drivers who have multiple licenses and their license information too" << endl;
+	cout << "13. Add a Service request (ride or delivery)" << endl;
+	cout << "14. Cancel a booking" << endl;
+	cout << "15. Complete a Service (Provide Service ID)" << endl;
+	cout << "16. Print details of all Customers, who used the same vehivle in a ride service on a different date" << endl;
+	cout << "17. Print List of all drivers who completed delvery services on same day" << endl;
+	cout << "18. Print details of all pending services on a particular date" << endl;
+	cout << "19. Print details of all pending services of a particular driver" << endl;
+	cout << "20. Print details of all cancelled services by a customer" << endl;
+}
+
+
+void showMenu(TMS &T) {
+	int choice;
+a:
+	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 3);
+	cout << setw(100) << "------------------ Welcome To Travel Management System ------------------\n\n";
+	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
+	cout << "1. Customers\n";
+	cout << "2. Drivers\n";
+	cout << "3. Vehicles\n";
+	cout << "4. Rides\n";
+	cout << "5. Deliveries\n";
+	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 4);
+	cout << "0. Exit!\n\n";
+	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
+	cout << "Enter choice: ";
+	cin >> choice;
+	
+	switch (choice)
+	{
+	case 0:
+		break;
+	case 1:
+		b:
+		cout << "1. Add a Cusotmer\n";
+		cout << "2. Details of Specific Customer\n";
+		cout << "3. Details All Customers\n";
+		cout << "4. Details Customer who used same vehicle for a trip\n";
+		cout << "5. Pending Services on a Particular Date\n";
+		cout << "6. Cancelled Services By Customer\n";
+		cout << "0. Main Menu\n\n";
+		cout << "Enter choice: ";
+		cin >> choice;
+		switch (choice)
+		{
+		case 0:
+			goto a;
+		case 1:
+			T.addCustomer();
+			goto b;
+			break;
+		case 2:
+			T.displayCustomerWithID();
+			goto b;
+			break;
+		case 3:
+			T.displayAllCustomers();
+			goto b;
+			break;
+		case 4:
+			T.displayCustomerWithSameVehicle();
+			goto b;
+			break;
+		case 5:
+			T.displayAllPendingServicesOnDate();
+			goto b;
+			break;
+		case 6:
+			T.displayAllCancelledServicesByCustomer();
+			goto b;
+			break;
+		default:
+			cout << "Invalid Choice!\n\n";
+			goto b;
+			break;
+		}
+		break;
+	case 2:
+		c:
+		cout << "1. Add a Driver\n";
+		cout << "2. Remove a Driver\n";
+		cout << "3. Details of Specific Driver\n";
+		cout << "4. Details of Driver with Ranking > 4.5 \n";
+		cout << "5. Details of Driver with Multiple Licences \n";
+		cout << "6. Details of Driver with who Delivered on same Date \n";
+		cout << "7. Details of Pending Services by Particular Driver \n";
+		cout << "0. Main Menu!\n\n";
+		cout << "Enter choice: ";
+		cin >> choice;
+		switch (choice)
+		{
+		case 0:
+			goto a;
+		case 1: 
+			T.addDriver();
+			goto c;
+			break;
+		case 2:
+			T.removeDriver();
+			goto c;
+			break;
+		case 3:
+			T.displayDriverWithID();
+			goto c;
+			break;
+		case 4:
+			T.displayDriversWithRank4_5();
+			goto c;
+			break;
+		case 5:
+			T.displayDriverWithMultipleLicence();
+			goto c;
+			break;
+		case 6:
+			T.displayDriverWhoDeliveredOnSameDate();
+			goto c;
+			break;
+		case 7:
+			T.displayAllPendingServicesbyDriver();
+			goto c;
+			break;
+		default:
+			cout << "Invalid Choice!\n\n";
+			goto c;
+			break;
+		}
+		break;
+	case 3:
+		d:
+		cout << "1. Add a Vehicle\n";
+		cout << "2. Remove a Vehicle\n";
+		cout << "3. Display All Vehicles\n";
+		cout << "4. Display Specfic Vehicle\n";
+		cout << "0. Main Menu!\n\n";
+		cout << "Enter choice: ";
+		cin >> choice;
+		switch (choice)
+		{
+		case 0:
+			goto a;
+			break;
+		case 1:
+			T.addVehicle();
+			goto d;
+			break;
+		case 2:
+			T.removeVehicle();
+			goto d;
+			break;
+		case 3:
+			T.displayAllVehicles();
+			goto d;
+			break;
+		case 4:
+			T.displayVehicleWithID();
+			goto d;
+			break;
+		default:
+			cout << "Invalid Choice!\n\n";
+			goto d;
+			break;
+		}
+		break;
+	case 4:
+		e:
+		cout << "1. Add a Ride\n";
+		cout << "2. Cancel a Ride\n";
+		cout << "3. Complete a Ride\n";
+		cout << "4. Display All Rides\n";
+		cout << "5. Display a Specific Ride\n";
+		cout << "0. Main Menu!\n\n";
+		cout << "Enter choice: ";
+		cin >> choice;
+		cin.ignore();
+		switch (choice)
+		{
+		case 0:
+			goto a;
+			break;
+		case 1:
+			T.addRide();
+			goto e;
+			break;
+		case 2:
+			T.cancelRide();
+			goto e;
+			break;
+		case 3:
+			T.completeRide();
+			goto e;
+			break;
+		case 4:
+			T.displayAllRides();
+			goto e;
+			break;
+		case 5:
+			T.displayRideWithID();
+			goto e;
+			break;
+		default:
+			cout << "Invalid Choice!\n\n";
+			goto e;
+			break;
+		}
+		break;
+	case 5:
+		f:
+		cout << "1. Add a Delivery\n";
+		cout << "2. Cancel a Delivery\n";
+		cout << "3. Complete a Delivery\n";
+		cout << "4. Display All Deliveries\n";
+		cout << "5. Display a Specific Delivery \n";
+		cout << "0. Main Menu!\n\n";
+		cout << "Enter choice: ";
+		cin >> choice;
+		cin.ignore();
+		switch (choice)
+		{
+		case 0:
+			goto a;
+			break;
+		case 1:
+			T.addDelivery();
+			goto f;
+			break;
+		case 2:
+			T.cancelDelivery();
+			goto f;
+			break;
+		case 3:
+			T.completeDelivery();
+			goto f;
+			break;
+		case 4:
+			T.displayAllDeliveries();
+			goto f;
+			break;
+		case 5:
+			T.displayDeliveryWithID();
+			goto f;
+			break;
+		default:
+			cout << "Invalid Choice!\n\n";
+			goto f;
+			break;
+		}
+		break;
+
+	default:
+		cout << "Invalid Choice!\n";
+		goto a;
+		break;
+	}
+}
+
+int main() {
+
+	TMS T(15,10,20);
+	showMenu(T);
+
+	return 0;
+}
\ No newline at end of file
diff --git a/C++/Projects/rideTransportSystem/TMS.png b/C++/Projects/rideTransportSystem/TMS.png
new file mode 100644
index 00000000..9f55a856
Binary files /dev/null and b/C++/Projects/rideTransportSystem/TMS.png differ
diff --git a/C++/README.md b/C++/README.md
new file mode 100644
index 00000000..07a64962
--- /dev/null
+++ b/C++/README.md
@@ -0,0 +1,2 @@
+## Put Simple Cpp Questions along with Code in this folder
+### Don't put DSA codes here
diff --git a/C++/Right_Lower_Triangle.cpp b/C++/Right_Lower_Triangle.cpp
new file mode 100644
index 00000000..91cb8211
--- /dev/null
+++ b/C++/Right_Lower_Triangle.cpp
@@ -0,0 +1,40 @@
+
+/*
+Program to print Right Lower Triangle of given height n
+Example:
+        *
+       **
+      ***
+     ****
+    *****
+   ******
+  *******
+ ********
+ where height(n) of triangle is 8.
+*/
+
+#include <iostream>
+using namespace std;
+
+int main()
+{
+    int i, j, n;
+    cout << "Enter number of rows/height of triangle: ";
+    cin >> n;
+    for (i = 0; i <= n; i++)
+    {
+        for (j = 0; j <= n; j++)
+        {
+            if (j > n - i)
+            {
+                cout << "*";
+            }
+            else
+            {
+                cout << " ";
+            }
+        }
+        cout << "\n";
+    }
+    return 0;
+}
\ No newline at end of file
diff --git a/C++/SimpleGames/Snake game/menu.txt b/C++/SimpleGames/Snake game/menu.txt
new file mode 100644
index 00000000..40087c64
--- /dev/null
+++ b/C++/SimpleGames/Snake game/menu.txt	
@@ -0,0 +1,5 @@
+
+
+				Press z to start
+
+				 
\ No newline at end of file
diff --git a/C++/SimpleGames/Snake game/snake.cpp b/C++/SimpleGames/Snake game/snake.cpp
new file mode 100644
index 00000000..076c57e8
--- /dev/null
+++ b/C++/SimpleGames/Snake game/snake.cpp	
@@ -0,0 +1,451 @@
+#include <iostream>
+#include <windows.h>
+#include <stdlib.h>
+#include <conio.h>
+#include <fstream>
+
+using namespace std;
+
+//==== struct list;
+
+typedef struct tailpos
+{
+       int x;                // x cordinate of the snake
+       int y;                // y cordinate of the snake
+       struct tailpos *next; // pointer to next node
+       struct tailpos *prev; // pointer to previous node
+} tail;
+
+// d used to set the direction
+int d = 4; // up = 1 , down = 2 , left =3 , right = 4;
+
+/*
+SNAKE CLASS 
+            contain variable of tailpos structure
+            this class handle movement of the snake
+            contain the draw function
+
+*/
+class snake
+{
+public:
+       int wallsX, wallsY; // wall start position can be use to define wall
+       int walleX, walleY; // wall end position
+
+       int score; // keep score
+
+       int foodx, foody; // position of the food
+
+       HANDLE console_handle; // handle for the console
+       COORD cur_cord;        // COORD struct to keep the coordinate
+
+       /*
+       tail struct ==>
+                      start = pointer to first part of body
+                      current = pointer to last node
+                      newtail = temp node for new tail
+       
+       */
+
+       tail *start, *current, *newtail;
+       snake();                   // construct to initalise tail variable to null
+       void insert(int x, int y); // insert the body of snake append to next node
+       void draw();               // draw the snake
+       void drawWall();           // draw the wall
+       void move();               // control the movement
+       bool collision();          //check snake collision with itself or wall
+       void drawfood(int x = 0);  // draw food to new position if x==1
+       void drawinit();           // inital setup like draw wall
+       void labelDead();          // Draw when player is dead
+       void menu();               // menu screen
+       };
+
+/*
+=====================================
+prototype for loop function
+*/
+void loop(snake &ob);
+
+//================================
+// implement snake class
+snake::snake()
+{
+
+       score = 0; // set the initial score
+
+       start = NULL;                                     // start node point to null
+       current = NULL;                                   // same
+       newtail = NULL;                                   // same
+       console_handle = GetStdHandle(STD_OUTPUT_HANDLE); // getting console handle
+
+       foodx = 12; // starting food positions
+       foody = 14;
+
+       wallsX = 2;
+       wallsY = 2; // walls starting and ending position
+       walleX = 70;
+       walleY = 20; // dwar wall of 70x50
+
+       cur_cord.X = 152;
+       cur_cord.Y = 500;
+       SetConsoleScreenBufferSize(console_handle, cur_cord); // setting up screen buffer
+}
+/*
+this method is to insert new tail of snake at the current food position when snake eat it.
+
+*/
+void snake ::insert(int x, int y)
+{
+       // check if start is null
+       if (start == NULL)
+       {
+              newtail = new tail;
+              newtail->x = x;
+              newtail->y = y;
+              newtail->next = NULL;
+              newtail->prev = NULL;
+              start = newtail;
+              current = newtail;
+       }
+       else // insert new node to start node
+       {
+              newtail = new tail;
+              newtail->x = x;
+              newtail->y = y;
+              newtail->next = NULL;
+              newtail->prev = current;
+              current->next = newtail;
+              current = newtail;
+       }
+}
+
+/*
+move :
+      contain main logic to move the snake by incrementing and decrementing 
+      the X or Y cordinate
+      position of first part is moved to the next part. copying is done in Reverse order that 
+      is from last to first .
+      Last node position is updated with previous node position and at last. Start node Cordinate
+      X or y is inc or dec.
+
+*/
+
+void snake::move()
+{
+       tail *tmp, *cur;
+
+       tmp = current; // point tmp to last node
+       //cur =start->next;
+
+       while (tmp->prev != NULL)
+       {
+              tmp->x = tmp->prev->x; // copy val from revious to last
+              tmp->y = tmp->prev->y;
+              tmp = tmp->prev; // set tmp to previous node
+       }
+       /*
+check for the value of d in order to change its direction
+increment and decrement value of x , y
+*/
+       if (d == 1)
+              start->y--;
+
+       if (d == 2)
+              start->y++;
+
+       if (d == 3)
+              start->x--;
+
+       if (d == 4)
+              start->x++;
+}
+
+/*
+draw :
+      draw snake part according to their position
+      traverse the node from start to end
+*/
+void snake::draw()
+{
+       /*
+cur_cord.X=10;
+cur_cord.Y=5;
+
+SetConsoleCursorPosition(console_handle,cur_cord);
+cout << "use above statement to to set cursor position";   
+*/
+
+       // putting score label
+       cur_cord.X = 2;
+       cur_cord.Y = 0;
+
+       SetConsoleCursorPosition(console_handle, cur_cord);
+       cout << "SCORE : " << score;
+
+       tail *tmp, *last;
+       tmp = start;
+       last = current;
+
+       while (tmp != NULL)
+       {
+              cur_cord.X = tmp->x;
+              cur_cord.Y = tmp->y;
+              SetConsoleCursorPosition(console_handle, cur_cord);
+              //cout << "*" << cur_cord.X <<"-" <<  cur_cord.Y  ;
+              cout << (char)219; // snake character
+              tmp = tmp->next;
+       }
+       // remove tail
+       cur_cord.X = last->x;
+       cur_cord.Y = last->y;
+       SetConsoleCursorPosition(console_handle, cur_cord);
+       cout << ' ';
+       //draw the food
+       cur_cord.X = foodx;
+       cur_cord.Y = foody;
+       SetConsoleCursorPosition(console_handle, cur_cord);
+       cout << (char)15; // food character
+}
+
+void snake::drawWall()
+{
+       /*
+     for drawing wall you can use variables to store wall starting and ending position
+     */
+       //int size = sizeof(wall)/sizeof(wall[0][0]);
+       // draw left column
+       cur_cord.X = wallsX;
+       for (int y = wallsY; y <= walleY; y++)
+       {
+              cur_cord.Y = y;
+              SetConsoleCursorPosition(console_handle, cur_cord);
+              cout << '#';
+       }
+       // draw top row
+       cur_cord.Y = wallsY;
+       for (int x = wallsX; x <= walleX; x++)
+       {
+              cur_cord.X = x;
+              SetConsoleCursorPosition(console_handle, cur_cord);
+              cout << '#';
+       }
+       // draw right column
+       cur_cord.X = walleX;
+       for (int y = wallsY; y <= walleY; y++)
+       {
+              cur_cord.Y = y;
+              SetConsoleCursorPosition(console_handle, cur_cord);
+              cout << '#';
+       }
+
+       // draw bottom row
+       cur_cord.Y = walleY;
+       for (int x = wallsX; x <= walleX; x++)
+       {
+              cur_cord.X = x;
+              SetConsoleCursorPosition(console_handle, cur_cord);
+              cout << '#';
+       }
+}
+
+void snake::drawfood(int x) // no use of int x here
+{
+       tail *tmp;
+       tmp = start;
+       if (x == 1) // draw new food
+       {
+              foodx = rand() % 2 + 39; // rand number between 2-39
+              foody = rand() % 2 + 16; // it will better to use wall ends position walleX,Y
+              /*check if food not created on snake body
+                         so we will loop through all snake node and check 
+                         if snake body pos meet with food position
+                         if yes the generate new position else continue
+                         */
+              while (tmp->next != NULL)
+              {
+                     if (foodx == tmp->x && foody == tmp->y)
+                     {
+                            drawfood(1);
+                            cout << "drawn";
+                     }
+
+                     tmp = tmp->next;
+              }
+       }
+}
+
+void snake::drawinit()
+{
+       drawWall();
+}
+
+/*
+decect if snake collided with it self or wall or food
+*/
+bool snake::collision()
+{
+       tail *tmp;
+       tmp = start->next;
+       //check collision with itself
+       while (tmp->next != NULL)
+       {
+              if (start->x == tmp->x && start->y == tmp->y)
+                     return true;
+
+              tmp = tmp->next;
+       }
+       //check collision with food
+       if (start->x == foodx && start->y == foody)
+       {
+              insert(foodx, foody); // insert new tail
+              drawfood(1);          // get new food position
+              score++;              // update score
+       }
+
+       //check collision with wall
+       //collision top row
+       for (int x = wallsX; x <= walleX; x++)          // getting x coordinadte
+       {                                               // y cordinate remain same y=0 because in row x increase in same y
+              if (start->x == x && start->y == wallsY) // getting y coordinte to get complete x,y cordinate
+              {
+                     return true;
+              }
+       }
+       //collision left column
+       for (int y = wallsY; y <= walleY; y++)
+       {
+              if (start->x == wallsX && start->y == y) // x same y chamge x=0
+              {
+                     return true;
+              }
+       }
+       //collision right column
+       for (int y = wallsY; y <= walleY; y++)
+       {
+              if (start->x == walleX && start->y == y) // right column threfore x ending point(same) with y changing
+              {
+                     return true;
+              }
+       }
+       //collision bottom row
+       for (int x = wallsX; x <= walleX; x++)
+       {
+              if (start->x == x && start->y == walleY)
+              {
+                     return true;
+              }
+       }
+
+       return false; // return false no collison
+}
+/*
+draw thing when player is dead
+*/
+void snake::labelDead()
+{
+
+       cur_cord.X = (walleX / 2);
+       cur_cord.Y = (walleY / 2);
+
+       SetConsoleCursorPosition(console_handle, cur_cord);
+
+       cout << "YOU ARE DEAD\n";
+
+       cur_cord.Y = (walleY / 2) + 1;
+       SetConsoleCursorPosition(console_handle, cur_cord);
+       cout << "YOUR HIGH SCORE IS " << score;
+}
+
+/*
+	menu screen of the game
+*/
+
+void snake::menu()
+{
+       char word;
+       ifstream iFile("menu.txt");
+       word = iFile.get();
+       while (iFile)
+       {
+
+              cout << word;
+              word = iFile.get();
+       }
+       iFile.close();
+       // get the menu
+}
+
+
+//===== main function
+int main()
+{
+       // displaying the menu
+       snake obc;
+       obc.menu();
+       switch (getch())
+       {
+       case 'z':
+              system("CLS");
+              loop(obc);
+              break;
+              case 'q':
+              break;
+       default:
+              system("CLS");
+              main();
+       }
+
+       return 0;
+}
+
+// loop controls the game
+void loop(snake &ob)
+{
+       ob.insert(10, 6); // first is head  snake drawn from first to last
+       ob.insert(10, 7);
+       ob.insert(10, 8);
+       ob.insert(10, 9);
+
+       ob.drawinit(); // this will just draw wall
+       int dir = 1;
+       while (1)
+       {
+              ob.draw();
+              Sleep(200); // waiting time
+                          //system("CLS");
+                          //clearScreen();
+
+              if (ob.collision()) // chek if collision with wall or itselfoccur
+              {
+                     ob.labelDead(); // do when snake is dead
+                     break;
+              }
+
+              if (kbhit()) // check if keyboard key is pressed
+              {
+                     switch (getch())
+                     {
+                     case 'w':
+                            d = 1;
+                            break;
+                     case 's':
+                            d = 2;
+                            break;
+                     case 'a':
+                            d = 3;
+                            break;
+                     case 'd':
+                            d = 4;
+                            break;
+                     case 'm':
+                            ob.insert(10, 7);
+                            break;
+                     }
+                     // cout << "food";		// not needed
+              }
+
+              ob.move();
+       }
+       int x;
+       cin >> x;
+}
diff --git a/C++/SimpleGames/Snakegame.cpp b/C++/SimpleGames/Snakegame.cpp
new file mode 100644
index 00000000..35b6b1de
--- /dev/null
+++ b/C++/SimpleGames/Snakegame.cpp
@@ -0,0 +1,245 @@
+#include < iostream >
+
+#include < conio.h >
+
+using namespace std;
+
+bool gameover;
+
+const int width = 20;
+
+const int height = 17;
+
+int x, y, fruitX, fruitY, score;
+
+int tailX[100], tailY[100]; //snake coordinates
+
+int nTail;
+
+enum eDirecton {STOP = 0, LEFT,RIGHT, UP, DOWN}; // Controls
+
+eDirecton dir;
+
+void Setup() {
+gameover = false;
+
+dir = STOP;
+
+x = width / 2;
+
+y = height / 2;
+
+fruitX = rand() % width; //display fruit in a random place
+
+fruitY = rand() % height; score = 0;
+
+}
+
+void Draw() {
+system("cls");
+
+for(int i = 0; i < width+2; i++)
+
+cout << "#";
+
+cout << endl ;
+
+for (int i = 0; i < height ; i++) {
+
+for (int j = 0; j < width; j++) {
+
+if (j == 0)
+
+cout << "#"; //walls
+
+if (i == y && j == x)
+
+cout << "*"; // snake tale
+
+else if (i == fruitY && j == fruitX )
+
+cout << "%"; // change it to change the fruit
+
+else {
+
+bool print = false;
+
+for (int k = 0; k< nTail ; k++) {
+
+if (tailX [k] == j && tailY [k] == i) {
+
+cout << "*"; print = true;
+
+}
+
+}
+
+if (!print) cout << " ";
+
+}
+
+if (j == width -1)
+
+cout << "#";
+
+}
+
+cout << endl;
+
+}
+
+for (int i = 0; i< width+2; i++)
+
+cout << "#";
+
+cout << endl;
+
+cout << "Score:" << score << endl ;
+
+}
+
+void Input ()
+{
+
+if (_kbhit ()) {
+
+switch (_getch ()) {
+
+case 'a':
+
+dir = LEFT;
+
+break;
+
+case 'd':
+
+dir = RIGHT;
+
+break;
+
+case 'w':
+
+dir = UP;
+
+break;
+
+case 's':
+
+dir = DOWN ;
+
+break;
+
+case 'x':
+
+gameover = true;
+
+break;
+
+}
+
+}
+
+}
+
+void algorithm()
+{
+
+int prevX = tailX [0];
+
+int prevY = tailY [0];
+
+int prev2X, prev2Y;
+
+tailX[0] = x;
+
+tailY[0] = y;
+
+for(int i = 1;i < nTail ; i++) {
+
+prev2X = tailX[i];
+
+prev2Y = tailY[i];
+
+tailX[i] = prevX;
+
+tailY[i] = prevY;
+
+prevX = prev2X;
+
+prevY = prev2Y ;
+
+}
+
+switch (dir) {
+
+case LEFT:
+
+x--;
+
+break;
+
+case RIGHT:
+
+x++;
+
+break;
+
+case UP:
+
+y--;
+
+break;
+
+case DOWN:
+
+y++;
+
+break;
+
+default:
+
+break;
+
+}
+
+if (x >= width) x =0;else if (x <0) x = width -1;
+
+if (y >= height) y = 0; else if (y < 0) y = height - 1;
+
+for (int i =0; i< nTail ;i++)
+
+if (tailX[i] == x && tailY[i] == y)
+gameover = true;
+
+if (x == fruitX && y == fruitY) {
+
+score +=10;
+
+fruitX = rand() % width;
+
+fruitY = rand() % height;
+
+nTail ++;
+
+}
+
+}
+
+int main()
+{
+
+Setup();
+
+while (!gameover) {
+
+Draw ();
+
+Input ();
+
+algorithm ();
+
+}
+
+return 0;
+
+}
diff --git a/C++/SimpleGames/Zombie_war.cpp b/C++/SimpleGames/Zombie_war.cpp
new file mode 100644
index 00000000..e01c36f9
--- /dev/null
+++ b/C++/SimpleGames/Zombie_war.cpp
@@ -0,0 +1,110 @@
+#include <bits/stdc++.h>
+using namespace std;
+
+int createZombie()
+{
+    if (rand() % 67 < 10)
+        return 11;
+    else
+        return rand() % 10 + 1;
+}
+
+int main()
+{
+    srand(time(NULL));
+    char enter;
+
+    int playerAlive = true;
+    int playerSkill = 9;
+    int playerScore = 1;
+    int zombieCount = 0;
+    int zombiesKilled = 0;
+
+    // Welcome title
+    cout << "Welcome to Zombie War." << endl
+         << "Press [ENTER] to start.";
+    cin.get();
+
+    // player name
+    string playerName;
+    cout << "Please enter your name: ";
+    getline(cin, playerName);
+
+    // ask how many zombies do the user want?
+    cout << "How many zombies do you wish to fight? " << endl;
+    cin >> zombieCount;
+
+    cout << "Get ready to fight for your life, " << playerName << "!" << endl;
+
+    // main game loop
+    while (playerAlive && zombiesKilled < zombieCount)
+    {
+        // creating a random zombie
+        int zombieSkill = createZombie();
+
+        // battle time
+        if (zombieSkill > 10)
+        {
+            cout << endl
+                 << "Here comes a huge zombie!" << endl;
+        }
+        else
+        {
+            cout << endl
+                 << "Here comes zombie " << zombiesKilled + 1 << endl;
+        }
+
+        cout << "Fighting..." << endl;
+        // zombie killed the player
+        if (playerSkill < zombieSkill)
+        {
+            playerAlive = false;
+            cout << "You have died." << endl;
+        }
+        // player killed the zombie
+        else
+        {
+            if (playerSkill - zombieSkill > 7)
+            {
+                cout << "You wasted the zombie!" << endl;
+                playerScore = playerScore * 2;
+            } // zombieSkill is betweeen 0 to 2.
+
+            else if (playerSkill - zombieSkill > 5)
+            {
+                cout << "You decapitated the zombie!" << endl;
+                playerScore = playerScore * 2;
+            } // zombieSkill is between 2 to 4.
+
+            else if (playerSkill - zombieSkill > 0)
+            {
+                cout << "You killed the zombie!" << endl;
+                playerScore = playerScore * 2;
+            } // zombieSkill is between 4 to 9.
+
+            else
+            {
+                cout << "You killed the zombie, but suffered injuries." << endl;
+            } // zombieSkill is 9.
+
+            zombiesKilled++;
+        }
+        cout << endl;
+    }
+
+    // end game
+    if (zombiesKilled == zombieCount)
+    {
+        // victory
+        cout << "You have survived the onslaught!" << endl;
+    }
+    else
+    {
+        // lost
+        cout << "You did not survive the zombie war." << endl;
+    }
+
+    cout << "Zombies killed: " << zombiesKilled << endl;
+    cout << "Final score: " << playerScore << endl
+         << endl;
+}
diff --git a/C++/Trapping Rain Water.cpp b/C++/Trapping Rain Water.cpp
new file mode 100644
index 00000000..785e5ff3
--- /dev/null
+++ b/C++/Trapping Rain Water.cpp	
@@ -0,0 +1,56 @@
+/*
+Question : 
+Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it can trap after raining.
+Link : https://leetcode.com/problems/trapping-rain-water/
+*/
+
+// Code : 
+
+
+#include<algorithm>
+class Solution {
+public:
+    int trap(vector<int>& height) {
+        int water = 0;
+        for( int i = 0; i < height.size(); i ++ )
+        {
+            int h = height[i];
+            if ( h != 0 )
+            {
+                if ( (i + 1) < height.size() && height[ i + 1 ] >= h )
+                    continue;
+                int end = 0;
+                int flag = 0;
+                int max = 0;
+                for ( int j = i + 2; j < height.size(); j ++ )
+                {
+                    if ( height[j] >= h )
+                    {
+                        end = j;
+                        max = height[j];
+                        flag = 2;
+                        break;
+                    }
+                    if ( height[j] > max )
+                    {
+                        end = j;
+                        max = height[j];
+                        flag = 1;
+                    }
+                }
+
+                if ( flag == 0 )
+                    continue;
+                int effh = min( h, max);
+                for( int k = i + 1; k < end; k ++ )
+                {
+                    if ( effh <= height[k] )
+                        continue;
+                    water += (effh - height[k]);
+                }
+                i = end - 1;
+            }
+        }
+        return water;
+    }
+};
diff --git a/C++/ValidPalindrome.cpp b/C++/ValidPalindrome.cpp
new file mode 100644
index 00000000..a9f197a0
--- /dev/null
+++ b/C++/ValidPalindrome.cpp
@@ -0,0 +1,15 @@
+class Solution {
+public:
+    bool isPalindrome(string s) {
+        string temp="";
+        for(int i=0;i<s.size();i++){
+            if((s[i]>='a'&&s[i]<='z')||(s[i]>='0'&&s[i]<='9')||(s[i]>='A'&&s[i]<='Z'))
+            temp+=tolower(s[i]);
+        }
+        int n=temp.size();
+        for(int i=0;i<(n+1)/2;i++)
+            if(temp[i]!=temp[n-1-i])
+                return false;
+        return true;
+    }
+};
\ No newline at end of file
diff --git a/C++/armstrong.cpp b/C++/armstrong.cpp
new file mode 100644
index 00000000..19ab8550
--- /dev/null
+++ b/C++/armstrong.cpp
@@ -0,0 +1,21 @@
+#include<bits/stdc++.h>
+using namespace std;
+
+
+int main(void)
+{
+	int n,sum,k;
+	cin>>n;
+	int a=n;
+	while(n>0){
+		k=n%10;
+		sum+=pow(k,3);
+		n=n/10;
+	}
+	if(a==sum)
+		cout<<"armstrong number";
+	else
+		cout<<"not a armstrong number";
+
+}
+
diff --git a/C++/calcAdvance.cpp b/C++/calcAdvance.cpp
new file mode 100644
index 00000000..38267730
--- /dev/null
+++ b/C++/calcAdvance.cpp
@@ -0,0 +1,56 @@
+#include<bits/stdc++.h>
+using namespace std;
+
+double add(double a, double b){
+    return (a+b);
+}
+
+double subtract(double a, double b){
+    return (a-b);
+}
+
+double multiply(double a, double b){
+    return (a*b);
+}
+
+double divide(double a, double b){
+    return (a/b);
+}
+
+int main(){
+    int z;
+    do{
+        double a,b;
+        char op;
+        cout<<"Enter two numbers on whom you want to perform the arithmatical operation: ";
+        cin>>a>>b;
+        cout<<"Enter the arithmatic operation('+', '-', 'x', '/': ";
+        cin>>op;
+        switch(op){
+            
+            case '+':
+            cout<<a<<op<<b<<" = "<<add(a,b);
+            break;
+
+            case '-':
+            cout<<a<<op<<b<<" = "<<subtract(a,b);
+            break;
+
+            case 'x':
+            cout<<a<<op<<b<<" = "<<multiply(a,b);
+            break;
+
+            case '/':
+            cout<<a<<op<<b<<" = "<<divide(a,b);
+            break;
+
+            default:
+            cout<<"Please choose a valid arithmatic operation from '+', '-', 'x', '/' only.";
+        }
+        cout<<endl<<"Enter the number as per the action you want to perform: ";
+        cout<<endl<<"1.Perform another operation."<<endl;
+        cout<<"2.Exit"<<endl;
+        cin>>z;
+    }while(z!=2);
+    return 0;
+}
\ No newline at end of file
diff --git a/C++/classCpp/polymorphism.cpp b/C++/classCpp/polymorphism.cpp
new file mode 100644
index 00000000..7aec985f
--- /dev/null
+++ b/C++/classCpp/polymorphism.cpp
@@ -0,0 +1,113 @@
+//Polymorphism
+#include<bits/stdc++.h>
+using namespace std;
+
+//function overloading
+class Func{
+	public:
+		void func1()
+		{
+			cout<<"This is function 1"<<endl;
+		}
+		void func1(int x)
+		{
+			cout<<"This is function 2"<<endl;
+		}
+		void func1(string s)
+		{
+			cout<<"This is function 3"<<endl;
+		}
+};
+
+
+//operator overloading
+class Employee{
+	private:
+	int sal,id;
+	string dept;
+	public:
+		Employee()
+		{
+			sal=0;
+			id=0;
+			dept="";
+		}
+		Employee(int s,int i,string d)
+		{
+			sal=s;
+			id=i;
+			dept=d;
+		}
+		bool operator== (Employee a)
+		{
+			if(sal==a.sal && id==a.id && dept==a.dept)
+			{
+				return true;
+			}
+			return false;
+		}
+};
+
+//virtual functions
+class Parent{
+	public:
+		void test1()
+		{
+			cout<<"This is parent class function 1\n";
+		}
+		virtual void test2()
+		{
+			cout<<"This is parent class function 2\n";
+		}
+};
+
+class Child : public Parent{
+	public:
+		void test1()
+		{
+			cout<<"This is child class function 1\n";
+		}
+		void test2()
+		{
+			cout<<"This is child class function 2\n";
+		}
+};
+
+int main(void)
+{
+	/*
+	//function overloading
+	
+	Func f;
+	f.func1();
+	f.func1(3);
+	f.func1("Hello");
+	
+	
+	//operator overloading
+	Employee e1,e2(100000,1,"Hello"),e3(100000,1,"Hello");
+	if(e1==e2)
+	{
+		cout<<"Same eployee\n";
+	}
+	else
+	{
+		cout<<"Different eployee\n";
+	}
+	if(e3==e2)
+	{
+		cout<<"Same eployee\n";
+	}
+	else
+	{
+		cout<<"Different eployee\n";
+	}
+*/
+	//virtual function;
+	Child c;
+	Parent *ptr;
+	ptr=&c;
+	ptr -> test1();
+	ptr -> test2();
+}
+
diff --git a/C++/classCpp/postfixEvaluation.cpp b/C++/classCpp/postfixEvaluation.cpp
new file mode 100644
index 00000000..4fb168fa
--- /dev/null
+++ b/C++/classCpp/postfixEvaluation.cpp
@@ -0,0 +1,48 @@
+#include<bits/stdc++.h>
+using namespace std;
+
+int prefixEvaluation(string s)
+{
+	stack<int> st;
+	for(int i=0;i<s.size();i++)
+	{
+		if(s[i]>='0' && s[i]<='9')
+		{
+			st.push(s[i]-'0');
+		}
+		else
+		{
+			int a=st.top();
+			st.pop();
+			int b=st.top();
+			st.pop();
+			switch(s[i])
+			{
+				case '+':
+					st.push(b+a);
+					break;
+				case '-':
+					st.push(b-a);
+					break;	
+				case '*':
+					st.push(a*b);
+					break;
+				case '/':
+					st.push(b/a);
+					break;
+				case '^':
+					st.push(pow(b,a));
+					break;
+			}
+		}
+	}
+	return st.top();
+}
+
+int main(void)
+{
+	string s;
+	cin>>s;
+	cout<<prefixEvaluation(s);
+}
+
diff --git a/C++/classCpp/prefixEvaluatiom.cpp b/C++/classCpp/prefixEvaluatiom.cpp
new file mode 100644
index 00000000..b06522a9
--- /dev/null
+++ b/C++/classCpp/prefixEvaluatiom.cpp
@@ -0,0 +1,48 @@
+#include<bits/stdc++.h>
+using namespace std;
+
+int prefixEvaluation(string s)
+{
+	stack<int> st;
+	for(int i=s.size()-1;i>=0;i--)
+	{
+		if(s[i]>='0' && s[i]<='9')
+		{
+			st.push(s[i]-'0');
+		}
+		else
+		{
+			int a=st.top();
+			st.pop();
+			int b=st.top();
+			st.pop();
+			switch(s[i])
+			{
+				case '+':
+					st.push(a+b);
+					break;
+				case '-':
+					st.push(a-b);
+					break;	
+				case '*':
+					st.push(a*b);
+					break;
+				case '/':
+					st.push(a/b);
+					break;
+				case '^':
+					st.push(pow(a,b));
+					break;
+			}
+		}
+	}
+	return st.top();
+}
+
+int main(void)
+{
+	string s;
+	cin>>s;
+	cout<<prefixEvaluation(s);
+}
+
diff --git a/C++/classCpp/useless.cpp b/C++/classCpp/useless.cpp
new file mode 100644
index 00000000..638232c1
--- /dev/null
+++ b/C++/classCpp/useless.cpp
@@ -0,0 +1,7 @@
+#include <bits/stdc++.h>
+using namespace std;
+  
+int main()
+{
+    cout<<13%10;
+}
diff --git a/C++/classCpp/vector.cpp b/C++/classCpp/vector.cpp
new file mode 100644
index 00000000..c5344679
--- /dev/null
+++ b/C++/classCpp/vector.cpp
@@ -0,0 +1,39 @@
+#include<bits/stdc++.h>
+using namespace std;
+
+ vector<int> addToArrayForm(vector<int>& num, int k) {
+        int i,j=num.size()-1,sum=0;
+        for(i=0;i<num.size();i++){
+            sum+=num[i]*pow(10,j);
+            j--;
+        }
+        int n=sum+k;
+        vector<int> v1;
+        while(n>=0){
+            int a=n%10;
+            n=n/10;
+            v1.push_back(a);
+        }
+        reverse(v1.begin(),v1.end());
+        return v1;
+    }
+
+int main(void)
+{
+	vector<int> num;
+	num.push_back(1);
+	num.push_back(8);
+	num.push_back(8);
+	num.push_back(9);
+	num.push_back(2);
+	num.push_back(0);
+	num.push_back(1);
+	num.push_back(9);
+	num.push_back(10);
+	num.pull_back(1);
+	vector<int> v2;
+	v2=addToArrayForm(num,8792);
+	for(int i=0;i<v2.size();i++)
+		cout<<v2[i]<<" ";
+}
+
diff --git a/C++/classCpp/virtual functions.cpp b/C++/classCpp/virtual functions.cpp
new file mode 100644
index 00000000..c24fcce1
--- /dev/null
+++ b/C++/classCpp/virtual functions.cpp	
@@ -0,0 +1,124 @@
+//virtual function
+#include<bits/stdc++.h>
+using namespace std;
+
+class Animals{
+	public:
+		virtual void setName(string name)
+		{
+			
+		}
+		
+		virtual void setVoice(string voice)
+		{
+			
+		}
+		virtual void setColour(string colour)
+		{
+			
+		}
+		virtual void getDetails()
+		{
+
+		}
+};
+
+class Dogs:public Animals{
+	private:
+		string name,voice,colour;
+	public:
+		void setName(string name)
+		{
+			this -> name = name;
+		}
+		
+		void setVoice(string voice)
+		{
+			this -> voice = voice;
+		}
+		void setColour(string colour)
+		{
+			this -> colour = colour;
+		}
+		void getDetails()
+		{
+			cout<<"\nName of Dog is : "<<name<<"\nVoice of Dog is : "<<voice<<"\nColour of Dog is : "<<colour;
+		}
+};
+
+class Cats:public Animals{
+	private:
+		string name,voice,colour;
+	public:
+		void setName(string name)
+		{
+			this -> name = name;
+		}
+		
+		void setVoice(string voice)
+		{
+			this -> voice = voice;
+		}
+		void setColour(string colour)
+		{
+			this -> colour = colour;
+		}
+		void getDetails()
+		{
+			cout<<"\nName of Cat is : "<<name<<"\nVoice of Cat is : "<<voice<<"\nColour of Cat is : "<<colour;
+		}
+};
+
+int main(void)
+{
+/*	Animals* a;
+	a=new Dogs();
+	a -> legs();
+	Animals* b;
+	b=new Cats();
+	b -> displayName();
+	Animals* c;
+	c=new Animals();
+	c -> displayName();*/
+	
+	int n,i=0;
+	cout<<"Enter how many animals : ";
+	cin>>n;
+	string check,name,voice,colour;
+	vector<Animals*> vec(n);
+	while(n)
+	{
+		cout<<"\nEnter animal (dog/cat) : ";
+		cin>>check;
+		if(check=="dog")
+		{
+			vec[i]=new Dogs();
+		}
+		else if(check=="cat")
+		{
+			vec[i]=new Cats();
+		}
+		else
+		{
+			cout<<"\nEnter valid animal";
+			continue;
+		}
+		cout<<"\nEnter name : ";
+		cin>>name;
+		vec[i] -> setName(name);
+		cout<<"\nEnter colour : ";
+		cin>>colour;
+		vec[i] -> setColour(colour);
+		cout<<"\nEnter voice : ";
+		cin>>voice;
+		vec[i] -> setVoice(voice);
+		i++;
+		n--;
+	}
+	cout<<"\nAnimal Details:\n";
+	for(i=0;i<vec.size();i++)
+	{
+		vec[i]->getDetails();
+	}
+}
+
diff --git a/C++/digitOfNum.cpp b/C++/digitOfNum.cpp
new file mode 100644
index 00000000..190c682f
--- /dev/null
+++ b/C++/digitOfNum.cpp
@@ -0,0 +1,15 @@
+#include<bits/stdc++.h>
+using namespace std;
+
+
+int main(void)
+{
+	int n;
+	cin>>n;
+	while(n>0){
+		cout<<n%10<<"\n";
+		n=n/10;
+	}
+
+}
+
diff --git a/C++/divisbleByTwoNum.cpp b/C++/divisbleByTwoNum.cpp
new file mode 100644
index 00000000..b72a57de
--- /dev/null
+++ b/C++/divisbleByTwoNum.cpp
@@ -0,0 +1,13 @@
+#include<bits/stdc++.h>
+using namespace std;
+
+int main(void)
+{
+	int a,b,c;
+	cin>>c>>a>>b;
+	int c1=c/a;
+	int c2=c/b;
+	int c3=c/(a*b);
+	cout<<c1+c2-c3;
+}
+
diff --git a/C++/factorial_recursion.cpp b/C++/factorial_recursion.cpp
new file mode 100644
index 00000000..0129dbe0
--- /dev/null
+++ b/C++/factorial_recursion.cpp
@@ -0,0 +1,17 @@
+#include <iostream>
+using namespace std;
+ 
+int factorial(int n) {
+  
+    // single line to find factorial
+    return (n == 1 || n == 0) ? 1 : n * factorial(n - 1);
+}
+ 
+int main() {
+  
+    int num = 5;
+    cout << "Factorial of " << num << " is "<< factorial(num);
+    return 0;
+  
+}
+ 
diff --git a/C++/factors.cpp b/C++/factors.cpp
new file mode 100644
index 00000000..3c29f354
--- /dev/null
+++ b/C++/factors.cpp
@@ -0,0 +1,15 @@
+#include<bits/stdc++.h>
+using namespace std;
+
+
+int main(void)
+{
+	int n,i;
+	cin>>n;
+	for(i=1;i<=n;i++){
+		if(n%i==0)
+			cout<<i<<" ";
+	}
+
+}
+
diff --git a/C++/fibonacci-recursion.cpp b/C++/fibonacci-recursion.cpp
new file mode 100644
index 00000000..a8fbb0f6
--- /dev/null
+++ b/C++/fibonacci-recursion.cpp
@@ -0,0 +1,20 @@
+#include <iostream>
+using namespace std;
+
+int fibonacci(int number) {
+  if(number == 1 || number == 2) {
+    return 1;
+  } else {
+    return fibonacci(number - 1) + fibonacci(number - 2);
+  }
+}
+
+int main() {
+  int number;
+  cout << "Type a number n to find the nth number in the Fibonacci Sequence: ";
+  cin >> number;
+
+  cout << fibonacci(number) << endl;
+
+  return 0;
+}
diff --git a/C++/fibonacci.cpp b/C++/fibonacci.cpp
new file mode 100644
index 00000000..0ddf4863
--- /dev/null
+++ b/C++/fibonacci.cpp
@@ -0,0 +1,19 @@
+
+#include <bits/stdc++.h>
+using namespace std;
+ 
+int fib(int n)
+{
+    if (n <= 1)
+        return n;
+    return fib(n - 1) + fib(n - 2);
+}
+ 
+int main()
+{
+    int n = 9;
+    cout << fib(n);
+    getchar();
+    return 0;
+}
+
diff --git a/C++/for.cpp b/C++/for.cpp
deleted file mode 100644
index 405c7a18..00000000
--- a/C++/for.cpp
+++ /dev/null
@@ -1,2 +0,0 @@
-#include<iostream>
-using namespace std;
\ No newline at end of file
diff --git a/C++/gcdLCM.cpp b/C++/gcdLCM.cpp
new file mode 100644
index 00000000..09241841
--- /dev/null
+++ b/C++/gcdLCM.cpp
@@ -0,0 +1,28 @@
+#include<bits/stdc++.h>
+using namespace std;
+
+int lcm(int a,int b,int c)
+{
+	return (a*b)/c;
+}
+
+int gcd(int a,int b)
+{
+	while(b!=0)
+	{
+		int rem=a%b;
+		a=b;
+		b=rem;	
+	}
+	return a;
+}
+
+int main(void)
+{
+	int a,b;
+	cin>>a>>b;
+	int c=gcd(a,b);
+	int d=lcm(a,b,c);
+	cout<<c<<" "<<d<<endl;
+}
+
diff --git a/C++/helloworld.cpp b/C++/helloworld.cpp
index 2b6bde16..83cde825 100644
--- a/C++/helloworld.cpp
+++ b/C++/helloworld.cpp
@@ -3,6 +3,6 @@ using namespace std;
 
 int main()
 {
-	cout<<"Hello world"<<endl;
+	cout<<"Hello world!";
 	return 0;
-}
\ No newline at end of file
+}
diff --git a/C++/left_rotate_array.cpp b/C++/left_rotate_array.cpp
new file mode 100644
index 00000000..5315178a
--- /dev/null
+++ b/C++/left_rotate_array.cpp
@@ -0,0 +1,27 @@
+#include <bits/stdc++.h>
+using namespace std;
+
+void rotate (int a[], int n)
+{
+    int i, temp;
+    temp=a[0];
+    for(i=0;i<n-1;i++)
+        a[i]=a[i+1];
+    a[i]=temp;
+
+}
+int main()
+{
+    int n,a[50],i;
+    cout<<"Enter the no. of elements in an array: ";
+    cin>>n;
+    cout<<"Enter array: ";
+    for(i=0;i<n;i++)
+    {
+        cin>>a[i];
+    }
+    rotate(a,n);
+    cout<<"Rotated array: ";
+    for(i=0;i<n;i++)
+        cout<<a[i]<<" ";
+}
diff --git a/C++/link list functions.cpp b/C++/link list functions.cpp
deleted file mode 100644
index e654127d..00000000
--- a/C++/link list functions.cpp	
+++ /dev/null
@@ -1,121 +0,0 @@
-#include<iostream>
-using namespace std;
-
-class node//creating list
-{
-public:
-    int data;
-    node* next;
-
-    node(int val)
-    {
-        data = val;
-        next = NULL;
-    }
-};
-void InsertatHead(node* &head , int val)  //insert at beginning
-{
-    node* dev = new node(val);
-    node*p;
-    p = head;
-    dev->next = p;
-    head = dev;
-}
-
-void InsertatTail(node* &head , int val)  //insert at tail
-{
-    node* dev = new node(val);
-    node* temp=head;
-    if(head == NULL)
-    {
-        head = dev;
-        return;
-    }
-    while(temp->next != NULL)
-    {
-        temp  =temp->next;
-    }
-    temp->next = dev;
-}
-void InsertatIndex(node* &head , int data , int position)  //insert at specific position
-{
-    node* dev = new node(data);
-    int pos=1;
-    node* temp = head;node* temp1;
-    while(pos != position)
-    {
-        pos++;
-        temp1 = temp;
-        temp = temp->next;
-    }
-    temp1->next=dev;
-    dev->next = temp;
-}
-
-void DeletefromStart(node* &head)  //delete from start
-{
-   node* temp = head;
-   head = head->next;
-   delete(temp);//freeing up the memory
-}
-
-void DeletefromEnd(node* &head)  //delete from end
-{
-    node* temp = head;node* temp1;
-    while(temp->next != NULL)
-    {
-        temp1=temp;
-        temp = temp->next;
-    }
-    temp1->next = NULL;
-    delete(temp);
-}
-
-void DeletefromIndex(node* &head , int position)  //delete from specific position
-{
-    int pos=1;
-    node* temp = head;
-    node* temp1;
-    while(pos != position)
-    {
-        pos++;
-        temp1 = temp;
-        temp = temp->next;
-    }
-    temp1->next = temp->next;
-    delete(temp);
-}
-
-int LengthofList(node* head)  //length of link list
-{
-    node* dev = head;
-    int c=0;
-    while(dev != NULL)
-    {
-        c++;
-        dev = dev->next;
-    }
-    return c;
-}
-void display(node* head)  //displaying of link list
-{
-    node* temp = head;
-    while(temp != NULL)
-    {
-        cout<<temp->data<<" ";
-        temp = temp->next;
-    }
-    cout<<endl;
-}
-int SearchForElement(node* head,int key) //if element found return position else -1
-{
-    node* temp=head;int c=1;
-    while(temp != NULL){
-        if(temp->data == key){
-            return c;
-            break;
-        }
-        c++;
-    }
-    return -1;
-}
diff --git a/C++/main.cpp b/C++/main.cpp
deleted file mode 100644
index 1c4817ae..00000000
--- a/C++/main.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-#include<iostream>
-using namespace std;
-
-int* insertatbeginning(int arr[] ,int val ,int s)
-{
-    s++;
-    for(int i=s ; i>=0 ; i--){
-        arr[i+1]=arr[i];
-    }
-    arr[0]=val;
-}
-int delelement(int arr[] ,int val ,int s)
-{
-    int i;
-for (i=0; i<s; i++)
-    if (arr[i] == val)
-        break;
-
-
-if (i < s)
-{
-    s = s - 1;
-    for (int j=i; j<s; j++)
-        arr[j] = arr[j+1];
-}
-
-return s;
-}
-
-int main()
-{
-    cout<<"Enter size of array : ";
-    int s;cin>>s;
-    int arr[s];
-    cout<<"Enter elements of array-\n";
-    for(int i=0 ; i<s ; i++){
-        cin>>arr[i];
-    }
-    cout<<"*****MENU*****\n1.Insert at begnning\n2.Delete given element\nEnter your choice : ";
-    int ch;cin>>ch;
-    if(ch==1){
-        cout<<"Enter element : ";
-        int val;cin>>val;
-        insertatbeginning(arr, val, s);
-        cout<<"Array after inserting-\n";
-        for(int i=0 ; i<=s ; i++){
-            cout << arr[i] << " ";
-        }
-    }
-    if(ch==2){
-        cout<<"Enter element to be deleted : ";
-        int val;cin>>val;
-        int n=delelement(arr, val, s);
-        for(int i=0 ; i<n ; i++){
-            cout << arr[i] << " ";
-        }
-
-    }
-}
-
-
diff --git a/C++/patterns/0_1.cpp b/C++/patterns/0_1.cpp
new file mode 100644
index 00000000..35e24532
--- /dev/null
+++ b/C++/patterns/0_1.cpp
@@ -0,0 +1,22 @@
+// 1
+// 0 1
+// 1 0 1
+// 1 0 1 0 1
+
+#include <bits/stdc++.h>
+using namespace std;
+typedef long long ll;
+
+int main(void)
+{
+    int n;
+    cin >> n;
+    for (int i = 0; i < n; i++)
+    {
+        for (int j = 0; j <= i; j++)
+        {
+            cout << ((i + j) % 2 == 0 ? 1 : 0) << " ";
+        }
+        cout << endl;
+    }
+}
\ No newline at end of file
diff --git a/C++/patterns/PascalTrianlge.cpp b/C++/patterns/PascalTrianlge.cpp
new file mode 100644
index 00000000..45d36d94
--- /dev/null
+++ b/C++/patterns/PascalTrianlge.cpp
@@ -0,0 +1,33 @@
+#include <bits/stdc++.h>
+using namespace std;
+
+int fact(int n)
+{
+    if (n < 2)
+        return 1;
+    else
+        return n * fact(n - 1);
+}
+
+int pascalTriangle(int n, int r)
+{
+    return fact(n) / (fact(r) * fact(n - r));
+}
+
+int main()
+{
+    int no_of_rows;
+    cin >> no_of_rows;
+    for (int row = 0; row < no_of_rows; row++)
+    {
+
+        for (int space = 1; space <= no_of_rows - row; space++)
+            cout << " ";
+
+        for (int colunm = 0; colunm <= row; colunm++)
+            cout << pascalTriangle(row, colunm) << " ";
+
+        cout << endl;
+    }
+    return 0;
+}
\ No newline at end of file
diff --git a/C++/patterns/README.md b/C++/patterns/README.md
new file mode 100644
index 00000000..49bc6e19
--- /dev/null
+++ b/C++/patterns/README.md
@@ -0,0 +1,21 @@
+## 🧐 What are Pattern Programs?
+
+Pattern programs are nothing just patterns which consists of numbers, alphabets, symbols which are printed in a particular form. The solutions to these kind of programs are listed out using conditional loops.
+
+## 📕 Why to study Pattern Programs?
+
+* Pattern programs best means to study the working of looping structures in general purpose programming languages.
+
+* It helps beginners to visualise how every iteration in a loop works.
+
+* Also popularly asked in campus placements & job interviews.
+
+## Links to find C++ Pattern Programs 
+
+* [Star Pattern](https://techstudy.org/CplusplusLanguage/list-of-Cplusplus-language-star-Pattern-programs)
+
+* [Number Pattern](https://techstudy.org/CplusplusLanguage/All-number-patterns-using-Cplusplus-programming-Language/)
+
+* [Alphabet Pattern](https://techstudy.org/CplusplusLanguage/cplusplus-programs-to-print-alphabet-pattern)
+
+* [Video](https://www.youtube.com/playlist?list=PLIY8eNdw5tW8TmAF1Xkez1CY7HE4X9KRL)
diff --git a/C++/patterns/butterfly.cpp b/C++/patterns/butterfly.cpp
new file mode 100644
index 00000000..e80dcbd1
--- /dev/null
+++ b/C++/patterns/butterfly.cpp
@@ -0,0 +1,32 @@
+
+#include<iostream>
+using namespace std;
+
+int main()
+{
+  int r,i,j;
+  cout<<"Enter no. of rows: ";
+  cin>>r;
+  
+  for(i=1;i<=r;i++)
+  {
+    for(j=1;j<=i;j++)
+    cout<<"*";
+    for(j=1;j<=2*(r-i);j++)
+    cout<<" ";
+    for(j=1;j<=i;j++)
+    cout<<"*";
+    cout<<"\n";
+  }
+    for(i=r;i>=1;i--)
+  {
+    for(j=1;j<=i;j++)
+    cout<<"*";
+    for(j=1;j<=2*(r-i);j++)
+    cout<<" ";
+    for(j=1;j<=i;j++)
+    cout<<"*";
+    cout<<"\n";
+  }
+  return 0;
+}
diff --git a/C++/patterns/diamondpatternincpp.cpp b/C++/patterns/diamondpatternincpp.cpp
new file mode 100644
index 00000000..f603a79a
--- /dev/null
+++ b/C++/patterns/diamondpatternincpp.cpp
@@ -0,0 +1,27 @@
+#include<iostream>
+using namespace std;
+int main()
+{
+    int l,c,sp;
+    for (l=1;l<=5;l++)
+    {
+        for (sp=5;sp>=l;sp--)
+            cout<<" ";
+        for (c=1;c<=l;c++)
+            cout<<c;
+        for(c=l-1;c>=1;c--)
+             cout<<c; 
+         cout<<"\n";
+    }
+    for (l=1;l<=4;l++)
+    {
+        for (sp=0;sp<=l;sp++)
+            cout<<" ";
+        for (c=1;c<=5-l;c++)
+            cout<<c;
+        for (c=c-2;c>=1;c--)
+            cout<<c;
+        cout<<"\n";
+    }
+    return 0;
+}
\ No newline at end of file
diff --git a/C++/patterns/diamondpatternincppforn.cpp b/C++/patterns/diamondpatternincppforn.cpp
new file mode 100644
index 00000000..4abeb09b
--- /dev/null
+++ b/C++/patterns/diamondpatternincppforn.cpp
@@ -0,0 +1,30 @@
+#include<iostream>
+using namespace std;
+int main()
+{
+    int n;
+    cout<<"Enter the no. of rows:"<<"\n";
+    cin>>n;
+    int l,c,sp;
+    for (l=1;l<=n;l++)
+    {
+        for (sp=n;sp>=l;sp--)
+            cout<<" ";
+        for (c=1;c<=l;c++)
+            cout<<c;
+        for(c=l-1;c>=1;c--)
+            cout<<c; 
+         cout<<"\n";
+    }
+    for (l=1;l<=n-1;l++)
+    {
+        for (sp=0;sp<=l;sp++)
+            cout<<" ";
+        for (c=1;c<=n-l;c++)
+            cout<<c;
+        for (c=c-2;c>=1;c--)
+            cout<<c;
+        cout<<"\n";
+    }
+    return 0;
+}
\ No newline at end of file
diff --git a/C++/patterns/floydTriangle.cpp b/C++/patterns/floydTriangle.cpp
new file mode 100644
index 00000000..e074b842
--- /dev/null
+++ b/C++/patterns/floydTriangle.cpp
@@ -0,0 +1,23 @@
+// 1
+// 2 3
+// 4 5 6
+// 7 8 9 10
+// 11 12 13 14 15
+
+#include <bits/stdc++.h>
+using namespace std;
+typedef long long ll;
+
+int main(void)
+{
+    int n, k = 1;
+    cin >> n;
+    for (int i = 0; i < n; i++)
+    {
+        for (int j = 0; j <= i; j++)
+        {
+            cout << k++ << " ";
+        }
+        cout << endl;
+    }
+}
\ No newline at end of file
diff --git a/C++/patterns/hollowRec.cpp b/C++/patterns/hollowRec.cpp
new file mode 100644
index 00000000..20ef5b74
--- /dev/null
+++ b/C++/patterns/hollowRec.cpp
@@ -0,0 +1,31 @@
+// ####
+// #  #
+// #  #
+// #  #
+// ####
+
+#include <bits/stdc++.h>
+using namespace std;
+typedef long long ll;
+
+int main(void)
+{
+    int len, bre;
+    cin >> len;
+    cin >> bre;
+    for (int i = 0; i < len; i++)
+    {
+        for (int j = 0; j < bre; j++)
+        {
+            if (j == 0 || j == bre - 1 || i == 0 || i == len - 1)
+            {
+                cout << "#";
+            }
+            else
+            {
+                cout << " ";
+            }
+        }
+        cout << endl;
+    }
+}
\ No newline at end of file
diff --git a/C++/patterns/invertedCount.cpp b/C++/patterns/invertedCount.cpp
new file mode 100644
index 00000000..fe267b98
--- /dev/null
+++ b/C++/patterns/invertedCount.cpp
@@ -0,0 +1,23 @@
+// 1 2 3 4 5
+// 1 2 3 4
+// 1 2 3
+// 1 2
+// 1
+
+#include <bits/stdc++.h>
+using namespace std;
+typedef long long ll;
+
+int main(void)
+{
+    int n;
+    cin >> n;
+    for (int i = 0; i < n; i++)
+    {
+        for (int j = 1; j <= n - i; j++)
+        {
+            cout << j << " ";
+        }
+        cout << endl;
+    }
+}
\ No newline at end of file
diff --git a/C++/patterns/numberPyramid.cpp b/C++/patterns/numberPyramid.cpp
new file mode 100644
index 00000000..df5632ba
--- /dev/null
+++ b/C++/patterns/numberPyramid.cpp
@@ -0,0 +1,28 @@
+//     1
+//    1 2
+//   1 2 3
+//  1 2 3 4
+// 1 2 3 4 5
+
+#include <bits/stdc++.h>
+using namespace std;
+typedef long long ll;
+
+int main(void)
+{
+    int n;
+    cin >> n;
+    for (int i = 0; i < n; i++)
+    {
+        int k = 1;
+        for (int j = 0; j < n - i - 1; j++)
+        {
+            cout << " ";
+        }
+        for (int j = 0; j <= i; j++)
+        {
+            cout << k++ << " ";
+        }
+        cout << endl;
+    }
+}
\ No newline at end of file
diff --git a/C++/patterns/palindromic.cpp b/C++/patterns/palindromic.cpp
new file mode 100644
index 00000000..ac9743a6
--- /dev/null
+++ b/C++/patterns/palindromic.cpp
@@ -0,0 +1,33 @@
+//     1
+//    212
+//   32123
+//  4321234
+// 543212345
+
+#include <bits/stdc++.h>
+using namespace std;
+typedef long long ll;
+
+int main(void)
+{
+    int n;
+    cin >> n;
+    for (int i = 0; i < n; i++)
+    {
+        int k = i + 1;
+        for (int j = 0; j < n - i - 1; j++)
+        {
+            cout << " ";
+        }
+        while (k >= 1)
+        {
+            cout << k-- << " ";
+        }
+        k++;
+        while (k < i + 1)
+        {
+            cout << ++k << " ";
+        }
+        cout << endl;
+    }
+}
\ No newline at end of file
diff --git a/C++/patterns/pyramid.cpp b/C++/patterns/pyramid.cpp
new file mode 100644
index 00000000..6e158e49
--- /dev/null
+++ b/C++/patterns/pyramid.cpp
@@ -0,0 +1,94 @@
+#include <bits/stdc++.h>
+using namespace std;
+typedef long long ll;
+
+int main(void)
+{
+    //half inverted pyramid
+    // #####
+    //  ####
+    //   ###
+    //    ##
+    //     #
+
+    // int n;
+    // cin >> n;
+    // for (int i = n - 1; i >= 0; i--)
+    // {
+    //     for (int j = i; j < n - 1; j++)
+    //     {
+    //         cout << " ";
+    //     }
+    //     for (int j = 0; j <= i; j++)
+    //     {
+    //         cout << "#";
+    //     }
+    //     cout << endl;
+    // }
+
+    //inverted pyramid
+    // #########
+    //  #######
+    //   #####
+    //    ###
+    //     #
+
+    // int n;
+    // cin >> n;
+    // for (int i = n - 1; i >= 0; i--)
+    // {
+    //     for (int j = i; j < n - 1; j++)
+    //     {
+    //         cout << " ";
+    //     }
+    //     for (int j = 0; j <= 2 * i; j++)
+    //     {
+    //         cout << "#";
+    //     }
+    //     cout << endl;
+    // }
+
+    //half pyramid
+    //      %
+    //     %%
+    //    %%%
+    //   %%%%
+    //  %%%%%
+
+    // int n;
+    // cin >> n;
+    // for (int i = 0; i < n; i++)
+    // {
+    //     for (int j = n - 1; j >= i; j--)
+    //     {
+    //         cout << " ";
+    //     }
+    //     for (int j = 0; j <= i; j++)
+    //     {
+    //         cout << "%";
+    //     }
+    //     cout << endl;
+    // }
+
+    // pyramid
+    //      %
+    //     %%%
+    //    %%%%%
+    //   %%%%%%%
+    //  %%%%%%%%%
+
+    // int n;
+    // cin >> n;
+    // for (int i = 0; i < n; i++)
+    // {
+    //     for (int j = n - 1; j >= i; j--)
+    //     {
+    //         cout << " ";
+    //     }
+    //     for (int j = 0; j <= 2 * i; j++)
+    //     {
+    //         cout << "%";
+    //     }
+    //     cout << endl;
+    // }
+}
\ No newline at end of file
diff --git a/C++/patterns/rectangle.cpp b/C++/patterns/rectangle.cpp
new file mode 100644
index 00000000..9ad2a713
--- /dev/null
+++ b/C++/patterns/rectangle.cpp
@@ -0,0 +1,26 @@
+// $$$$
+// $$$$
+// $$$$
+// $$$$
+// $$$$
+#include <iostream>
+#include <conio.h>
+using namespace std;
+int main()
+{
+    int rows,columns,i,j;
+    cout<<"Enter the number of rows: ";
+    cin>>rows;
+    
+    cout<<"Enter the number of columns: ";
+    cin>>columns;
+     
+     for(i=1; i<=rows; i++){
+    for (j=1; j<=columns; j++){
+        cout<<"$";
+    }
+    cout<<"\n";
+}
+getch();
+    return 0;
+}
diff --git a/C++/patterns/rhombus.cpp b/C++/patterns/rhombus.cpp
new file mode 100644
index 00000000..e5173a65
--- /dev/null
+++ b/C++/patterns/rhombus.cpp
@@ -0,0 +1,27 @@
+//     #####
+//    #####
+//   #####
+//  #####
+// #####
+
+#include <bits/stdc++.h>
+using namespace std;
+typedef long long ll;
+
+int main(void)
+{
+    int n;
+    cin >> n;
+    for (int i = 0; i < n; i++)
+    {
+        for (int j = 0; j < n - i - 1; j++)
+        {
+            cout << " ";
+        }
+        for (int j = 0; j < n; j++)
+        {
+            cout << "#";
+        }
+        cout << endl;
+    }
+}
\ No newline at end of file
diff --git a/C++/patterns/star.cpp b/C++/patterns/star.cpp
new file mode 100644
index 00000000..67929924
--- /dev/null
+++ b/C++/patterns/star.cpp
@@ -0,0 +1,44 @@
+//     @
+//    @@@
+//   @@@@@
+//  @@@@@@@
+// @@@@@@@@@
+// @@@@@@@@@
+//  @@@@@@@
+//   @@@@@
+//    @@@
+//     @
+
+#include <bits/stdc++.h>
+using namespace std;
+typedef long long ll;
+
+int main(void)
+{
+    int n;
+    cin >> n;
+    for (int i = 0; i < n; i++)
+    {
+        for (int j = 0; j < n - i - 1; j++)
+        {
+            cout << " ";
+        }
+        for (int j = 0; j < 2 * i + 1; j++)
+        {
+            cout << "@";
+        }
+        cout << endl;
+    }
+    for (int i = n - 1; i >= 0; i--)
+    {
+        for (int j = 0; j < n - i - 1; j++)
+        {
+            cout << " ";
+        }
+        for (int j = 0; j < 2 * i + 1; j++)
+        {
+            cout << "@";
+        }
+        cout << endl;
+    }
+}
\ No newline at end of file
diff --git a/C++/perfect-number.cpp b/C++/perfect-number.cpp
new file mode 100644
index 00000000..a435b4bc
--- /dev/null
+++ b/C++/perfect-number.cpp
@@ -0,0 +1,37 @@
+#include <iostream>
+using namespace std;
+int fact1(int res);
+int main()
+{
+    int t;
+    cin>>t;
+    while(t--)
+    {
+        int n,n1,i,res,fact=1,sum=0,tmp;
+        cin>>n;
+        n1=n;
+        while(n!=0)
+        {
+            res=n%10;
+            tmp=fact1(res);
+            sum+=tmp;
+            n/=10;
+        }
+        if(n1==sum)
+        cout<<"Perfect\n";
+        else
+        cout<<"Not Perfect\n";
+
+    }
+    return 0;
+}
+int fact1(int res)
+{
+    int i,fact=1;
+    for(i=1;i<=res;i++)
+            {
+                fact=fact*i;
+                
+            }
+            return fact;
+}
diff --git a/C++/positive.cpp b/C++/positive.cpp
new file mode 100644
index 00000000..cb95c32f
--- /dev/null
+++ b/C++/positive.cpp
@@ -0,0 +1,19 @@
+// Program to print positive number entered by the user
+// If the user enters a negative number, it is skipped
+
+#include <iostream>
+using namespace std;
+
+int main() {
+    int number;
+
+    cout << "Enter an integer: ";
+    cin >> number;
+
+    // checks if the number is positive
+    if (number > 0) {
+        cout << "You entered a positive integer: " << number << endl;
+    }
+    cout << "This statement is always executed.";
+    return 0;
+}
diff --git a/C++/power.cpp b/C++/power.cpp
new file mode 100644
index 00000000..3f42db91
--- /dev/null
+++ b/C++/power.cpp
@@ -0,0 +1,18 @@
+#include<bits/stdc++.h>
+using namespace std;
+
+int power(int n,int k){
+	if(n==0)
+		return 1;
+	int prevPower=power(n-1,k);
+	return prevPower*k;
+}
+
+int main(void)
+{
+	int n,k;
+	cin>>n>>k;
+	cout<<power(n,k);
+
+}
+
diff --git a/C++/primeNumber.cpp b/C++/primeNumber.cpp
new file mode 100644
index 00000000..89d3a47a
--- /dev/null
+++ b/C++/primeNumber.cpp
@@ -0,0 +1,19 @@
+#include<bits/stdc++.h>
+using namespace std;
+
+
+int main(void)
+{
+	int n,i,count=0;
+	cin>>n;
+	for(i=2;i<=(n/2);i++){
+		if(n%i==0)
+			count+=1;
+	}
+	if(count>0)
+		cout<<"Not a prime number";
+	else
+		cout<<"A prime number";
+
+}
+
diff --git a/C++/primetwono.cpp b/C++/primetwono.cpp
new file mode 100644
index 00000000..85de5150
--- /dev/null
+++ b/C++/primetwono.cpp
@@ -0,0 +1,24 @@
+// CPP program to check if two
+// numbers are co-prime or not
+#include<bits/stdc++.h>
+using namespace std;
+ 
+// function to check and print if
+// two numbers are co-prime or not
+void coprime(int a, int b) {
+     
+    if ( __gcd(a, b) == 1)
+        cout << "Co-Prime" << endl;
+    else
+        cout << "Not Co-Prime" << endl;       
+}
+ 
+// driver code
+int main()
+{
+    int a = 5, b = 6;
+    coprime(a, b);   
+    a = 8, b = 16;
+    coprime(a, b);       
+    return 0;
+}
diff --git a/C++/randomPassword.cpp b/C++/randomPassword.cpp
new file mode 100644
index 00000000..ed9b55b8
--- /dev/null
+++ b/C++/randomPassword.cpp
@@ -0,0 +1,164 @@
+/*
+Project features:
+1.Password consist of:
+	->lowecase alphabet:a to z
+	->uppercase alphabet:A to Z
+	->number:0 to 9
+	->special symbol:!,@,#,$,%,&
+
+2.Password length:
+	->Minimum:7
+	->Maximum:100
+	
+3.Password begin with a 
+letter (can be lowercase or uppercase)
+
+4.Password  contain at least 
+  2 lowercase letter , 2 uppercase letter,
+  1 number , and 1 special symbol
+
+5.Each time generated password is unique.
+
+*/
+
+#include<bits/stdc++.h>
+using namespace std;
+
+/*Select from which string set 
+next char will be taken*/
+/*Get value from 1 to 4
+both included*/
+int selectRandomSet(){
+	srand(time(NULL));
+	int k=rand()%5;
+	if(k==0){
+		k++;
+	}
+	return k;
+}
+
+
+/*Select index of element from the
+list*/
+/*Get value from 0 to 25 both included*/
+int position(){
+	srand(time(NULL));
+	int z=rand()%26;
+	return z;
+}
+
+/*Function to generate password*/
+void getPass(int n) {
+	string pass="";
+	//All the strings to select from
+	string s1 = "abcdefghijklmnopqrstuvwxyz";
+	string s2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+	string s3 = "!@#$%&";
+	string s4 = "0123456789";
+	//Variables to keep count for minimum requirements
+	int upperCount=0,lowerCount=0,digitCount=0,specialCount=0,count=0,pos;
+	while(count<n){
+		pos=position();
+		int selectSet=selectRandomSet();
+		//For first char to be alphabet
+		if(count==0){
+			selectSet=2;
+		}
+		switch(selectSet){
+			case 1:
+				/*Ensure all requirements are fullfilled before inserting
+				extra element of same type*/
+				if(lowerCount==2 && (upperCount==0 || upperCount==1 || digitCount==0 || specialCount==0)){
+					break;
+				}
+				lowerCount++;
+				count++;
+				pass+=s1[pos];
+				break;
+			case 2:
+				if(upperCount==2 && (lowerCount==0 || lowerCount==1 || digitCount==0 || specialCount==0)){
+					break;
+				}
+				upperCount++;
+				count++;
+				pass+=s2[pos];
+				break;
+			case 3:
+				if(specialCount==1 && (lowerCount==0 || lowerCount==1 || digitCount==0 || upperCount==0 || upperCount==1)){
+					break;
+				}
+				//pos modified for specific string size
+				pos=pos%6;
+				specialCount++;
+				count++;
+				pass+=s3[pos];
+				break;
+			case 4:
+				if(digitCount==1 && (lowerCount==0 || lowerCount==1 || specialCount==0 || upperCount==0 || upperCount==1)){
+					break;
+				}
+				pos=pos%10;
+				digitCount++;
+				count++;
+				pass+=s4[pos];
+				break;
+		}
+	}
+	
+	
+	cout << "\n-----------------------------\n";
+	cout << "         Password             \n";
+	cout << "------------------------------\n\n";
+	cout<<pass<<endl;
+}
+
+
+int main(void) {
+	int t=1;
+	while(t!=2) {
+//Lable used to ensure no other input rather than int is used
+lable1:
+		cout << "\n-----------------------------\n";
+		cout << "  Random Password Generator\n";
+		cout << "------------------------------\n\n";
+		cout << "    1. Generate Password"
+		     << "\n";
+		cout << "    2. Exit"
+		     << "\n\n";
+		cout << "Press key 1 to Generate Password and key 2 to exit  : ";
+		cin>>t;
+		/*In case user enters string or other input than int
+		it will throw error and push back user to lable*/
+		if(cin.fail()) {
+			cout<<"Enter a valid choice :(\n";
+			cin.clear();
+			cin.ignore(256,'\n');
+			goto lable1;
+		}
+		if(t==2) {
+			break;
+		} else if(t==1) {
+
+			int n;
+lable2:
+			cout<<"Enter length of password : ";
+			cin>>n;
+			if(cin.fail()) {
+				cout<<"Enter a valid choice :(\n";
+				cin.clear();
+				cin.ignore(256,'\n');
+				goto lable2;
+			}
+			//Check whether password length input is correct or not
+			if(n<7 || n>100) {
+				cout<<"\nPassword length should vary between 7 to 100\n";
+				goto lable2;
+			}
+			getPass(n);
+		//In case of any other int value is entered except 1 and 2
+		} else {
+			cout<<"Enter a valid choice :(\n";
+		}
+	}
+}
+
diff --git a/C++/recursivefactorial.cpp b/C++/recursivefactorial.cpp
new file mode 100644
index 00000000..6d379ff5
--- /dev/null
+++ b/C++/recursivefactorial.cpp
@@ -0,0 +1,16 @@
+#include <iostream>
+using namespace std;
+
+int factorial(int number) {
+    if(number == 1) {
+        return 1;
+    } else {
+        return number * factorial(number - 1);
+    }
+}
+
+int main() {
+    //Define a number below to find the factorial of it
+    int number = 10;
+    cout << "The factorial of " << number << " is: " << factorial(number) << endl;
+}
diff --git a/C++/spiralmatrix.cpp b/C++/spiralmatrix.cpp
new file mode 100644
index 00000000..321e9c2b
--- /dev/null
+++ b/C++/spiralmatrix.cpp
@@ -0,0 +1,56 @@
+class Solution
+{
+public:
+    vector<int> spiralOrder(vector<vector<int>> &matrix)
+    {
+
+        int row = matrix.size();    //  size of row
+        int col = matrix[0].size(); // size of column
+
+        int row_start = 0; // row starting
+        int col_start = 0; // column starting
+
+        int row_end = row - 1; // row ending
+        int col_end = col - 1; //  column ending
+
+        vector<int> spiral; //  declaration of the new vector spiral
+
+        while ( row_start <= row_end && col_start <= col_end)
+        {
+            for (int j = col_start; j <= col_end; j++)
+            {
+                spiral.push_back(matrix[row_start][j]);
+            }
+
+            row_start++; // increment of  row by 1 to point at next row
+
+            for (int j = row_start; j <= row_end; j++)
+            {
+                spiral.push_back(matrix[j][col_end]);
+            }
+            col_end--; // to decrease the column end by 1 to point at rear element
+
+            if( row_start <= row_end )
+            {
+                for (int j = col_end ; j >= col_start ; j--)
+                {
+                    spiral.push_back (matrix[row_end][j]);
+                }
+            }
+            row_end--; // to decrease the row pointer at end by 1 
+
+            if ( col_start <= col_end )
+            { 
+                for (int j = row_end ; j >= row_start ; j--)
+                {
+                    spiral.push_back ( matrix[j][col_start] ) ;
+                }
+
+            }
+
+            col_start++;
+        }
+
+        return spiral ; 
+    }
+};
\ No newline at end of file
diff --git a/C++/string_to_binary_converter.cpp b/C++/string_to_binary_converter.cpp
new file mode 100644
index 00000000..c8514fdb
--- /dev/null
+++ b/C++/string_to_binary_converter.cpp
@@ -0,0 +1,35 @@
+// This program converts a string to its binary form as per ASCII.
+// i.e. You can check how your name is actually read by the computer.
+
+#include<iostream>
+#include<cstring>
+#include<cmath>
+using namespace std;
+
+void binary(int a)
+{
+    int two[8];
+
+    for(int i=7; i>=0; i--)
+    {
+        two[i] = a / int(pow(2,i));
+        a = a % int(pow(2,i));
+    }
+    
+    for(int i=7; i>=0 ; i--)
+    {
+        cout<<two[i];
+    }
+}
+
+int main(){
+    string s;
+    cout<<"Enter string :- "<<endl;
+    cin>>s;
+    
+    for(int i = 0; i< s.length(); i++)
+    {
+        binary(int(s[i]));
+    }
+    return 0;
+}
diff --git a/C++/sum,_digit.cpp b/C++/sum,_digit.cpp
new file mode 100644
index 00000000..b90394f7
--- /dev/null
+++ b/C++/sum,_digit.cpp
@@ -0,0 +1,12 @@
+#include <bits/stdc++.h>
+using namespace std;
+
+
+int digit_sum(int n){
+  if(n==0) return 0;
+  return digit_sum(n/10)+(n%10);
+}
+int main(){
+  int n;cin>>n;
+  cout<<digit_sum(n);
+}
\ No newline at end of file
diff --git a/C++/virtualFunction.cpp b/C++/virtualFunction.cpp
new file mode 100644
index 00000000..76254932
--- /dev/null
+++ b/C++/virtualFunction.cpp
@@ -0,0 +1,45 @@
+// Program to implement virtual function.
+
+#include <iostream>
+
+using namespace std;
+
+class Base {
+    public:
+        void display() {
+            cout<< "Display Base function.\n";
+        }
+        
+        virtual void show() {
+            cout<< "Show Base function.\n\n";
+        }
+};
+
+class Derived: public Base {
+    public: 
+        void display() {
+            cout<< "Display Base function.\n";
+        }
+        
+        void show() {
+            cout<< "Show Base function.\n";
+        }
+};
+
+int main() {
+    Base B;
+    Derived D;
+    Base *bptr;
+    
+    cout<<"bptr points to Base\n";
+    bptr = &B;
+    bptr->display();
+    bptr->show();
+    
+    cout<<"bptr points to Derived\n";
+    bptr = &D;
+    bptr->display();
+    bptr->show();
+  
+  return 0;
+}
\ No newline at end of file
diff --git a/C++/words counter.cpp b/C++/words counter.cpp
new file mode 100644
index 00000000..88636222
--- /dev/null
+++ b/C++/words counter.cpp	
@@ -0,0 +1,20 @@
+// This program counts the number of words in a sentence
+
+#include<iostream>
+#include<string>
+using namespace std;
+
+int main(){
+    string sentence;
+    cout<<"Enter your sentence :-"<<endl;
+    getline(cin, sentence);
+
+    int count = 0;
+    for(int i=0; i<sentence.length(); i++)
+    {
+        if(sentence[i]==' ')
+            count++;
+    }
+    cout<<"\n\nThe number of words in your sentence is "<<count+1;
+    return 0;
+}
diff --git a/C/A crazy pyramid program for c.c b/C/A crazy pyramid program for c.c
new file mode 100644
index 00000000..7720382e
--- /dev/null
+++ b/C/A crazy pyramid program for c.c	
@@ -0,0 +1,71 @@
+// n'th line has n number of stars
+//       *
+//     *   *
+//   *   *   *
+// *   *   *   *
+#include<stdio.h>
+#include<conio.h>
+void main()
+{
+    int row,col,h;
+    printf("enter height\n");
+    scanf("%d",&h);
+    if(h%2!=0)
+    {
+        for(row=0;row<h;row++)
+        {
+           for(col=1;col<(2*h);col++)
+           {
+               if((col>=h-row)&&(col<=h+row) || (col>h-row)&&(col<h+row))
+                {
+                    if(((col%2==0)&&(row%2==0))||((col%2!=0)&&(row%2!=0)))
+                    {
+                        printf("  ");
+                    }
+                    else if(col==row)
+                    {
+                        printf("* ");
+                    }
+                    else{
+                        printf("* ");
+                    }
+                }
+               else
+                {
+                    printf("  ");
+                }  
+           }
+        printf("\n"); 
+        }
+    }
+    else
+    { 
+        for(row=1;row<=h;row++)
+        {
+           for(col=1;col<(2*h);col++)
+           {
+               if((col>h-row)&&(col<h+row))
+                {
+                    if(((col%2==0)&&(row%2==0))||((col%2!=0)&&(row%2!=0)))
+                    {
+                        printf("  ");
+                    }
+                    else if(col==row)
+                    {
+                        printf("* ");
+                    }
+                    else
+                    {
+                        printf("* ");
+                    }
+                }
+               else
+                {
+                    printf("  ");
+                }  
+           }
+        printf("\n"); 
+        }
+
+    }
+}
diff --git a/C/Area_of_Circle.c b/C/Area_of_Circle.c
index d38ffef5..38ada076 100644
--- a/C/Area_of_Circle.c
+++ b/C/Area_of_Circle.c
@@ -1,8 +1,20 @@
 #include<stdio.h>
 void main()
-{ float a,r;
-printf("Enter the Radius : ");
-scanf("%f",&r);
-a=3.14*r*r;
-printf("Area is %f",a);
+{ 
+    float a=0.0,r;
+    char c;
+  
+  do{
+    printf("Enter the Radius : ");
+    scanf("%f",&r);
+    a=3.14*r*r;
+    printf("Area is %f",a);
+    
+    printf("\nDo you want to continue (Y/N)?");
+    scanf(" %c", &c);
+    
+  }while (c=='y'|| c=='Y'); 
+           
+   printf("Thnak you!");
+           
 }
diff --git a/C/README.md b/C/README.md
new file mode 100644
index 00000000..a68c582e
--- /dev/null
+++ b/C/README.md
@@ -0,0 +1,2 @@
+## Put Simple C Questions along with Code in this folder
+### Don't put DSA codes here
diff --git a/C/convert binary fraction to decimal fraction.c b/C/convert binary fraction to decimal fraction.c
new file mode 100644
index 00000000..0aee1639
--- /dev/null
+++ b/C/convert binary fraction to decimal fraction.c	
@@ -0,0 +1,28 @@
+#include <stdio.h>
+#include <math.h>
+void main()
+{
+    int i,d,k,j=0,flag=0,c;
+    double b,x,sum=0,s=0,a;
+    printf("Enter a Binary fraction no:");
+    scanf("%lf",&b);
+    d=(int)b;
+    for(i=b;i>0;i=i/10)
+    {
+        k=i%10;
+        sum=sum+k*pow(2,j);
+        ++j;
+    }
+    j=1;
+    x=b-d;
+    while(flag==0)
+    {
+        a=x*10;
+        c=a;
+        s=s+(c/pow(2,j++));
+        x=a-c;
+        if(j==6 || x==0)
+            flag=1;
+    }
+    printf("Decimal fraction is %lf",sum+s);
+}
diff --git a/C/factorialrecur.c b/C/factorialrecur.c
new file mode 100644
index 00000000..ef0931a0
--- /dev/null
+++ b/C/factorialrecur.c
@@ -0,0 +1,18 @@
+#include<stdio.h>
+int main()
+{
+    int num,factorial;
+    int fact_calc(int);
+    printf("Enter a number:");
+    scanf("%d",&num);
+    factorial=fact_calc(num);
+    printf("\n The factorial of number %d=%d",num,factorial);
+    return 0;
+}
+int fact_calc(int n)
+{
+if (n==1)
+return 1;
+else
+return n*fact_calc(n-1);
+}
\ No newline at end of file
diff --git a/C/find_element_in_array.c b/C/find_element_in_array.c
new file mode 100644
index 00000000..4afb90b2
--- /dev/null
+++ b/C/find_element_in_array.c
@@ -0,0 +1,29 @@
+//Finding an element in an array
+#include<stdio.h>
+void main()
+{
+  int a[25],size,k,i,c=0;
+  printf("Enter the size of the array\t");
+  scanf("%d",&size);
+  for(i=0;i<size;i++)
+  {
+     printf("\nEnter the %d element\t",i+1);
+     scanf("%d",&a[i]);
+   }
+  printf("Enter the element to find in an array\t");
+  scanf("%d",&k);
+  for(i=0;i<size;i++)
+  {
+    if(a[i]==k)
+     {
+       c++;
+     } 
+  }
+  if(c>=1)
+  {
+   printf("Element %d is present",k);
+   }
+  else if(c==0)
+    printf("Element %d is not present",k);
+
+}
diff --git a/C/helloworld.c b/C/helloworld.c
deleted file mode 100644
index 4bb4d109..00000000
--- a/C/helloworld.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <stdio.h>
-
-int main() {
-   
-   printf("Hello, World!");
-   return 0;
-
-}
diff --git a/C/helloworld.exe b/C/helloworld.exe
deleted file mode 100644
index 22f2e10a..00000000
Binary files a/C/helloworld.exe and /dev/null differ
diff --git a/C/infixToPostfix.c b/C/infixToPostfix.c
new file mode 100644
index 00000000..ca110ea8
--- /dev/null
+++ b/C/infixToPostfix.c
@@ -0,0 +1,77 @@
+#include<stdio.h>
+#include<string.h>
+#include<stdlib.h>
+#define MAXSIZE 20
+struct stack{
+    int top;
+    char arr[MAXSIZE];
+};
+void Push(struct stack *p,char ch)
+{
+    if(p->top==MAXSIZE-1)
+        printf("Stack is full");
+    else
+        p->arr[++(p->top)]=ch;
+}
+char Pop(struct stack *p)
+{
+    if (p->top==-1)
+        printf("Stack is empty");
+    else
+    {
+        return p->arr[(p->top)--];
+    }
+}
+int Precedence(char ch)
+{
+    if(ch=='^' || ch=='$' )
+        return 3;
+    else if(ch=='*' || ch=='/' || ch=='%')
+        return 2;
+    else if(ch=='+' || ch=='-')
+        return 1;
+    else if(ch=='(')
+        return 0;
+}
+void Create(struct stack *p)
+{
+    p->top=-1;
+}
+void main()
+{
+    char Infix[MAXSIZE],Postfix[MAXSIZE];
+    int i=0,j=0,l;
+    struct stack s;
+    Create(&s);
+    printf("Enter an infix expression:");
+    scanf("%[^\n]s",Infix);
+    l=strlen(Infix);
+    Infix[l]=')';
+    Infix[l+1]='\0';
+    Push(&s,'(');
+    while(Infix[i]!='\0')
+    {
+        if((Infix[i]>='A' && Infix[i]<='Z') || (Infix[i]>='a' && Infix[i]<='z'))
+        {
+            Postfix[j++]=Infix[i];
+        }
+        else if(Infix[i]=='(')
+                    Push(&s,'(');
+        else if(Infix[i]==')')
+        {
+            while(s.arr[s.top]!='(')
+                      Postfix[j++]=Pop(&s);
+                  Pop(&s);
+        }
+        else
+        {
+                while(Precedence(s.arr[s.top])>=Precedence(Infix[i]))
+                    Postfix[j++]=Pop(&s);
+                if(Precedence(s.arr[s.top])<Precedence(Infix[i]))
+                    Push(&s,Infix[i]);
+        }
+        i++;
+    }
+    Postfix[j]='\0';
+    printf("\nPostfix expression=%s",Postfix);
+}
diff --git a/C/matrixmult.c b/C/matrixmult.c
new file mode 100644
index 00000000..f156c5f6
--- /dev/null
+++ b/C/matrixmult.c
@@ -0,0 +1,51 @@
+#include <stdio.h>
+ 
+int main()
+{
+  int m, n, p, q, c, d, k, sum = 0;
+  int first[10][10], second[10][10], multiply[10][10];
+ 
+  printf("Enter number of rows and columns of first matrix\n");
+  scanf("%d%d", &m, &n);
+  printf("Enter elements of first matrix\n");
+ 
+  for (c = 0; c < m; c++)
+    for (d = 0; d < n; d++)
+      scanf("%d", &first[c][d]);
+ 
+  printf("Enter number of rows and columns of second matrix\n");
+  scanf("%d%d", &p, &q);
+ 
+  if (n != p)
+    printf("The multiplication isn't possible.\n");
+  else
+  {
+    printf("Enter elements of second matrix\n");
+ 
+    for (c = 0; c < p; c++)
+      for (d = 0; d < q; d++)
+        scanf("%d", &second[c][d]);
+ 
+    for (c = 0; c < m; c++) {
+      for (d = 0; d < q; d++) {
+        for (k = 0; k < p; k++) {
+          sum = sum + first[c][k]*second[k][d];
+        }
+ 
+        multiply[c][d] = sum;
+        sum = 0;
+      }
+    }
+ 
+    printf("Product of the matrices:\n");
+ 
+    for (c = 0; c < m; c++) {
+      for (d = 0; d < q; d++)
+        printf("%d\t", multiply[c][d]);
+ 
+      printf("\n");
+    }
+  }
+ 
+  return 0;
+}
\ No newline at end of file
diff --git a/C/norm_matrix.c b/C/norm_matrix.c
new file mode 100644
index 00000000..dec20835
--- /dev/null
+++ b/C/norm_matrix.c
@@ -0,0 +1,81 @@
+/* find the norm of a matrix using dynamic memory allocation*/
+#include<stdio.h>  
+#include<stdlib.h> 
+#include<math.h> 
+
+
+/*The driver code*/
+int main(void)
+{    
+    int **array, *norm;        
+    int i, j, m, n, max;    
+    
+    /*Taking the number of rows and colums from the user*/
+    printf("Enter the number of rows and cols of matrix:");        
+    scanf("%d%d", &m,&n);    
+    
+    /*dynamic memory allocation*/
+    array=(int **)malloc(m*sizeof(int *));
+    
+    for(i=0;i<m;i++)           
+    array[i]=(int *)malloc(n*sizeof(int));  
+    
+    /*dynamic memory allocation of the normal*/
+    norm=(int *)malloc(n*sizeof(int));  
+    
+    for(i=0;i<n;i++)           
+    norm[i]=0;        
+    
+    /*Taking the elements of the 2D matrix*/
+    printf("Enter the elements of the matrix:");        
+    for(i = 0; i < m; i++) 
+    {                
+        for(j = 0; j < n; j++) 
+        {                        
+            scanf("%d", &array[i][j]);                
+            
+        }        
+        
+    }        
+    
+    /*Algorithm for normal separation*/
+    for(i = 0; i <m; i++) 
+    {                
+        for(j = 0; j <n; j++) 
+        {                        
+            norm[i] = norm[i] + array[j][i];
+                
+            
+        }        
+        
+    }       
+    
+    max = norm[0];   
+    
+    /*Base case of max*/
+    for(i = 0; i <m; i++) 
+    {                
+        if(max < norm[i]) 
+        {                        
+            max = norm[i];                
+            
+        }        
+        
+    }     
+    
+    
+    /*Max of each colums */
+    printf("Max(");     
+    
+    for(i = 0; i < n; i++) 
+    {                
+        printf("%d ", norm[i]);        
+        
+    }        
+    printf(")\n"); 
+    
+    /*Final output*/
+    printf("Norm of the given matrix is %d\n", max);        
+    return 0;  
+    
+}
diff --git a/C/pattern/Pyramid.c b/C/pattern/Pyramid.c
new file mode 100644
index 00000000..7720382e
--- /dev/null
+++ b/C/pattern/Pyramid.c
@@ -0,0 +1,71 @@
+// n'th line has n number of stars
+//       *
+//     *   *
+//   *   *   *
+// *   *   *   *
+#include<stdio.h>
+#include<conio.h>
+void main()
+{
+    int row,col,h;
+    printf("enter height\n");
+    scanf("%d",&h);
+    if(h%2!=0)
+    {
+        for(row=0;row<h;row++)
+        {
+           for(col=1;col<(2*h);col++)
+           {
+               if((col>=h-row)&&(col<=h+row) || (col>h-row)&&(col<h+row))
+                {
+                    if(((col%2==0)&&(row%2==0))||((col%2!=0)&&(row%2!=0)))
+                    {
+                        printf("  ");
+                    }
+                    else if(col==row)
+                    {
+                        printf("* ");
+                    }
+                    else{
+                        printf("* ");
+                    }
+                }
+               else
+                {
+                    printf("  ");
+                }  
+           }
+        printf("\n"); 
+        }
+    }
+    else
+    { 
+        for(row=1;row<=h;row++)
+        {
+           for(col=1;col<(2*h);col++)
+           {
+               if((col>h-row)&&(col<h+row))
+                {
+                    if(((col%2==0)&&(row%2==0))||((col%2!=0)&&(row%2!=0)))
+                    {
+                        printf("  ");
+                    }
+                    else if(col==row)
+                    {
+                        printf("* ");
+                    }
+                    else
+                    {
+                        printf("* ");
+                    }
+                }
+               else
+                {
+                    printf("  ");
+                }  
+           }
+        printf("\n"); 
+        }
+
+    }
+}
diff --git a/C/pattern/README.md b/C/pattern/README.md
new file mode 100644
index 00000000..1c36e353
--- /dev/null
+++ b/C/pattern/README.md
@@ -0,0 +1,21 @@
+## 🧐 What are Pattern Programs?
+
+Pattern programs are nothing just patterns which consists of numbers, alphabets, symbols which are printed in a particular form. The solutions to these kind of programs are listed out using conditional loops.
+
+## 📕 Why to study Pattern Programs?
+
+* Pattern programs best means to study the working of looping structures in general purpose programming languages.
+
+* It helps beginners to visualise how every iteration in a loop works.
+
+* Also popularly asked in campus placements & job interviews.
+
+## Links to find C Pattern Programs 
+
+* [Star Pattern](https://codeforwin.org/2015/07/star-patterns-program-in-c.html)
+
+* [Number Pattern](https://techstudy.org/CLanguage/Pattern)
+
+* [Alphabet Pattern](https://codedost.com/c/character-alphabet-patterns-c/)
+
+* [Video](https://www.youtube.com/watch?v=hWhMAoBhi7M)
diff --git a/C/printf.c b/C/printf.c
deleted file mode 100644
index 36ca5067..00000000
--- a/C/printf.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-int main()
-{
-    int favNum = 73;
-    char mychar = 'u';
-    printf ("My favorite %c is %f", "number", mychar, favNum);
- 
-    return 0;
-}
\ No newline at end of file
diff --git a/Csharp/README.md b/Csharp/README.md
new file mode 100644
index 00000000..754092e5
--- /dev/null
+++ b/Csharp/README.md
@@ -0,0 +1 @@
+##Place questions, new topics or additions here!  
diff --git a/Csharp/datatypes.cs b/Csharp/datatypes.cs
new file mode 100644
index 00000000..3f444433
--- /dev/null
+++ b/Csharp/datatypes.cs
@@ -0,0 +1,28 @@
+using System;
+
+namespace examples
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            //In this page we will cover some different data types you will find in C#
+            
+            //Variable declaration is similar to other languages, but we need to declare data types.
+
+            string name = "Nash"; //string of characters, double quotes
+
+            char letter = 'a';  //Single letter, single quotes
+
+            bool valid = true;//false
+
+            int number = 1; //WHOLE numbers +- -2,147,483,648 to 2,147,483,647
+            
+            long bigNumber; //Stores large numbers, +- 9,223,372,036,854,775,808
+            
+            float smallFraction; //FRACTIONAL 6 - 7 decimal points.
+            
+            double fraction = 1.5; //FRACTIONAL up to 15 decimal points.
+        }
+    }
+}
diff --git a/Csharp/helloworld.cs b/Csharp/helloworld.cs
new file mode 100644
index 00000000..fd3a66f6
--- /dev/null
+++ b/Csharp/helloworld.cs
@@ -0,0 +1,19 @@
+using System;
+
+namespace examples
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            //This is a basic example of hello world and the boiler plate for C#
+            Console.WriteLine("Hello World!"); 
+            //Console.WriteLine <-- prints to console on new line. 
+            
+            Console.Write("Hello");
+            Console.Write("World!");
+            //Console.Write will also print to console, but not on a new line.
+            // This will still out put "Hello World!"
+        }
+    }
+}
diff --git a/DSA/Array implementation in C/README.MD b/DSA/Array implementation in C/README.MD
new file mode 100644
index 00000000..145251a0
--- /dev/null
+++ b/DSA/Array implementation in C/README.MD	
@@ -0,0 +1,21 @@
+# Array implementation in C
+
+> Array implementation is done using C language  
+> Features include traversal, insertion & deletion
+
+# Why only C ?
+
+- C is the mother of all computer languages  
+- It's the most basic programming language which all coders, programmers as well as hackers should know.  
+- C language engages with kernel/shell of your computer programs which makes it fast to compile & run  
+- If you know C language, maximum programming languages you can learn by your own
+- The most important thing, the environment where you run your code(i.e. compiler/interpreter) is also written in C language
+
+# Files
+
+1. Traversal code can be seen [here](https://github.com/nitin30kumar/Programming-Basics/blob/main/DSA/Array%20implementation%20in%20C/traversal.c).
+2. Insertion code can be seen [here](https://github.com/nitin30kumar/Programming-Basics/blob/main/DSA/Array%20implementation%20in%20C/insertion.c).
+3. Deletion code can be seen [here](https://github.com/nitin30kumar/Programming-Basics/blob/main/DSA/Array%20implementation%20in%20C/deletion.c).
+
+__This is the full array implementation in C language__
+
diff --git a/DSA/Array implementation in C/deletion.c b/DSA/Array implementation in C/deletion.c
new file mode 100644
index 00000000..c8430e3e
--- /dev/null
+++ b/DSA/Array implementation in C/deletion.c	
@@ -0,0 +1,25 @@
+#include <stdio.h>
+void display(int arr[], int size){
+    for(int i=0; i<size; i++){
+        printf("%d ", arr[i]);
+    }
+    printf("\n");
+}
+
+int deletion(int arr[], int size, int index){
+    for(int i=index; i<=size;i++){
+        arr[i]=arr[i+1];
+    }
+    return 1;
+}
+
+int main() {
+    int arr[100]={1,5,9,24,44,67,78};
+    int size=7, element=11, index=3;
+    
+    printf("Deletion here ... ");
+    deletion(arr, size, index);
+    size-=1;
+    display(arr, size);
+    return 0;
+}
diff --git a/DSA/Array implementation in C/insertion.c b/DSA/Array implementation in C/insertion.c
new file mode 100644
index 00000000..9c2ddd36
--- /dev/null
+++ b/DSA/Array implementation in C/insertion.c	
@@ -0,0 +1,31 @@
+// insertion and deletion of linear array ------------------------------------------
+#include <stdio.h>
+void display(int arr[], int size){
+    for(int i=0; i<size; i++){
+        printf("%d ", arr[i]);
+    }
+    printf("\n");
+}
+
+int insertion(int arr[], int element, int size, int capacity, int index){
+    if(size>capacity){
+        return -1;
+    }
+    for(int i=size; i>=index; i--){
+        arr[i+1]=arr[i];
+    }
+    arr[index]=element;
+    return 1;
+}
+
+int main() {
+    int arr[100]={1,5,9,24,44,67,78};
+    int size=7, element=11, index=3;
+    printf("Insertion here ...");
+    insertion(arr, element, size, 100, index);
+    size+=1;
+    display(arr, size);
+    return 0;
+}
+
+// ------------------------------------------------------
diff --git a/DSA/Array implementation in C/traversal.c b/DSA/Array implementation in C/traversal.c
new file mode 100644
index 00000000..a1281396
--- /dev/null
+++ b/DSA/Array implementation in C/traversal.c	
@@ -0,0 +1,15 @@
+// Traversing an array
+#include<stdio.h>
+#include<stdlib.h>
+
+void traverse(int arr[], int size){
+    for(int i=0; i<size; i++)
+        printf("%d ",arr[i]);
+}
+
+int main(){
+    int arr[100]={1, 4, 6, 9, 15};
+    int size=5;
+    traverse(arr, size);
+    return 0;
+}
diff --git a/DSA/Basic-DSA-Questions/Binary tree to doubly linked list/Binary tree to Doubly linkedlist.cpp b/DSA/Basic-DSA-Questions/Binary tree to doubly linked list/Binary tree to Doubly linkedlist.cpp
new file mode 100644
index 00000000..6151a6de
--- /dev/null
+++ b/DSA/Basic-DSA-Questions/Binary tree to doubly linked list/Binary tree to Doubly linkedlist.cpp	
@@ -0,0 +1,191 @@
+
+#include <bits/stdc++.h>
+using namespace std;
+
+// Tree Node
+struct Node
+{
+    int data;
+    Node* left;
+    Node* right;
+};
+
+// Utility function to create a new Tree Node
+Node* newNode(int val)
+{
+    Node* temp = new Node;
+    temp->data = val;
+    temp->left = NULL;
+    temp->right = NULL;
+    
+    return temp;
+}
+
+// Function to Build Tree
+Node* buildTree(string str)
+{   
+    // Corner Case
+    if(str.length() == 0 || str[0] == 'N')
+            return NULL;
+    
+    // Creating vector of strings from input 
+    // string after spliting by space
+    vector<string> ip;
+    
+    istringstream iss(str);
+    for(string str; iss >> str; )
+        ip.push_back(str);
+        
+    // Create the root of the tree
+    Node* root = newNode(stoi(ip[0]));
+        
+    // Push the root to the queue
+    queue<Node*> queue;
+    queue.push(root);
+        
+    // Starting from the second element
+    int i = 1;
+    while(!queue.empty() && i < ip.size()) {
+            
+        // Get and remove the front of the queue
+        Node* currNode = queue.front();
+        queue.pop();
+            
+        // Get the current node's value from the string
+        string currVal = ip[i];
+            
+        // If the left child is not null
+        if(currVal != "N") {
+                
+            // Create the left child for the current node
+            currNode->left = newNode(stoi(currVal));
+                
+            // Push it to the queue
+            queue.push(currNode->left);
+        }
+            
+        // For the right child
+        i++;
+        if(i >= ip.size())
+            break;
+        currVal = ip[i];
+            
+        // If the right child is not null
+        if(currVal != "N") {
+                
+            // Create the right child for the current node
+            currNode->right = newNode(stoi(currVal));
+                
+            // Push it to the queue
+            queue.push(currNode->right);
+        }
+        i++;
+    }
+    
+    return root;
+}
+
+
+
+
+/* Structure for tree and linked list
+
+struct Node
+{
+    int data;
+    struct Node* left;
+    struct Node* right;
+    
+    Node(int x){
+        data = x;
+        left = right = NULL;
+    }
+};
+ */
+
+// This function should return head to the DLL
+class Solution
+{
+    public: 
+    //Function to convert binary tree to doubly linked list and return it.
+    
+    void btll( Node* root , Node* &head , Node* &prev)
+    {
+       if(root == NULL) return;
+    
+    btll(root->left, head, prev);
+    
+    root->left = prev;
+    if(prev == NULL) head = root;
+    else prev->right = root;
+    
+    prev = root;
+    
+    btll(root->right,head,prev);
+        
+    }
+    Node * bToDLL(Node *root)
+    {
+      Node* head =NULL;
+      Node* prev =NULL;
+      
+      btll(root , head , prev);
+      
+      return head;
+    }
+};
+
+
+
+
+/* Function to print nodes in a given doubly linked list */
+void printList(Node *node)
+{
+    Node *prev = NULL;
+    while (node!=NULL)
+    {
+        cout << node->data << " ";
+        prev = node;
+        node = node->right;
+    }
+    cout << endl;
+    while (prev!=NULL)
+    {
+        cout << prev->data << " ";
+        prev = prev->left;
+    }
+    cout << endl;
+}
+
+void inorder(Node *root)
+{
+   if (root != NULL)
+   {
+       inorder(root->left);
+       cout << root->data;
+       inorder(root->right);
+   }
+}
+
+/* Driver program to test size function*/
+int main()
+{
+  int t;
+  cin >> t;
+  getchar();
+  
+  while (t--)
+  {
+     string inp;
+     getline(cin, inp);
+     Node *root = buildTree(inp);
+     
+     Solution ob; 
+     Node *head = ob.bToDLL(root);
+     printList(head);
+
+  }
+  return 0;
+}
+
+ 
\ No newline at end of file
diff --git a/DSA/Basic-DSA-Questions/FirstMissingPositive/FirstMissingPositive.cpp b/DSA/Basic-DSA-Questions/FirstMissingPositive/FirstMissingPositive.cpp
new file mode 100644
index 00000000..05c51939
--- /dev/null
+++ b/DSA/Basic-DSA-Questions/FirstMissingPositive/FirstMissingPositive.cpp
@@ -0,0 +1,83 @@
+/* 
+Given an unsorted integer array, return the smallest missing positive integer.
+
+You must implement an algorithm that runs in O(n) time and uses constant extra space.
+
+Example 1:
+
+Input: nums = [1,2,0]
+Output: 3
+
+Example 2:
+
+Input: nums = [3,4,-1,1]
+Output: 2
+
+Example 3:
+
+Input: nums = [7,8,9,11,12]
+Output: 1
+
+ 
+
+Constraints:
+
+    1 <= nums.length <= 5 * 105
+    -231 <= nums[i] <= 231 - 1
+
+
+*/
+
+#include<bits/stdc++.h>
+
+using namespace std; 
+
+//Algorithm
+class Solution {
+public:
+    int firstMissingPositive(vector<int>& nums) {
+        int i=0;
+        while(i<nums.size()){
+            int correct = nums[i];
+            if(nums[i] > 0 && nums[i] <= nums.size() && nums[i] != nums[correct - 1]){
+                swap(nums[i], nums[correct - 1]);
+            }else{
+                i++;
+            }
+        }
+        for(int j=0; j < nums.size(); j++){
+            if(nums[j] != j + 1) return j + 1;
+        }
+        return nums.size() + 1;
+    }
+};
+
+// Driver Code Starts.
+int main()
+{
+    int t;
+    cout << "Inpur the number of Test cases :";
+    cin >> t;
+    while (t--)
+    {
+        int n;
+        cout << "Enter the Quantity of Numbers: ";
+        cin >> n;
+        cout << "Input " << n << " Numbers: ";
+        vector<int> nums(n);
+        for (auto &it : nums) {
+            cin >> it;
+        }
+        Solution ob;
+        cout << "The First Missing Positive Integer is " << ob.firstMissingPositive(nums) << endl;
+    }
+    return 0;
+}
+
+/* 
+Approach : Implement Count Sort
+Idea is to swap each positive integer you encounter to its "rightful" place at index (x-1) where x is the integer
+
+Time Complexity : O(n)
+Auxiliary Space : O(1)
+*/
\ No newline at end of file
diff --git a/DSA/Basic-DSA-Questions/Painters Partition/Painters partition.cpp b/DSA/Basic-DSA-Questions/Painters Partition/Painters partition.cpp
new file mode 100644
index 00000000..071a806e
--- /dev/null
+++ b/DSA/Basic-DSA-Questions/Painters Partition/Painters partition.cpp	
@@ -0,0 +1,71 @@
+
+
+#include <bits/stdc++.h>
+using namespace std;
+
+
+
+class Solution
+{
+  public:
+  
+  
+    long long minTime(int a[], int n, int k)
+    {
+         long long int s = 0;
+
+    for(int i = 0; i < n; i++){
+        s = s + a[i];
+    }
+    
+    long long int hi = s, li = s/k;
+    long long int ans = hi;
+    while(li <= hi){
+        long long mid = li + (hi - li)/2;
+        long long int x = 1, y = 0, i = 0;
+        //Now, we will check whether its possible to paint the boards in mid number of days
+        while(i < n){
+            if(y + a[i] <= mid){
+                y = y + a[i];
+            }
+            else if(a[i] > mid){
+                x = k + 1;
+                break;
+            }
+            else{
+                x++;
+                y = a[i];
+            }
+            i++;
+        }
+        if(x <= k){
+            hi = mid - 1;
+            ans = mid;
+        }
+        else{
+            li = mid + 1;
+        }
+    }
+    return ans;
+     
+    }
+};
+
+
+int main()
+{
+	int t;
+	cin>>t;
+	while(t--)
+	{
+		int k,n;
+		cin>>k>>n;
+		
+		int arr[n];
+		for(int i=0;i<n;i++)
+		    cin>>arr[i];
+		Solution obj;
+		cout << obj.minTime(arr, n, k) << endl;
+	}
+	return 0;
+}  
\ No newline at end of file
diff --git a/DSA/Basic-DSA-Questions/Sparse Arrays/Sparse Arrays.cpp b/DSA/Basic-DSA-Questions/Sparse Arrays/Sparse Arrays.cpp
new file mode 100644
index 00000000..36d2c8b1
--- /dev/null
+++ b/DSA/Basic-DSA-Questions/Sparse Arrays/Sparse Arrays.cpp	
@@ -0,0 +1,35 @@
+#include <bits/stdc++.h>
+#include<string.h>
+
+using namespace std;
+
+string ltrim(const string &);
+string rtrim(const string &);
+
+
+vector<int> matchingStrings(vector<string> strings, vector<string> queries) {
+vector<int> ans;
+for(int i=0;i<queries.size();i++){
+    int val=0;
+    for(int j=0;j<strings.size();j++){
+        int res=strcmp(&queries[i][0], &strings[j][0]);
+        if(res==0){
+            val++;
+        }
+    }
+    ans.push_back(val);
+}
+return ans;
+}
+
+int main()
+{
+    vector<string> strings;
+    vector<string> queries;
+    strings={"abcde","sdaklfj","asdjf","na","basdn","sdaklfj","asdjf","na","asdjf","na","basdn","sdaklfj","asdjf"};
+    queries={"abcde","sdaklfj","asdjf","na","basdn"};
+    for(int i=0;i<queries.size();i++){
+       cout<< matchingStrings(strings,queries)[i]<<endl;
+        
+    }
+}
diff --git a/DSA/Basic-DSA-Questions/Sparse Arrays/Sparse Arrays.txt b/DSA/Basic-DSA-Questions/Sparse Arrays/Sparse Arrays.txt
new file mode 100644
index 00000000..85e94f0b
--- /dev/null
+++ b/DSA/Basic-DSA-Questions/Sparse Arrays/Sparse Arrays.txt	
@@ -0,0 +1,14 @@
+There is a collection of input strings and a collection of query strings. For each query string, determine how many times it occurs in the list of input strings. Return an array of the results. 
+
+Function Description
+
+Complete the function matchingStrings in the editor below. The function must return an array of integers representing the frequency of occurrence of each query string in strings.
+
+matchingStrings has the following parameters:
+
+    -string strings[n] - an array of strings to search
+    -string queries[q] - an array of query strings
+
+Returns
+
+    -int[q]: an array of results for each query
diff --git a/DSA/Basic-DSA-Questions/Sub Array Sum/SumOfSubArray.cpp b/DSA/Basic-DSA-Questions/Sub Array Sum/SumOfSubArray.cpp
new file mode 100644
index 00000000..60c3b459
--- /dev/null
+++ b/DSA/Basic-DSA-Questions/Sub Array Sum/SumOfSubArray.cpp	
@@ -0,0 +1,19 @@
+#include<iostream>
+using namespace std;
+
+int main() {
+    int n;
+    cin >> n;
+    int ar[n];
+    for (int x = 0; x < n; x++) {
+        cin >> ar[x];
+    }
+    int sum;
+    for (int x = 0; x < n; x++) {
+        sum = 0;
+        for (int y = x; y < n; y++) {
+            sum += ar[y];
+            cout << sum << " ";
+        }
+    }
+}
\ No newline at end of file
diff --git a/DSA/Basic-DSA-Questions/Sum of Nodes of linked list/UsingRecursion.cpp b/DSA/Basic-DSA-Questions/Sum of Nodes of linked list/UsingRecursion.cpp
new file mode 100644
index 00000000..41f677a6
--- /dev/null
+++ b/DSA/Basic-DSA-Questions/Sum of Nodes of linked list/UsingRecursion.cpp	
@@ -0,0 +1,73 @@
+#include <iostream>
+using namespace std;
+
+class node                                       //node class is created
+{
+public:
+    int data;
+    node *next;
+
+    node(int val)
+    {
+        data = val;
+        next = NULL;
+    }
+};
+
+void insert(node *&head, int val)                //function to insert data in the linked list
+{
+
+    node *n = new node(val);
+
+    if (head == NULL)
+    {
+        head = n;
+        return;
+    }
+
+    node *temp = head;
+
+    while (temp->next != NULL)
+    {
+        temp = temp->next;
+    }
+    temp->next = n;
+}
+
+int sum(node *p)                                 //function to calulate the sum of data of all the nodes of the linked list(by using recursion)
+{
+    if (p)
+        return sum((p->next)) + p->data;
+    else
+        return 0;
+}
+
+void display(node *head)                        //function to display the data of the linked list
+{
+    node *temp = head;
+    while (temp != NULL)
+    {
+        cout << temp->data << "->";
+        temp = temp->next;
+    }
+    cout << "NULL" << endl;
+}
+
+int main()
+{
+    node *head = NULL;
+    int n;
+    cout << "Enter the number of elements you want to insert in linked list: ";
+    cin >> n;
+    for (int i = 0; i < n; i++)
+    {
+        int x;
+        cout << "Enter " << i + 1 << " of the linked list: ";
+        cin >> x;
+        insert(head, x);
+    }
+    cout << "The linked list formed is: " << endl;
+    display(head);
+    cout << "Sum of all the elements of the linked list is: " << sum(head) << endl;
+    return 0;
+}
\ No newline at end of file
diff --git a/DSA/Basic-DSA-Questions/Sum of Nodes of linked list/WithoutRecursion.cpp b/DSA/Basic-DSA-Questions/Sum of Nodes of linked list/WithoutRecursion.cpp
new file mode 100644
index 00000000..d624ece4
--- /dev/null
+++ b/DSA/Basic-DSA-Questions/Sum of Nodes of linked list/WithoutRecursion.cpp	
@@ -0,0 +1,76 @@
+#include <iostream>
+using namespace std;
+
+class node                                       //node class is created
+{
+public:
+    int data;
+    node *next;
+
+    node(int val)
+    {
+        data = val;
+        next = NULL;
+    }
+};
+
+void insert(node *&head, int val)                //function to insert data in the linked list
+{
+
+    node *n = new node(val);
+
+    if (head == NULL)
+    {
+        head = n;
+        return;
+    }
+
+    node *temp = head;
+
+    while (temp->next != NULL)
+    {
+        temp = temp->next;
+    }
+    temp->next = n;
+}
+
+int sum(node *p)                                 //function to calulate the sum of data of all the nodes of the linked list(wihtout recursion)
+{
+    int sum = 0;
+    while (p)
+    {
+        sum = sum + p->data;
+        p = p->next;
+    }
+    return sum;
+}
+
+void display(node *head)                        //function to display the data of the linked list
+{
+    node *temp = head;
+    while (temp != NULL)
+    {
+        cout << temp->data << "->";
+        temp = temp->next;
+    }
+    cout << "NULL" << endl;
+}
+
+int main()
+{
+    node *head = NULL;
+    int n;
+    cout << "Enter the number of elements you want to insert in linked list: ";
+    cin >> n;
+    for (int i = 0; i < n; i++)
+    {
+        int x;
+        cout << "Enter " << i + 1 << " of the linked list: ";
+        cin >> x;
+        insert(head, x);
+    }
+    cout << "The linked list formed is: " << endl;
+    display(head);
+    cout << "Sum of all the elements of the linked list is: " << sum(head);
+    return 0;
+}
\ No newline at end of file
diff --git a/DSA/Basic-DSA-Questions/old saint and three questions/question.txt b/DSA/Basic-DSA-Questions/old saint and three questions/question.txt
new file mode 100644
index 00000000..5454d156
--- /dev/null
+++ b/DSA/Basic-DSA-Questions/old saint and three questions/question.txt	
@@ -0,0 +1,5 @@
+Once upon a time, there was a hero and an old saint. And like in any story with a hero and an old saint, the old saint asked the hero — three questions!
+
+But here's the twist: each question was a binary question, which means that the answer to each must be either a 'Yes' or a 'No', not none, not both. Our hero, who was not so wise in the ways of science, answered them arbitrarily and just hoped he is correct. The old saint, being so old, does not remember which answers were correct. The only thing that he remembers is - how many of them were 'Yes', and how many of them were 'No'. Our hero will pass the test if the old saint cannot distinguish his responses from the set of correct answers i.e. if the number of 'Yes' and 'No' in the responses matches that in the correct answers, regardless of their order.
+
+You are given the answers to each of the three questions, and the responses of the hero to the same. Find whether the hero will be able to pass the old saint's test. 
\ No newline at end of file
diff --git a/DSA/Basic-DSA-Questions/old saint and three questions/solution.cpp b/DSA/Basic-DSA-Questions/old saint and three questions/solution.cpp
new file mode 100644
index 00000000..7d48333a
--- /dev/null
+++ b/DSA/Basic-DSA-Questions/old saint and three questions/solution.cpp	
@@ -0,0 +1,44 @@
+#include <iostream>
+using namespace std;
+
+int main() {
+	int tc;
+	cin>>tc;
+	for (int i = 0; i < tc; i++) {
+	 
+	 int noOfY=0;
+	 int noOfN=0;
+	 for(int i=0;i<3;i++){
+	     int x;
+	     cin>>x;
+	     if(x==0){
+	         noOfN++;
+	         
+	     }
+	     else if(x==1){
+	         noOfY++;
+	     }
+	 }
+	 int noOfAY=0;
+	 int noOfAN=0;
+	 for(int i=0;i<3;i++){
+	     int x;
+	     cin>>x;
+	     if(x==0){
+	         noOfAN++;
+	         
+	     }
+	     else if(x==1){
+	         noOfAY++;
+	     }
+	 }
+	 if(noOfY==noOfAY&&noOfN==noOfAN){
+	     cout<<"Pass"<<endl;
+	     
+	 }
+	 else{
+	     cout<<"Fail"<<endl;
+	 }
+	}
+	return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-C/Algorithms/README.md b/DSA/DSA-C/Algorithms/README.md
new file mode 100644
index 00000000..35f25f66
--- /dev/null
+++ b/DSA/DSA-C/Algorithms/README.md
@@ -0,0 +1 @@
+## Put Algorithm folders here
diff --git a/C/BinarySearch.c b/DSA/DSA-C/BinarySearch.c
similarity index 100%
rename from C/BinarySearch.c
rename to DSA/DSA-C/BinarySearch.c
diff --git a/C/BubbleSort.c b/DSA/DSA-C/BubbleSort.c
similarity index 100%
rename from C/BubbleSort.c
rename to DSA/DSA-C/BubbleSort.c
diff --git a/DSA/DSA-C/Dijkstra's Algorithm.c b/DSA/DSA-C/Dijkstra's Algorithm.c
new file mode 100644
index 00000000..b4babc72
--- /dev/null
+++ b/DSA/DSA-C/Dijkstra's Algorithm.c	
@@ -0,0 +1,94 @@
+#include<stdio.h>
+int d[5],parent[5],vcount;
+int G[5][5]={{999,10,999,5,999},{999,999,1,2,999},{999,999,999,999,4},{999,3,9,999,2},{7,999,6,999,999}};
+void DIJKSTRA(int);
+void INITIALIZE_SINGLE_SOURCE(int);
+void RELAX(int u,int v);
+int EXTRACT_MIN(int *);
+void PrintPath(int,int);
+int main()
+{
+	int i,j,src,dest;
+	printf("Enter the no of vertices in the graph:");
+	scanf("%d",&vcount);
+
+	printf("Enter the source no to start: ");
+	scanf("%d",&src);
+	DIJKSTRA(src);
+	for(i=0;i<vcount;i++)
+	{
+		printf("Parent of %d=%d\n",i,parent[i]);
+	}
+	printf("Enter the destination vertex:");
+	scanf("%d",&dest);
+	printf("Cost to travel from %d to %d is %d.\n",src,dest,d[dest]);
+	printf("Path: ");
+    PrintPath(src,dest);
+	return 0;
+}
+void DIJKSTRA(int src)
+{
+	int i,vc=vcount,u,Q[5];
+	INITIALIZE_SINGLE_SOURCE(src);
+	for(i=0;i<vcount;i++)
+		Q[i]=0;
+	while(vc!=0)
+	{
+        int u = EXTRACT_MIN(Q);
+		for(i=0;i<vcount;i++)
+        {
+            if(G[u][i]!=999)
+            {
+                RELAX(u,i);
+            }
+        }
+		vc--;
+	}
+}
+void INITIALIZE_SINGLE_SOURCE(int src)
+{
+	int i;
+	for(i=0;i<vcount;i++)
+	{
+        d[i]=999;
+        parent[i]=-1;
+	}
+	d[src]= 0;
+}
+void RELAX(int u,int v)
+{
+	if(d[v]>d[u]+G[u][v])
+	{
+        d[v]=d[u]+G[u][v];
+        parent[v] = u;
+	}
+}
+int EXTRACT_MIN(int *p)
+{
+	int i,min=999,x;
+		for(i=0;i<vcount;i++)
+		{
+            if(*(p+i)==0)
+            {
+                if(d[i]<min)
+                {
+                    min=d[i];
+                    x=i;
+                }
+            }
+		}
+    *(p+x)=1;
+	return x;
+}
+void PrintPath(int s,int v)
+{
+    if(v==s)
+        printf("%d ",s);
+    else if(parent[v]==-1)
+        printf("No path from %d to %d",s,v);
+    else
+    {
+        PrintPath(s,parent[v]);
+        printf("%d ",v);
+    }
+}
diff --git a/DSA/DSA-C/Heap_Sort.c b/DSA/DSA-C/Heap_Sort.c
new file mode 100644
index 00000000..f5bb684d
--- /dev/null
+++ b/DSA/DSA-C/Heap_Sort.c
@@ -0,0 +1,74 @@
+#include<stdio.h>
+int heap_size,length;
+void HEAP_SORT(int *);
+void BUILD_MAX_HEAP(int *);
+void MAX_HEAPIFY(int *,int);
+int LEFT(int);
+int RIGHT(int);
+void swap(int *,int *);
+int main()
+{
+    int i,A[30];
+    printf("Enter the number of elements: ");
+    scanf("%d",&length);
+    printf("Enter %d number of elements: ",length);
+    for(i=0;i<length;i++)
+        scanf("%d",&A[i]);
+    printf("\nBefore sorting the elements are: ");
+    for(i=0;i<length;i++)
+        printf("%d ",A[i]);
+    HEAP_SORT(A);
+    printf("\nAfter sorting the elements are: ");
+    for(i=0;i<length;i++)
+        printf("%d ",A[i]);
+    return 0;
+}
+void HEAP_SORT(int *p)
+{
+	int i;
+	BUILD_MAX_HEAP(p);
+	for(i=length-1;i>=1;i--)
+	{
+        swap((p),(p+i));
+        heap_size--;
+        MAX_HEAPIFY(p,0);
+	}
+}
+void BUILD_MAX_HEAP(int *p)
+{
+	int i;
+	heap_size=length-1;
+	for(i=(length-1)/2;i>=0;i--)
+        MAX_HEAPIFY(p,i);
+}
+void MAX_HEAPIFY(int *p,int i)
+{
+	int l,r,largest;
+	l=LEFT(i);
+	r=RIGHT(i);
+	if(l<=heap_size && (*(p+l)>*(p+i)))
+        largest=l;
+    else largest=i;
+    if(r<=heap_size && (*(p+r)>*(p+largest)))
+        largest=r;
+    if(largest!=i)
+       {
+            swap((p+i),(p+largest));
+            MAX_HEAPIFY(p,largest);
+       }
+}
+int LEFT(int i)
+{
+	return(2*i+1);
+}
+int RIGHT(int i)
+{
+	return(2*i+2);
+}
+void swap(int *x,int *y)
+{
+	int temp;
+	temp=*x;
+	*x=*y;
+	*y=temp;
+}
diff --git a/C/Insertionsort.c b/DSA/DSA-C/Insertionsort.c
similarity index 100%
rename from C/Insertionsort.c
rename to DSA/DSA-C/Insertionsort.c
diff --git a/C/Linked List Creation.c b/DSA/DSA-C/Linked List Creation.c
similarity index 100%
rename from C/Linked List Creation.c
rename to DSA/DSA-C/Linked List Creation.c
diff --git a/C/Mergesort.c b/DSA/DSA-C/Mergesort.c
similarity index 100%
rename from C/Mergesort.c
rename to DSA/DSA-C/Mergesort.c
diff --git a/C/Polynomial_linklist.c b/DSA/DSA-C/Polynomial_linklist.c
similarity index 100%
rename from C/Polynomial_linklist.c
rename to DSA/DSA-C/Polynomial_linklist.c
diff --git a/DSA/DSA-C/Queue.h b/DSA/DSA-C/Queue.h
new file mode 100644
index 00000000..ddcec87f
--- /dev/null
+++ b/DSA/DSA-C/Queue.h
@@ -0,0 +1,119 @@
+// a queue header for C language
+#ifndef __QUEUE_LINKEDLIST__
+#define __QUEUE_LINKEDLIST__ 1
+
+#include <stdio.h>
+#include <stdlib.h>
+
+typedef struct Queue // struct to use as external structure of Queue
+{
+    int length; // instead of using a function, let's just store the length in a variable
+
+    struct Internal
+    { // struct to use as internal structure of Queue
+        int data;
+        struct Internal *next;
+    } * front, *rear, *temp;
+
+} Queue;
+
+
+typedef enum printThe { data = 1, length, both} printThe;
+// enum to use to choose what to print
+
+
+Queue *getNewQueue(void);
+// fuction to allocate required memory for one queue
+// takes nothing
+// returns a pointer to it
+
+Queue *enqueue(Queue* que, const int value);
+// function to add an element into given queue
+// takes a pointer to queue, and a value of type int
+//returns the updated pointer to queue
+
+Queue *dequeue(Queue *que);
+// function to remove an element from given queue
+// takes a pointer to queue
+// returns the updated pointer to queue
+
+void printQueue(Queue *que, const printThe type);
+// function to print the queue data and it's lenght
+// takes a pointer to queue, and a 'type' what to print
+// retunrs nothing
+
+
+Queue *getNewQueue() // fuction to allocate required memory for one queue and returns a pointer to it
+{
+    Queue *tempQueue = (Queue *)malloc(sizeof(Queue));
+    tempQueue->rear = tempQueue->front = tempQueue->temp = NULL;
+    return tempQueue;
+
+    // first external stuct is allocated, then one of three internal pointers are allocated
+    //    so that we get an entire Queue in just one pointer (external struct) using nested structs
+    //    it seems a bit messy at first but comes in handy if we fuck around a few time
+}
+
+Queue *enqueue(Queue *que, const int value) // function to add a element into given queue
+{
+    if (que == NULL)
+    {
+        printf("Error : Given queue does not exist!\n");
+        return que;
+    }
+
+    que->temp = (struct Internal *)malloc(sizeof(struct Internal)); // allocate a fresh memory
+    que->temp->next = NULL;                                         // nullify the pointer
+    que->temp->data = value;                                        // put the value in new memory
+
+    if (que->front == NULL)                 // if no element exist
+        que->front = que->rear = que->temp; // first and last node are same
+
+    else // if one or more element exist
+    {
+        que->rear->next = que->temp; // last->next points to new node
+        que->rear = que->temp;       // new node becomes last node
+    }
+
+    ++que->length; // incrase the length by one
+
+    return que;
+}
+
+Queue *dequeue(Queue *que) // function to remove an element
+{
+    if (que == NULL)
+    {
+        printf("Queue empty!\n");
+        printf("Nothing to remove!\n");
+        return que;
+    }
+
+    que->temp = que->front;
+    que->front = que->front->next;
+    free(que->temp);
+    --que->length;
+
+    return que;
+}
+
+void printQueue(Queue *que, const printThe type) // function to print a queue
+{
+    if (que == NULL)
+    {
+        printf("Queue empty or does not exist!\n");
+        return;
+    }
+
+    if (type & 1)   // condition to print all elements of queue
+    {
+        for (Queue *temp = que; temp->front != NULL; temp->front = temp->front->next)
+            printf("%d --> ", temp->front->data);
+        printf("NULL\n");
+    }
+
+    if (type & 2)   // condition to print only the length 
+        printf("Length : %d\n", que->length);
+}
+
+#endif
diff --git a/C/Quicksort.c b/DSA/DSA-C/Quicksort.c
similarity index 100%
rename from C/Quicksort.c
rename to DSA/DSA-C/Quicksort.c
diff --git a/C/SelectionSort.c b/DSA/DSA-C/SelectionSort.c
similarity index 100%
rename from C/SelectionSort.c
rename to DSA/DSA-C/SelectionSort.c
diff --git a/C/Stack - Linked List.c b/DSA/DSA-C/Stack - Linked List.c
similarity index 100%
rename from C/Stack - Linked List.c
rename to DSA/DSA-C/Stack - Linked List.c
diff --git a/C/counting_sort.c b/DSA/DSA-C/counting_sort.c
similarity index 100%
rename from C/counting_sort.c
rename to DSA/DSA-C/counting_sort.c
diff --git a/C/heap sort.c b/DSA/DSA-C/heap sort.c
similarity index 100%
rename from C/heap sort.c
rename to DSA/DSA-C/heap sort.c
diff --git a/C/priority_queue.c b/DSA/DSA-C/priority_queue.c
similarity index 100%
rename from C/priority_queue.c
rename to DSA/DSA-C/priority_queue.c
diff --git a/DSA/DSA-CPP/Dynamic Programming/DijkstraUsingPriorityQueue.cpp b/DSA/DSA-CPP/Dynamic Programming/DijkstraUsingPriorityQueue.cpp
new file mode 100644
index 00000000..81c8b399
--- /dev/null
+++ b/DSA/DSA-CPP/Dynamic Programming/DijkstraUsingPriorityQueue.cpp	
@@ -0,0 +1,93 @@
+#include <bits/stdc++.h>
+#include <cstdio>
+#include <cstring>
+#include <cmath>
+#include <cstring>
+#include <chrono>
+#include <complex>
+#define endl "\n"
+#define ll long long int
+#define vi vector<int>
+#define vll vector<ll>
+#define vvi vector<vi>
+#define pii pair<int, int>
+#define pll pair<long long, long long>
+#define mod 1000000007
+#define inf 1000000000000000001;
+#define all(c) c.begin(), c.end()
+#define mp(x, y) make_pair(x, y)
+#define mem(a, val) memset(a, val, sizeof(a))
+#define eb emplace_back
+#define f first
+#define s second
+#define pb push_back
+#define pp pop_back
+
+using namespace std;
+
+ll dist[1005];
+ll MAXN = 1000000005;
+void dijk(ll curr, ll n, ll m, vector<pair<ll, ll>> adj[])
+{
+   priority_queue<pair<ll, ll>> pq;
+   mem(dist, MAXN);
+   pq.push({0, curr});
+   dist[curr] = 0;
+
+   while (!pq.empty())
+   {
+      ll xdist, x;
+      xdist = -pq.top().first;
+      x = pq.top().second;
+      pq.pop();
+      for (auto &i : adj[x])
+      {
+         if (xdist + i.second < dist[i.first])
+         {
+            dist[i.first] = xdist + (i.second);
+            pq.push({-dist[i.first], i.first});
+         }
+      }
+   }
+}
+void solve()
+{
+   ll n, m, k;
+   cin >> n >> m;
+   vector<pair<ll, ll>> adj[n];
+   for (ll i = 0; i < m; i++)
+   {
+      ll x, y, w;
+      cin >> x >> y >> w;
+      x -= 1;
+      y -= 1;
+      adj[x].push_back({y, w});
+      adj[y].push_back({x, w});
+   }
+   ll d[n][n];
+   for (ll i = 0; i < n; i++)
+   {
+      dijk(i, n, m, adj);
+      for (ll j = 0; j < n; j++)
+         d[i][j] = dist[j];
+   }
+   // for(int i=0;i<n;i++)
+   // {
+   //    for(int j=0;j<n;j++)cout<<d[i][j]<<" ";
+   //    cout<<endl;
+   // }
+}
+
+int main()
+{
+   std::ios::sync_with_stdio(false);
+   int T = 1;
+   // cin>>T;
+   // cin.ignore(); must be there when using getline(cin, s)
+   while (T--)
+   {
+      solve();
+   }
+
+   return 0;
+}
diff --git a/DSA/DSA-CPP/Dynamic Programming/knapsack_0-1.cpp b/DSA/DSA-CPP/Dynamic Programming/knapsack_0-1.cpp
new file mode 100644
index 00000000..eb5d011b
--- /dev/null
+++ b/DSA/DSA-CPP/Dynamic Programming/knapsack_0-1.cpp	
@@ -0,0 +1,46 @@
+/*
+Question-
+Given weights and values of n items, put these items in a knapsack of 
+capacity W to get the maximum total value in the knapsack. 
+In other words, given two integer arrays val[0..n-1] and wt[0..n-1] 
+which represent values and weights associated with n items respectively.
+Also given an integer W which represents knapsack capacity, 
+find out the maximum value subset of val[] such that sum of the 
+weights of this subset is smaller than or equal to W. 
+You cannot break an item, either pick the complete item or 
+don’t pick it (0-1 property).
+*/
+
+
+
+#include<bits/stdc++.h>
+using namespace std;
+
+int knapsack(int W, vector<int> &wt, vector<int> &val, int n){
+    vector<vector<int>> K(n+1,vector<int>(W+1));
+    for(int i=0;i<=n;i++){
+        for(int w=0;w<=W;w++){
+            if(i==0||w==0){
+                K[i][w]=0;
+            }
+            else if(wt[i-1]<=w){
+                K[i][w]=max(val[i-1]+K[i-1][w-wt[i-1]],K[i-1][w]);
+            }
+            else{
+                K[i][w]=K[i-1][w];
+            }
+        }
+    }
+    return K[n][W];
+}
+
+
+int main(){
+    vector<int> val = { 60, 100, 120 };
+    vector<int> wt = { 10, 20, 30 };
+    int W = 50;
+    int n = sizeof(val) / sizeof(val[0]);
+     
+    cout << knapsack(W, wt, val, n);
+    return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/Graphs/BFS.cpp b/DSA/DSA-CPP/Graphs/BFS.cpp
new file mode 100644
index 00000000..c678035c
--- /dev/null
+++ b/DSA/DSA-CPP/Graphs/BFS.cpp
@@ -0,0 +1,45 @@
+#include <bits/stdc++.h>
+using namespace std;
+
+void BFS()
+{
+    queue<int> q;
+    int a[7][7] = {
+        {0, 1, 1, 1, 0, 0, 0},
+        {1, 0, 0, 1, 0, 0, 0},
+        {1, 0, 0, 1, 1, 0, 0},
+        {1, 1, 1, 0, 1, 0, 0},
+        {0, 0, 1, 1, 0, 1, 1},
+        {0, 0, 0, 0, 1, 0, 0},
+        {0, 0, 0, 0, 1, 0, 0}};
+
+    for (int i = 0; i < 7; i++)
+    {
+        int visited[7] = {0, 0, 0, 0, 0, 0, 0};
+        cout << "BFS through vertex " << i << ":" << endl;
+        cout << i << " ";
+        visited[i] = 1;
+        q.push(i);
+        while (!q.empty())
+        {
+            int x = q.front();
+            q.pop();
+            for (int j = 0; j < 7; j++)
+            {
+                if (a[x][j] == 1 && visited[j] == 0)
+                {
+                    cout << j << " ";
+                    visited[j] = 1;
+                    q.push(j);
+                }
+            }
+        }
+        cout << endl;
+    }
+}
+
+int main()
+{
+    BFS();
+    return 0;
+}
diff --git a/DSA/DSA-CPP/Graphs/DFS.cpp b/DSA/DSA-CPP/Graphs/DFS.cpp
new file mode 100644
index 00000000..07753608
--- /dev/null
+++ b/DSA/DSA-CPP/Graphs/DFS.cpp
@@ -0,0 +1,42 @@
+#include <bits/stdc++.h>
+using namespace std;
+
+int a[7][7] = {
+    {0, 1, 1, 1, 0, 0, 0},
+    {1, 0, 0, 1, 0, 0, 0},
+    {1, 0, 0, 1, 1, 0, 0},
+    {1, 1, 1, 0, 1, 0, 0},
+    {0, 0, 1, 1, 0, 1, 1},
+    {0, 0, 0, 0, 1, 0, 0},
+    {0, 0, 0, 0, 1, 0, 0}};
+int visited[7] = {0, 0, 0, 0, 0, 0, 0};
+
+void DFS(int i)
+{
+    cout << i << " ";
+    visited[i] = 1;
+    for (int j = 0; j < 7; j++)
+    {
+        if (a[i][j] == 1 && !visited[j])
+        {
+            DFS(j);
+        }
+    }
+}
+
+int main()
+{
+    int k;
+    cout << "Enter vertex through which you want to find DFS (0-6): ";
+    cin >> k;
+    if (k >= 0 && k < 7)
+    {
+        cout << "DFS through vertex " << k << ":" << endl;
+        DFS(k);
+    }
+    else
+    {
+        cout << "Invalid vertex" << endl;
+    }
+    return 0;
+}
diff --git a/DSA/DSA-CPP/Linked List Basics/Circular_LL.cpp b/DSA/DSA-CPP/Linked List Basics/Circular_LL.cpp
new file mode 100644
index 00000000..89451dd2
--- /dev/null
+++ b/DSA/DSA-CPP/Linked List Basics/Circular_LL.cpp	
@@ -0,0 +1,105 @@
+#include<bits/stdc++.h>
+using namespace std;
+
+class node{
+    public:
+    int data;
+    node* next;
+    node(int val){
+        data=val;
+        next=NULL;
+    }
+};
+
+void insertAtHead(node* &head,int val){
+    node* n=new node(val);
+
+    if(head==NULL){
+        n->next=n;
+        head=n;
+        return;
+    }
+
+    node* temp=head;
+    while(temp->next!=head){
+        temp=temp->next;
+    }
+
+    temp->next=n;
+    n->next=head;
+    head=n;
+}
+
+void insertAtTail(node* &head,int val){
+
+    if(head==NULL){
+        insertAtHead(head,val);
+        return;
+    }
+
+    node* n=new node(val);
+    node* temp=head;
+
+    while(temp->next!=head){
+        temp=temp->next;
+    }
+    temp->next=n;
+    n->next=head;
+
+}
+
+void deleteAtHead(node* &head){
+    node* temp=head;
+    while(temp->next!=head){
+        temp=temp->next;
+    }
+    node* todelete=head;
+    temp->next=head->next;
+    head=head->next;
+    delete todelete;
+}
+
+void deletion(node* &head,int pos){
+
+    if(pos==1){
+        deleteAtHead(head);
+        return;
+    }
+
+    node* temp=head;
+    int count=1;
+    while(count!=pos-1){
+        temp=temp->next;
+        count++;
+    }
+    node* todelete=temp->next;
+    temp->next=temp->next->next;
+    delete todelete;
+}
+
+void display(node* head){
+    node* temp=head;
+    do{
+        cout<<temp->data<<" ";
+        temp=temp->next;
+    }while(temp!=head);
+    cout<<endl;
+}
+
+int main(){
+    node* head=NULL;
+    int n;
+    cin>>n;
+    int val;
+    while(n--){
+        cin>>val;
+        insertAtTail(head,val);
+    }
+    // insertAtHead(head,6);
+    display(head);
+
+    deletion(head,5);
+    display(head);
+
+    return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/Linked List Basics/CycleFloyd.cpp b/DSA/DSA-CPP/Linked List Basics/CycleFloyd.cpp
new file mode 100644
index 00000000..03181cfa
--- /dev/null
+++ b/DSA/DSA-CPP/Linked List Basics/CycleFloyd.cpp	
@@ -0,0 +1,97 @@
+#include<iostream>
+using namespace std;
+
+class node{
+    public:
+    int data;
+    node* next;
+    node(int val){
+        data=val;
+        next=NULL;
+    }
+};
+
+void insert(node* &head,int val){
+    node* n=new node(val);
+    if(head==NULL){
+        head=n;
+        return;
+    }
+    node* temp=head;
+    while(temp->next!=NULL){
+        temp=temp->next;
+    }
+    temp->next=n;
+}
+
+void makeCycle(node* &head,int pos){
+    node* temp=head;
+    node* startnode;
+
+    int count=1;
+    while(temp->next!=NULL){
+        if(count==pos){
+            startnode=temp;
+        }
+        temp=temp->next;
+        count++;
+    }
+    temp->next=startnode;
+}
+
+bool detectCycle(node* &head){
+    node* slow=head;
+    node* fast=head;
+
+    while(fast!=NULL && fast->next!=NULL){
+        slow=slow->next;
+        fast=fast->next->next;
+        if(fast==slow){
+            return 1;
+        }
+    }
+    return 0;
+}
+
+void removeCycle(node* &head){
+    node* slow=head;
+    node* fast=head;
+
+    do{
+        slow=slow->next;
+        fast=fast->next->next;
+    }while(slow!=fast);
+
+    fast=head;
+    while(slow->next!=fast->next){
+        slow=slow->next;
+        fast=fast->next;
+    }
+    slow->next=NULL;
+}
+
+void display(node* head){
+    node* temp=head;
+    while(temp!=NULL){
+        cout<<temp->data<<" ";
+        temp=temp->next;
+    }
+    cout<<endl;
+}
+
+int main(){
+    node* head=NULL;
+    int n,val;cin>>n;
+    while(n--){
+        cin>>val;
+        insert(head,val);
+    }
+    display(head);
+    makeCycle(head,3);
+    // display(head);
+    cout<<detectCycle(head)<<endl;
+    removeCycle(head);
+    cout<<detectCycle(head)<<endl;
+
+    return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/Linked List Basics/DoublyLL.cpp b/DSA/DSA-CPP/Linked List Basics/DoublyLL.cpp
new file mode 100644
index 00000000..c98a172d
--- /dev/null
+++ b/DSA/DSA-CPP/Linked List Basics/DoublyLL.cpp	
@@ -0,0 +1,94 @@
+#include<iostream>
+using namespace std;
+
+class node{
+    public:
+    int data;
+    node* next;
+    node* prev;
+    node(int val){
+        data=val;
+        next=NULL;
+        prev=NULL;
+    }
+};
+
+void insertAtHead(node* &head,int val){
+    node* n=new node(val);
+    n->next=head;
+    if(head!=NULL){
+        head->prev=n;
+    }
+    head=n;
+}
+
+void insertAtTail(node* &head,int val){
+
+    if(head==NULL){
+        insertAtHead(head,val);
+        return;
+    }
+
+    node* n=new node(val);
+    node* temp=head;
+    while(temp->next!=NULL){
+        temp=temp->next;
+    }
+    temp->next=n;
+    n->prev=temp;
+}
+
+void deleteAtHead(node* &head){
+    node* todel=head;
+    head=head->next;
+    head->prev=NULL;
+
+    delete todel;
+}
+
+void deletion(node* &head,int pos){
+
+    if(pos==1){
+        deleteAtHead(head);
+        return;
+    }
+
+    node* temp=head;
+    int count=1;
+    while(temp!=NULL && count!=pos){
+        temp=temp->next;
+        count++;
+    }
+
+    temp->prev->next=temp->next;
+    if(temp->next!=NULL){
+        temp->next->prev=temp->prev;
+    }
+
+    delete temp;
+}
+
+void display(node* head){
+    node* temp=head;
+    while(temp!=NULL){
+        cout<<temp->data<<" ";
+        temp=temp->next;
+    }
+    cout<<endl;
+}
+
+int main(){
+    node* head=NULL;
+    int n,val;cin>>n;
+    while(n--){
+        cin>>val;
+        insertAtTail(head,val);
+    }
+    display(head);
+    insertAtHead(head,8);
+    insertAtHead(head,9);
+    display(head);
+    deletion(head,2);       //deletion at position 3
+    display(head);
+    return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/Linked List Basics/InsertionSearchDeletion.cpp b/DSA/DSA-CPP/Linked List Basics/InsertionSearchDeletion.cpp
new file mode 100644
index 00000000..c16c5c19
--- /dev/null
+++ b/DSA/DSA-CPP/Linked List Basics/InsertionSearchDeletion.cpp	
@@ -0,0 +1,110 @@
+#include <iostream>
+using namespace std;
+
+class node
+{
+public:
+    int data;
+    node *next;
+
+    node(int val)
+    {
+        data = val;
+        next = NULL;
+    }
+};
+
+void insertAtTail(node *&head, int val)
+{
+
+    node *n = new node(val);
+
+    if (head == NULL)
+    {
+        head = n;
+        return;
+    }
+
+    node *temp = head;
+
+    while (temp->next != NULL)
+    {
+        temp = temp->next;
+    }
+    temp->next = n;
+}
+
+void insertAtHead(node *&head, int val)
+{
+    node *n = new node(val);
+    n->next = head;
+    head = n;
+}
+
+bool search(node *head, int key)
+{
+    node *temp = head;
+    while (temp != NULL)
+    {
+        if (temp->data == key)
+        {
+            return true;
+        }
+        temp = temp->next;
+    }
+    return false;
+}
+
+
+void deleteAtHead(node* &head){ //deletion of 1st element in list
+    node* todelete=head;
+    head=head->next;
+
+    delete todelete;
+}
+void deletion(node*&head,int val){
+    if(head==NULL){          //if list is empty
+        cout<<"List is Empty"<<endl;
+        return;
+    }
+    if(head->next==NULL){   // if only 1 element in list
+        deleteAtHead(head);
+        return;
+    }
+
+
+    node* temp=head;
+    while(temp->next->data!=val){
+        temp=temp->next;
+    }
+    node* todelete=temp->next;
+    temp->next=temp->next->next;
+    delete todelete;
+}
+
+void display(node *head)
+{
+    node *temp = head;
+    while (temp != NULL)
+    {
+        cout << temp->data << "->";
+        temp = temp->next;
+    }
+    cout << "NULL" << endl;
+}
+
+int main()
+{
+    node *head = NULL;
+    insertAtTail(head, 1);
+    insertAtTail(head, 2);
+    insertAtTail(head, 3);
+    display(head);
+    insertAtHead(head, 4);
+    display(head);
+    // cout << search(head, 2);
+    // deletion(head,3);
+    deleteAtHead(head);
+    display(head);
+    return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/Linked List Basics/ReverseAList.cpp b/DSA/DSA-CPP/Linked List Basics/ReverseAList.cpp
new file mode 100644
index 00000000..388b5dc2
--- /dev/null
+++ b/DSA/DSA-CPP/Linked List Basics/ReverseAList.cpp	
@@ -0,0 +1,81 @@
+#include<iostream>
+using namespace std;
+
+class node{
+    public:
+    int data;
+    node* next;
+    node(int val){
+        data=val;
+        next=NULL;
+    }
+};
+
+void insert(node* &head,int val){
+    node* n=new node(val);
+    if(head==NULL){
+        head=n;
+        return;
+    }
+
+    node* temp=head;
+    while(temp->next!=NULL){
+        temp=temp->next;
+    }
+    temp->next=n;
+}
+
+node* reverse(node* &head){
+    node* prevptr=NULL;
+    node* currptr=head;
+    node* nextptr;
+
+    while(currptr!=NULL){
+        nextptr=currptr->next;
+        currptr->next=prevptr;
+
+        prevptr=currptr;
+        currptr=nextptr;
+    }
+    return prevptr;
+}
+
+
+node* reverseRecursive(node* &head){
+
+    if(head==NULL || head->next==NULL){
+        return head;
+    }
+
+    node* newhead=reverseRecursive(head->next);
+    head->next->next=head;
+    head->next=NULL;
+    return newhead;
+}
+
+
+void display(node *head){
+    node* temp=head;
+    while(temp!=NULL){
+        cout<<temp->data<<" ";
+        temp=temp->next;
+    }cout<<endl;
+}
+
+int main(){
+    node* head=NULL;
+    int n,val;cin>>n;
+    while(n--){
+        cin>>val;
+        insert(head,val);
+    }
+    // insert(head,1);
+    // insert(head,2);
+    // insert(head,3);
+    // insert(head,4);
+    display(head);
+    
+    node* newhead=reverseRecursive(head);
+    display(newhead);
+    return 0;
+}
\ No newline at end of file
diff --git a/DSA/Linked_list/Book store mini program/book_store.cpp b/DSA/DSA-CPP/Linked_list/Book store mini program/book_store.cpp
similarity index 100%
rename from DSA/Linked_list/Book store mini program/book_store.cpp
rename to DSA/DSA-CPP/Linked_list/Book store mini program/book_store.cpp
diff --git a/DSA/Linked_list/Circular Linked List/Circular_linked_list.cpp b/DSA/DSA-CPP/Linked_list/Circular Linked List/Circular_linked_list.cpp
similarity index 100%
rename from DSA/Linked_list/Circular Linked List/Circular_linked_list.cpp
rename to DSA/DSA-CPP/Linked_list/Circular Linked List/Circular_linked_list.cpp
diff --git a/DSA/Linked_list/Doubly Linked List/doubly_linked_list.cpp b/DSA/DSA-CPP/Linked_list/Doubly Linked List/doubly_linked_list.cpp
similarity index 100%
rename from DSA/Linked_list/Doubly Linked List/doubly_linked_list.cpp
rename to DSA/DSA-CPP/Linked_list/Doubly Linked List/doubly_linked_list.cpp
diff --git a/DSA/Linked_list/README.md b/DSA/DSA-CPP/Linked_list/README.md
similarity index 100%
rename from DSA/Linked_list/README.md
rename to DSA/DSA-CPP/Linked_list/README.md
diff --git a/DSA/Linked_list/Single Linked List/deletion/delete_single_LL.cpp b/DSA/DSA-CPP/Linked_list/Single Linked List/deletion/delete_single_LL.cpp
similarity index 100%
rename from DSA/Linked_list/Single Linked List/deletion/delete_single_LL.cpp
rename to DSA/DSA-CPP/Linked_list/Single Linked List/deletion/delete_single_LL.cpp
diff --git a/DSA/Linked_list/Single Linked List/insertion/insert_a_node_single_LL.cpp b/DSA/DSA-CPP/Linked_list/Single Linked List/insertion/insert_a_node_single_LL.cpp
similarity index 100%
rename from DSA/Linked_list/Single Linked List/insertion/insert_a_node_single_LL.cpp
rename to DSA/DSA-CPP/Linked_list/Single Linked List/insertion/insert_a_node_single_LL.cpp
diff --git a/DSA/DSA-CPP/Linked_list/Single Linked List/merge_2_sorted_ll.cpp b/DSA/DSA-CPP/Linked_list/Single Linked List/merge_2_sorted_ll.cpp
new file mode 100644
index 00000000..3fa9254f
--- /dev/null
+++ b/DSA/DSA-CPP/Linked_list/Single Linked List/merge_2_sorted_ll.cpp	
@@ -0,0 +1,107 @@
+// WAP TO MERGE TWO SORTED LL
+
+
+// input : 1 2 3 4 -1
+// 6  7 8 9 -1
+
+
+// output : 
+// 1234
+// 6789
+// 12346789
+
+
+// begin of the code :
+#include <bits/stdc++.h>
+using namespace std;
+
+class node{
+public:
+	int data;
+	node*next;
+	node(int data){
+		this->data = data;
+		next = NULL;
+	}
+};
+
+node*takeinput(){
+	int cnt = 0;
+	int data;
+	cin>>data;
+	node*head = NULL;
+	node*tail = NULL;
+	while(data!=-1){
+		// cnt is used to chek the lenght of the linked list...
+		cnt++;
+		node*newnode = new node(data);
+		if(head == NULL){
+			tail = newnode;
+			head = newnode;
+		}
+		else{
+			tail->next = newnode;
+			tail = newnode;
+		}
+		cin>>data;
+
+	}
+	if(cnt<1){
+		head = NULL;
+		return head;
+	}
+	return head;
+}
+
+// merging of the two linked list code is started
+
+node*merging(node*h1 , node*h2){
+	node*tf = NULL; // tf  is for first linked list tail pointing to the last node
+	node*hf = NULL;  //  hf  is for first linked list tail pointing to the first node
+	if((h1->data) <(h2->data)){
+		// h1 = h1->next;
+		tf = h1;hf = h1;
+		h1 = h1->next;
+	}
+	else {
+
+		tf = h2;hf = h2;  // h2  is  for the second l l pointing to the first node 
+		h2 = h2->next; // t2 stands for the last node in the linked list 
+	}
+	while(h1!=NULL && h2!=NULL){
+		if(h1->data <= h2->data){
+			tf->next = h1;
+			tf = h1;
+			h1 = h1->next;
+		}
+		else {
+			tf->next = h2;
+			tf = h2;
+			h2 = h2->next;
+
+		}
+	}
+	if(h1!=NULL){
+		tf->next =h1;
+	}
+	else{
+		tf ->next = h2;
+	}
+	return hf;
+}
+
+// used to print the whole l l 
+
+void print(node*head){
+	while(head!=NULL){
+		cout<<head->data ;
+		head = head->next;
+	}
+}
+int main(){
+	node*h1 = takeinput();
+	node*h2 = takeinput();
+	print(h1);cout<<endl;print(h2);cout<<endl;
+	node*hf = merging(h1,h2);
+	print(hf);
+}
\ No newline at end of file
diff --git a/DSA/Linked_list/Single Linked List/single_LL_0.cpp b/DSA/DSA-CPP/Linked_list/Single Linked List/single_LL_0.cpp
similarity index 100%
rename from DSA/Linked_list/Single Linked List/single_LL_0.cpp
rename to DSA/DSA-CPP/Linked_list/Single Linked List/single_LL_0.cpp
diff --git a/DSA/DSA-CPP/Matrix/DiagonalMatrix.cpp b/DSA/DSA-CPP/Matrix/DiagonalMatrix.cpp
new file mode 100644
index 00000000..20f43961
--- /dev/null
+++ b/DSA/DSA-CPP/Matrix/DiagonalMatrix.cpp
@@ -0,0 +1,83 @@
+// C++ pgm to print diagonal matrix.
+#include <iostream>
+using namespace std;
+
+class DiagonalMatrix
+{
+private:
+    int *A, n;
+
+public:
+    DiagonalMatrix(int n)
+    {
+        this->n = n;
+        A = new int(n);
+    };
+    void set(int i, int j, int x);
+    int get(int i, int j);
+    void display();
+
+    ~DiagonalMatrix();
+};
+
+// Here, i & j denotes the position where element should get inserted!
+void DiagonalMatrix::set(int i, int j, int x)
+{
+    // condition to fill elements in diagonal matrix.
+    if (i == j)
+    {
+        // inserting at proper index.
+        A[j - 1] = x;
+    }
+}
+
+// function used to fetch elements at specific index.
+int DiagonalMatrix::get(int i, int j)
+{
+    if (i == j)
+    {
+        return A[j - 1];
+    }
+    return 0;
+}
+
+// displays diagonal matrix.
+void DiagonalMatrix::display()
+{
+    for (int i = 0; i < n; i++)
+    {
+        for (int j = 0; j < n; j++)
+        {
+            if (i == j)
+            {
+                cout << A[i] << " ";
+            }
+            else
+            {
+                cout << "0 ";
+            }
+        }
+        cout << endl;
+    }
+}
+
+// destructor
+DiagonalMatrix::~DiagonalMatrix()
+{
+    delete[] A;
+}
+
+int main()
+{
+    // pass dimansions
+    DiagonalMatrix DM(4);
+    // pass the values according to dimensions.
+    DM.set(1, 1, 5);
+    DM.set(2, 2, 6);
+    DM.set(3, 3, 7);
+    DM.set(4, 4, 8);
+    DM.display();
+    //cout<<DM.get(4,4);
+
+    return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/Matrix/LowerTriMat.cpp b/DSA/DSA-CPP/Matrix/LowerTriMat.cpp
new file mode 100644
index 00000000..ffb12d2a
--- /dev/null
+++ b/DSA/DSA-CPP/Matrix/LowerTriMat.cpp
@@ -0,0 +1,137 @@
+// C++ pgm to display lower tri. matrix in row & column major both the approches.
+#include <iostream>
+using namespace std;
+
+class LTMatrix
+{
+private:
+    int n;
+    int *A;
+
+public:
+    LTMatrix(int n)
+    {
+        this->n = n;
+        A = new int[n * (n + 1) / 2];
+    }
+    ~LTMatrix() { delete[] A; }
+    void Display(bool row = true);
+    void setRowMajor(int i, int j, int x);
+    void setColMajor(int i, int j, int x);
+    int getRowMajor(int i, int j);
+    int getColMajor(int i, int j);
+    int getN() { return n; }
+};
+
+// set the elements in proper posn for matrix for row major approach!
+void LTMatrix::setRowMajor(int i, int j, int x)
+{
+    if (i >= j)
+    {
+        int index = ((i * (i - 1)) / 2) + j - 1;
+        A[index] = x;
+    }
+}
+
+// set the elements in proper posn for matrix for column major approach!
+void LTMatrix::setColMajor(int i, int j, int x)
+{
+    if (i >= j)
+    {
+        int index = (n * (j - 1) - (((j - 2) * (j - 1)) / 2)) + (i - j);
+        A[index] = x;
+    }
+}
+
+// get the elements from matrix for row major approach!
+int LTMatrix::getRowMajor(int i, int j)
+{
+    if (i >= j)
+    {
+        int index = ((i * (i - 1)) / 2) + j - 1;
+        return A[index];
+    }
+    else
+    {
+        return 0;
+    }
+}
+
+// get the elements from matrix for column major approach!
+int LTMatrix::getColMajor(int i, int j)
+{
+    if (i >= j)
+    {
+        int index = (n * (j - 1) - (((j - 2) * (j - 1)) / 2)) + (i - j);
+        return A[index];
+    }
+    else
+    {
+        return 0;
+    }
+}
+
+// displays the lower tri. matrix.
+void LTMatrix::Display(bool row)
+{
+    for (int i = 1; i <= n; i++)
+    {
+        for (int j = 1; j <= n; j++)
+        {
+            if (i >= j)
+            {
+                if (row)
+                {
+                    cout << getRowMajor(i, j) << " ";
+                }
+                else
+                {
+                    cout << getColMajor(i, j) << " ";
+                }
+            }
+            else
+            {
+                cout << 0 << " ";
+            }
+        }
+        cout << endl;
+    }
+}
+
+int main()
+{
+
+    // can edit these values acc. to dimensions!
+    cout << "Matrix by row major approach: " << endl;
+    LTMatrix rm(4);
+    rm.setRowMajor(1, 1, 1);
+    rm.setRowMajor(2, 1, 2);
+    rm.setRowMajor(2, 2, 3);
+    rm.setRowMajor(3, 1, 4);
+    rm.setRowMajor(3, 2, 5);
+    rm.setRowMajor(3, 3, 6);
+    rm.setRowMajor(4, 1, 7);
+    rm.setRowMajor(4, 2, 8);
+    rm.setRowMajor(4, 3, 9);
+    rm.setRowMajor(4, 4, 10);
+
+    rm.Display();
+    cout << endl;
+
+    cout << "Matrix by column major approach: " << endl;
+    LTMatrix cm(4);
+    cm.setColMajor(1, 1, 1);
+    cm.setColMajor(2, 1, 2);
+    cm.setColMajor(2, 2, 3);
+    cm.setColMajor(3, 1, 4);
+    cm.setColMajor(3, 2, 5);
+    cm.setColMajor(3, 3, 6);
+    cm.setColMajor(4, 1, 7);
+    cm.setColMajor(4, 2, 8);
+    cm.setColMajor(4, 3, 9);
+    cm.setColMajor(4, 4, 10);
+
+    cm.Display(false);
+
+    return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/Matrix/SymmetricMatrix.cpp b/DSA/DSA-CPP/Matrix/SymmetricMatrix.cpp
new file mode 100644
index 00000000..59708b12
--- /dev/null
+++ b/DSA/DSA-CPP/Matrix/SymmetricMatrix.cpp
@@ -0,0 +1,109 @@
+// C++ pgm displays symmetric matrix given any elements in an array.
+#include <iostream>
+using namespace std;
+
+class Symmetric
+{
+private:
+    int *A, n, x;
+
+public:
+    Symmetric(int n);
+    void create(int n);
+    void set(int i, int j, int x);
+    int get(int i, int j);
+    void display();
+    ~Symmetric();
+};
+
+// creates the mat. acc. to dimensions.
+Symmetric::Symmetric(int n)
+{
+    this->n = n;
+    A = new int[n * (n + 1) / 2];
+}
+
+// get the elements by user.
+void Symmetric::create(int n)
+{
+    this->n = n;
+    cout << "Enter the elements for " << n << "x" << n << " matrix: " << endl;
+    for (int i = 1; i <= n; i++)
+    {
+        for (int j = 1; j <= n; j++)
+        {
+            cin >> x;
+            set(i, j, x);
+        }
+    }
+}
+
+// set the elements in matrix at proper index.
+void Symmetric::set(int i, int j, int x)
+{
+    if (i >= j)
+    {
+        // row major mapping
+        A[i * (i - 1) / 2 + j - 1] = x;
+    }
+    else
+        // column major mapping
+        A[j * (j - 1) / 2 + i - 1] = x;
+}
+
+int Symmetric::get(int i, int j)
+{
+    if (i >= j)
+    {
+        // row major mapping
+        return A[i * (i - 1) / 2 + j - 1];
+    }
+    else
+    {
+        // column major mapping
+        return A[j * (j - 1) / 2 + i - 1];
+    }
+}
+
+// display the matrix elements in proper manner.
+void Symmetric::display()
+{
+    for (int i = 1; i <= n; i++)
+    {
+        for (int j = 1; j <= n; j++)
+        {
+            if (i >= j)
+            {
+                cout << A[(i * (i - 1)) / 2 + (j - 1)] << " ";
+            }
+            else
+            {
+                cout << A[j * (j - 1) / 2 + i - 1] << " ";
+            }
+        }
+        cout << endl;
+    }
+}
+
+// destructor
+Symmetric::~Symmetric()
+{
+    delete[] A;
+}
+
+int main()
+{
+    int n;
+    cout << "Enter the dimension for matrix: ";
+    cin >> n;
+
+    Symmetric S1(n);
+    S1.create(n);
+    S1.display();
+    // get the elements at specific index function;
+    // for 3x3 matrix below, for others u can edit!
+    cout << "The element at row 3 & column 2 is: " << S1.get(3, 2) << endl;
+    cout << "The element at row 2 & column 1 is: " << S1.get(2, 1) << endl;
+
+    return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/Matrix/spiralmatrix.cpp b/DSA/DSA-CPP/Matrix/spiralmatrix.cpp
new file mode 100644
index 00000000..5262999d
--- /dev/null
+++ b/DSA/DSA-CPP/Matrix/spiralmatrix.cpp
@@ -0,0 +1,79 @@
+/*
+link :: https://leetcode.com/problems/spiral-matrix/
+*/
+
+class Solution
+{
+public:
+    vector<int> spiralOrder(vector<vector<int>> &matrix)
+    {
+
+        int row = matrix.size();    //  size of row
+        int col = matrix[0].size(); // size of column
+
+        int row_start = 0; // row starting
+        int col_start = 0; // column starting
+
+        int row_end = row - 1; // row ending
+        int col_end = col - 1; //  column ending
+
+        vector<int> spiral; //  declaration of the new vector spiral
+
+        while ( row_start <= row_end && col_start <= col_end)
+        {
+            for (int j = col_start; j <= col_end; j++)
+            {
+                spiral.push_back(matrix[row_start][j]);
+            }
+
+            row_start++; // increment of  row by 1 to point at next row
+
+            for (int j = row_start; j <= row_end; j++)
+            {
+                spiral.push_back(matrix[j][col_end]);
+            }
+            col_end--; // to decrease the column end by 1 to point at rear element
+
+            if( row_start <= row_end )
+            {
+                for (int j = col_end ; j >= col_start ; j--)
+                {
+                    spiral.push_back (matrix[row_end][j]);
+                }
+            }
+            row_end--; // to decrease the row pointer at end by 1 
+
+            if ( col_start <= col_end )
+            { 
+                for (int j = row_end ; j >= row_start ; j--)
+                {
+                    spiral.push_back ( matrix[j][col_start] ) ;
+                }
+
+            }
+
+            col_start++;
+        }
+
+        return spiral ; 
+    }
+};
+
+/*
+
+Constraints ::
+
+m == matrix.length
+n == matrix[i].length
+1 <= m, n <= 10
+-100 <= matrix[i][j] <= 100
+
+Example ::
+
+Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
+Output: [1,2,3,6,9,8,7,4,5]
+
+Input: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
+Output: [1,2,3,4,8,12,11,10,9,5,6,7]
+ 
+*/
\ No newline at end of file
diff --git a/DSA/DSA-CPP/Others/STL.cpp b/DSA/DSA-CPP/Others/STL.cpp
new file mode 100644
index 00000000..8278559d
--- /dev/null
+++ b/DSA/DSA-CPP/Others/STL.cpp
@@ -0,0 +1,293 @@
+#include <bits/stdc++.h>
+using namespace std;
+
+void vectorDemo()
+{
+
+	/*->vectors are dynamic arrays ie expand size as per need automatically (2 times the previous size)
+	->vectors store data in contiguos memory space*/
+
+	//declare a vector
+	//blank vector decleration (initial capacity-0)
+	// vector<int> v;
+	//vector with given size and itializing with a given value(initial capacity-size)
+	// vector<int> v1(size,value);
+	// vector with different values at different index
+	// vector<int> vec = {22, 4, 5, 71, 9, 1, 13, 202, 45};
+	// vector from another vector
+	// vector<int> copied(vec)
+	//vector functions
+	// v.push_back(data);
+	// v.pop_back(data)
+	// sort(vec.begin(), vec.end());
+	// bool present = binary_search(vec.begin(), vec.end(), 3);
+	// cout << present << endl;
+
+	// vector<int>::iterator itr;
+	// one way to taker itr auto itr1 = upper_bound(vec.begin(), vec.end(), 13); //>x
+	// auto itr2 = lower_bound(vec.begin(), vec.end(), 13);					  //>=x
+	// for (int x : vec)
+	// 	cout << x << " ";
+}
+
+void setsDemo()
+{
+	/*->stores data in sorted(ordered)/not sorted(unordered) order
+	->stores unique data (order && unorder)
+	->store duplicate(multiset)*/
+
+	/*	
+	unordered_set<string> s1;
+	set<string> s1;
+	s1.insert("A");
+	s1.insert("B");
+	s1.insert("C");
+	s1.insert("D");
+	for(auto x:s1)
+	{
+		cout<<x<<" ";
+	}
+	auto it=s1.find("B");
+	if(it!=s1.end())
+	{
+		s1.erase(it);
+	}
+	
+	
+	multiset<int> s2;
+	s2.insert(1);
+	s2.insert(12);
+	s2.insert(1);
+	s2.insert(323);
+	s2.insert(12);
+	s2.insert(12);
+	s2.insert(323);
+	s2.insert(2);
+	
+	for(auto x:s2)
+	{
+		cout<<x<<" ";
+	}
+	cout<<endl;
+	auto it=s2.find(12);
+	if(it!=s2.end())
+	{
+		s2.erase(it);
+	}
+	s2.erase(323);
+		for(auto x:s2)
+	{
+		cout<<x<<" ";
+	}
+	*/
+}
+
+void mapsDemo()
+{
+	/*
+	->unique data only	
+	->data structure that stores data in (key,data) format
+	ORDERED MAP
+	->values are stored in sorted order according to keys
+	->internal implementation by red black tree
+	
+	UNORDERED MAP
+	->values are not stored in sorted order
+	->internal implementation by hashing
+	
+	UNORDERED v/s ORDERED:
+	1.inbuilt implementation
+	2.time complexity(map-O(logN) unordered-O(1))
+	3.valid key datatypes(can not use any datatype as key)
+	*/
+
+	/*	map<string,int> m1;
+	
+	for(int i=0;i<5;i++)
+	{
+		string s;
+		cin>>s;
+		m1[s]=i+1;
+	}
+	
+	m1.insert(pair<string,int>("nishant",6));
+	
+	for(auto i:m1)
+	{
+		cout<<i.first<<" "<<i.second<<endl;
+	}
+	
+	auto itr=m1.find("nishant");
+	if(itr==m1.end())
+	{
+		cout<<"MO VALUE\n";
+	}
+	else
+	{
+		cout<<itr->first<<" "<<itr->second<<endl;
+	}
+	
+//	m1.erase("nishant");
+	m1.erase(itr);
+	
+	map<string,int> :: iterator it;
+	for(it=m1.begin();it!=m1.end();it++)
+	{
+		cout<<it->first<<" "<<it->second<<endl;
+	}
+	
+	
+	unordered_map<string,int> m;
+	for(int i=0;i<10;i++)
+	{
+		string s;
+		cin>>s;
+	//	m[s]=m[s]+1;
+		m[s]++;
+	}
+	for(auto x:m)
+	{
+		cout<<x.first<<" "<<x.second<<endl;
+	}*/
+}
+
+void arrayDemo()
+{
+	// Continuos memory allocation
+	// Stores data of same type ie. if int then only int if char only char
+	//static size ie not expand according to need automatically
+
+	//initslize an array
+	array<int, 5> arr = {1, 2, 3, 4, 5};
+
+	//size of arr
+	int size = arr.size();
+
+	//printing arr
+	for (auto x : arr)
+	{
+		cout << x << " ";
+	}
+
+	//check isEmpty
+	int isEmpty = arr.empty();
+
+	//find at index
+	int pos = arr.at(2);
+
+	//first and lsst element
+	int first = arr.front();
+	int last = arr.back();
+}
+
+void dequeDemo()
+{
+	//dynamic size and non continuos memory allocation
+	deque<int> d;
+
+	d.push_back(1);
+	d.push_back(9);
+	d.push_back(8);
+	d.pop_back();
+	d.pop_front();
+	d.push_front(2);
+	d.front();
+	d.back();
+	d.empty();
+	d.erase(d.begin(), d.begin() + 1);
+
+	for (auto i : d)
+	{
+		cout << i << " ";
+	}
+}
+
+void listDemo()
+{
+	//implementaion doubly linked list
+	//not direct access (have to traverse whole list)
+	list<int> l;
+	l.push_back(2);
+	l.push_front(3);
+}
+
+void stackDemo()
+{
+	stack<string> s;
+	s.push("hi");
+	s.push("Hello");
+	s.push("Hola");
+
+	s.pop();
+	s.size();
+	s.empty();
+}
+
+void queueDemo()
+{
+	queue<string> q;
+	q.push("hi");
+	q.pop();
+	q.size();
+	q.empty();
+}
+
+void priorityQueueDemo()
+{
+	//max at Top
+	priority_queue<int> maxAtTop;
+
+	maxAtTop.push(2);
+	maxAtTop.push(21);
+	maxAtTop.push(1);
+	maxAtTop.push(65);
+	maxAtTop.push(24);
+
+	// int n = maxAtTop.size();
+	// for (int i = 0; i < n; i++)
+	// {
+	// 	cout << maxAtTop.top() << " ";
+	// 	maxAtTop.pop();
+	// }
+
+	//min at top
+	priority_queue<int, vector<int>, greater<int>> minAtTop;
+	minAtTop.push(10);
+	minAtTop.push(100);
+	minAtTop.push(1);
+	minAtTop.push(5);
+	minAtTop.push(50);
+
+	int n = minAtTop.size();
+	for (int i = 0; i < n; i++)
+	{
+		cout << minAtTop.top() << " ";
+		minAtTop.pop();
+	}
+}
+
+void algosDemo()
+{
+	// vector<int> vec = {1, 2, 3, 4, 5, 6};
+	// vector<int>::iterator itr;
+	// itr = find(vec.begin(), vec.end(), 4);
+
+	// if (itr != vec.end())
+	// {
+	// 	cout << itr - vec.begin();
+	// }
+
+	//binary search
+	// binary_search(dataType.begin(),dataType.end(),elementToSearch);
+
+	//sorting
+	//sort(dataType.begin(),dataType.end());
+
+	//reverse string
+	// reverse(string,begin(),string.end())
+}
+
+int main(void)
+{
+	algosDemo();
+}
diff --git a/DSA/DSA-CPP/Others/SieveOfEratosthenes.cpp b/DSA/DSA-CPP/Others/SieveOfEratosthenes.cpp
new file mode 100644
index 00000000..0c47502b
--- /dev/null
+++ b/DSA/DSA-CPP/Others/SieveOfEratosthenes.cpp
@@ -0,0 +1,41 @@
+#include<bits/stdc++.h>
+using namespace std;
+
+bool checkPrime(int k){
+	int i,count=0;
+		for(i=2;i<=k/2;i++){
+			if(k%i==0)
+				count++;
+		}
+	if(count)
+		return false;
+	return true;
+}
+
+int main(void)
+{
+	int i,n;
+	cin>>n;
+	int arr[n-1];
+	for(i=0;i<n-1;i++){
+		arr[i]=i+2;
+	}
+	for(i=0;i<n-1;i++){
+		if(arr[i]==0)
+			continue;
+		bool flag=false;
+		int k=arr[i],el=i+arr[i];
+		flag=checkPrime(k);
+		if(flag){
+			while(el<n){
+				arr[el]=0;
+				el+=arr[i];
+			}
+		}
+	}
+	for(i=0;i<n-1;i++){
+		if(arr[i])
+			cout<<arr[i]<<" ";
+	}
+}
+
diff --git a/DSA/DSA-CPP/Others/queue.cpp b/DSA/DSA-CPP/Others/queue.cpp
new file mode 100644
index 00000000..ff50e6f9
--- /dev/null
+++ b/DSA/DSA-CPP/Others/queue.cpp
@@ -0,0 +1,109 @@
+//queue
+#include<bits/stdc++.h>
+using namespace std;
+
+class Queue
+{
+	int sz;
+	int front,end;
+	int arr[1000];
+	public:
+		Queue(int a)
+		{
+			//a is size of array
+			sz=a;
+			front=-1;
+			end=-1;
+		}
+		
+		bool isFull()
+		{
+			if(end==sz-1)
+			{
+				return true;
+			}
+			return false;
+		}
+		
+		bool isEmpty()
+		{
+			if(end==front)
+			{
+				return true;
+			}
+			return false;
+		}
+		
+		void push(int x)
+		{
+			arr[++end]=x;
+		}
+		
+		void pop()
+		{
+			front++;
+		}
+		
+		int peek()
+		{
+			return arr[front+1];
+		}
+		
+		int size()
+		{
+			return end-front;
+		}
+		
+};
+
+int main(void)
+{
+	Queue q(10);
+	int ch=1;
+	while(ch != 5)
+	{
+		cout<<"\nEnter your choice:\n1.Push\n2.Pop\n3.Peek\n4.Size\n5.Quit\nChoice : ";
+		cin>>ch;
+		if(ch==1)
+		{
+			if(q.isFull())
+			{
+				cout<<"\nOVERFLOW!!";
+			}
+			else
+			{
+				int a;
+				cout<<"\nEnter a value: ";
+				cin>>a;
+				q.push(a);
+			}
+		}
+		else if(ch==2)
+		{
+			if(q.isEmpty())
+			{
+				cout<<"\nUNDERFLOW!!";
+			}
+			else
+			{
+				q.pop();
+			}
+		}
+		else if(ch==3)
+		{
+			if(q.isEmpty())
+			{
+				cout<<"\nEmpty Queue";
+			}
+			else
+			{
+				cout<<q.peek();
+			}
+		}
+		else if(ch==4)
+		{
+			cout<<q.size();
+		}
+	}
+}
+
diff --git a/DSA/DSA-CPP/Queue/Circularqueue.cpp b/DSA/DSA-CPP/Queue/Circularqueue.cpp
new file mode 100644
index 00000000..56a66324
--- /dev/null
+++ b/DSA/DSA-CPP/Queue/Circularqueue.cpp
@@ -0,0 +1,138 @@
+#include <bits/stdc++.h>
+using namespace std;
+
+template <typename T>
+
+class Queue
+{
+    int size;
+    int front;
+    int rear;
+    T *arr;
+
+public:
+    Queue(int length)
+    {
+        size = length;
+        front = rear = 0;
+        arr = new T[size];
+    }
+
+    int queueSize()
+    {
+        int count = 0;
+        for (int i = (front + 1); i <= rear; i++)
+        {
+            count++;
+        }
+        return count;
+    }
+
+    bool isEmpty()
+    {
+        return (front == rear);
+    }
+
+    bool isFull()
+    {
+        return (front == ((rear + 1) % size));
+    }
+
+    void enqueue(T val)
+    {
+        if (isFull())
+        {
+            cout << "Queue Overflow" << endl;
+            return;
+        }
+        rear = (rear + 1) % size;
+        arr[rear] = val;
+        cout << "Inserted element: " << val << endl;
+    }
+
+    void dequeue()
+    {
+        if (isEmpty())
+        {
+            cout << "Queue Underflow" << endl;
+            return;
+        }
+        front = (front + 1) % size;
+        cout << "Deleted element: " << arr[front] << endl;
+    }
+
+    T queueFront()
+    {
+        if (isEmpty())
+        {
+            cout << "Queue Underflow" << endl;
+            return -1;
+        }
+        return arr[front + 1];
+    }
+
+    T queueRear()
+    {
+        if (isEmpty())
+        {
+            cout << "Queue Underflow" << endl;
+            return -1;
+        }
+        return arr[rear];
+    }
+
+    void display()
+    {
+        if (isEmpty())
+        {
+            cout << "Queue Underflow" << endl;
+            return;
+        }
+        cout << "Printing..." << endl;
+        if (rear >= front)
+        {
+            for (int i = (front + 1); i <= rear; i++)
+                cout << arr[i] << " ";
+        }
+        else
+        {
+            for (int i = (front + 1); i < size; i++)
+                cout << arr[i] << " ";
+
+            for (int i = 0; i <= rear; i++)
+                cout << arr[i] << " ";
+        }
+        cout << endl;
+    }
+};
+
+int main()
+{
+    Queue<int> q(5);
+    q.enqueue(23);
+    q.enqueue(56);
+    q.enqueue(42);
+    q.enqueue(12);
+    // q.enqueue(1);
+    q.display();
+    cout << "Size: " << q.queueSize() << endl;
+    cout << "Front element: " << q.queueFront() << endl;
+    cout << "Bottom element: " << q.queueRear() << endl;
+    q.dequeue();
+    q.display();
+    cout << "Size: " << q.queueSize() << endl;
+    cout << "Front element: " << q.queueFront() << endl;
+    cout << "Bottom element: " << q.queueRear() << endl;
+    q.enqueue(10);
+    q.display();
+    if (q.isFull())
+    {
+        cout << "Full" << endl;
+    }
+    if (q.isEmpty())
+    {
+        cout << "Empty" << endl;
+    }
+
+    return 0;
+}
diff --git a/DSA/DSA-CPP/Queue/DeQueue.cpp b/DSA/DSA-CPP/Queue/DeQueue.cpp
new file mode 100644
index 00000000..4daef0e7
--- /dev/null
+++ b/DSA/DSA-CPP/Queue/DeQueue.cpp
@@ -0,0 +1,153 @@
+#include <bits/stdc++.h>
+using namespace std;
+
+template <typename T>
+
+class Queue
+{
+    int size;
+    int front;
+    int rear;
+    T *arr;
+
+public:
+    Queue(int length)
+    {
+        size = length;
+        front = rear = -1;
+        arr = new T[size];
+    }
+
+    int queueSize()
+    {
+        int count = 0;
+        for (int i = (front + 1); i <= rear; i++)
+        {
+            count++;
+        }
+        return count;
+    }
+
+    bool isEmpty()
+    {
+        return (front == rear);
+    }
+
+    bool isFull()
+    {
+        return (front == ((rear + 1) % size));
+    }
+
+    void enqueueR(T val)
+    {
+        if (isFull())
+        {
+            cout << "Queue Overflow" << endl;
+            return;
+        }
+        rear++;
+        arr[rear] = val;
+        cout << "Inserted element: " << arr[rear] << endl;
+    }
+
+    void enqueueF(T val)
+    {
+        int n = -1;
+        if (isFull())
+        {
+            cout << "Queue Overflow" << endl;
+            return;
+        }
+        while (n != front - 1)
+        {
+            n++;
+        }
+        arr[front] = val;
+        front = n;
+        cout << "Inserted element: " << val << endl;
+    }
+
+    void dequeueF()
+    {
+        if (isEmpty())
+        {
+            cout << "Queue Underflow" << endl;
+            return;
+        }
+        front++;
+        cout << "Deleted element: " << arr[front] << endl;
+    }
+
+    void dequeueR()
+    {
+        if (isEmpty())
+        {
+            cout << "Queue Underflow" << endl;
+            return;
+        }
+        int n = -1;
+        while (n!=rear-1)
+        {
+            n++;
+        }
+        cout << "Deleted element: " << arr[rear] << endl;
+        rear = n;
+    }
+
+    T queueFront()
+    {
+        if (isEmpty())
+        {
+            cout << "Queue Underflow" << endl;
+            return -1;
+        }
+        return arr[front + 1];
+    }
+
+    T queueRear()
+    {
+        if (isEmpty())
+        {
+            cout << "Queue Underflow" << endl;
+            return -1;
+        }
+        return arr[rear];
+    }
+
+    void display()
+    {
+        if (isEmpty())
+        {
+            cout << "Queue Underflow" << endl;
+            return;
+        }
+        cout << "Printing..." << endl;
+        for (int i = (front + 1); i <= rear; i++)
+        {
+            cout << arr[i] << " ";
+        }
+        cout << endl;
+    }
+};
+
+int main()
+{
+    Queue<int> q(5);
+    q.enqueueR(23);
+    q.enqueueR(56);
+    q.enqueueR(42);
+    q.enqueueR(12);
+    q.enqueueR(121);
+    q.display();
+    cout << "Size: " << q.queueSize() << endl;
+    cout << "Front element: " << q.queueFront() << endl;
+    cout << "Bottom element: " << q.queueRear() << endl;
+    q.dequeueR();
+    q.display();
+    cout << "Size: " << q.queueSize() << endl;
+    cout << "Front element: " << q.queueFront() << endl;
+    cout << "Bottom element: " << q.queueRear() << endl;
+    q.enqueueF(1);
+    q.display();
+    return 0;
+}
diff --git a/DSA/DSA-CPP/Queue/Implementation_using_Arrays.cpp b/DSA/DSA-CPP/Queue/Implementation_using_Arrays.cpp
new file mode 100644
index 00000000..a424347d
--- /dev/null
+++ b/DSA/DSA-CPP/Queue/Implementation_using_Arrays.cpp
@@ -0,0 +1,119 @@
+#include <bits/stdc++.h>
+using namespace std;
+
+template <typename T>
+
+class Queue
+{
+    int size;
+    int front;
+    int rear;
+    T *arr;
+
+public:
+    Queue(int length)
+    {
+        size = length;
+        front = rear = -1;
+        arr = new T[size];
+    }
+
+    int queueSize()
+    {
+        int count = 0;
+        for (int i = (front + 1); i <= rear; i++)
+        {
+            count++;
+        }
+        return count;
+    }
+
+    bool isEmpty()
+    {
+        return (front == rear);
+    }
+
+    bool isFull()
+    {
+        return (rear == size - 1);
+    }
+
+    void enqueue(T val)
+    {
+        if (isFull())
+        {
+            cout << "Queue Overflow" << endl;
+            return;
+        }
+        rear++;
+        arr[rear] = val;
+        cout << "Inserted element: " << arr[rear] << endl;
+    }
+
+    void dequeue()
+    {
+        if (isEmpty())
+        {
+            cout << "Queue Underflow" << endl;
+            return;
+        }
+        front++;
+        cout << "Deleted element: " << arr[front] << endl;
+    }
+
+    T queueFront()
+    {
+        if (isEmpty())
+        {
+            cout << "Queue Underflow" << endl;
+            return -1;
+        }
+        return arr[front + 1];
+    }
+
+    T queueRear()
+    {
+        if (isEmpty())
+        {
+            cout << "Queue Underflow" << endl;
+            return -1;
+        }
+        return arr[rear];
+    }
+
+    void display()
+    {
+        if (isEmpty())
+        {
+            cout << "Queue Underflow" << endl;
+            return;
+        }
+        cout << "Printing..." << endl;
+        for (int i = (front + 1); i <= rear; i++)
+        {
+            cout << arr[i] << " ";
+        }
+        cout << endl;
+    }
+};
+
+int main()
+{
+    Queue<int> q(5);
+    q.enqueue(23);
+    q.enqueue(56);
+    q.enqueue(42);
+    q.enqueue(12);
+    q.enqueue(121);
+    q.display();
+    cout << "Size: " << q.queueSize() << endl;
+    cout << "Front element: " << q.queueFront() << endl;
+    cout << "Bottom element: " << q.queueRear() << endl;
+    q.dequeue();
+    q.display();
+    cout << "Size: " << q.queueSize() << endl;
+    cout << "Front element: " << q.queueFront() << endl;
+    cout << "Bottom element: " << q.queueRear() << endl;
+    q.enqueue(1);
+    return 0;
+}
diff --git a/DSA/DSA-CPP/Queue/Implementation_using_linkedList.cpp b/DSA/DSA-CPP/Queue/Implementation_using_linkedList.cpp
new file mode 100644
index 00000000..09755b4f
--- /dev/null
+++ b/DSA/DSA-CPP/Queue/Implementation_using_linkedList.cpp
@@ -0,0 +1,147 @@
+#include <bits/stdc++.h>
+using namespace std;
+
+template <typename T>
+
+class node
+{
+public:
+    T data;
+    node<T> *next;
+};
+
+template <typename T>
+
+class Queue
+{
+    node<T> *front, *rear;
+
+public:
+    Queue()
+    {
+        front = rear = NULL;
+    }
+
+    int queueSize()
+    {
+        int count = 0;
+        node<T> *n = front;
+        while (n != NULL)
+        {
+            count++;
+            n = n->next;
+        }
+        return count;
+    }
+
+    bool isEmpty()
+    {
+        return (rear == NULL);
+    }
+
+    bool isFull()
+    {
+        node<T> *n = new node<T>;
+        return (n == NULL);
+    }
+
+    void enqueue(T val)
+    {
+        node<T> *n = new node<T>;
+        if (isFull())
+        {
+            cout << "Queue Overflow" << endl;
+            return;
+        }
+        n->data = val;
+        n->next = NULL;
+        if (isEmpty())
+        {
+            rear = front = n;
+            cout << "Inserted element: " << val << endl;
+            return;
+        }
+        rear->next = n;
+        rear = n;
+        cout << "Inserted element: " << val << endl;
+    }
+
+    void dequeue()
+    {
+        if (isEmpty())
+        {
+            cout << "Queue Underflow" << endl;
+            return;
+        }
+        node<T> *n = front;
+        front = front->next;
+        cout << "Deleted element: " << n->data << endl;
+        delete n;
+    }
+
+    void traversal()
+    {
+        cout << "Printing..." << endl;
+        node<T> *n = front;
+        while (n != NULL)
+        {
+            cout << n->data << " ";
+            n = n->next;
+        }
+        cout << endl;
+    }
+
+    void givenPosition(int index)
+    {
+        node<T> *n = front;
+        for (int i = 0; (i < index - 1 && n != NULL); i++)
+        {
+            n = n->next;
+        }
+        if (n != NULL)
+        {
+            cout << "Element at index " << index << " is: " << n->data << endl;
+            return;
+        }
+        cout << "Invalid index" << endl;
+    }
+
+    T queueFront()
+    {
+        if (isEmpty())
+        {
+            cout << "Queue Underflow" << endl;
+            return -1;
+        }
+        return (front->data);
+    }
+
+    T queueRear()
+    {
+        if (isEmpty())
+        {
+            cout << "Queue Underflow" << endl;
+            return -1;
+        }
+        return (rear->data);
+    }
+};
+
+int main()
+{
+    Queue<int> q;
+    q.enqueue(56);
+    q.enqueue(12);
+    q.enqueue(5);
+    q.traversal();
+    cout << "Front element: " << q.queueFront() << endl;
+    cout << "Rear element: " << q.queueRear() << endl;
+    cout << "Size: " << q.queueSize() << endl;
+    q.givenPosition(1);
+    q.dequeue();
+    q.traversal();
+    cout << "Front element: " << q.queueFront() << endl;
+    cout << "Rear element: " << q.queueRear() << endl;
+    cout << "Size: " << q.queueSize() << endl;
+    return 0;
+}
diff --git a/DSA/DSA-CPP/STL/2d_Vector.cpp b/DSA/DSA-CPP/STL/2d_Vector.cpp
new file mode 100644
index 00000000..dc527d1b
--- /dev/null
+++ b/DSA/DSA-CPP/STL/2d_Vector.cpp
@@ -0,0 +1,37 @@
+// 2D vector
+#include<iostream>
+#include<vector>
+#include<bits/stdc++.h>
+using namespace std;
+int main(){
+    
+ vector <vector <int>> v;  //declaration of 2d vector
+ vector <int> v1;
+ int i;
+ for( i=1;i<=5;++i)
+ {
+     v1.push_back(i*10);
+ }
+ vector <int> v2;
+ for(;i<=10;++i)
+ {
+     v2.push_back(i*10);
+ }
+ vector <int> v3;
+ for(;i<=15;++i)
+ {
+     v3.push_back(i*10);
+ }
+ v.push_back(v1);   //pushing vectors as a element in 2d vector
+ v.push_back(v2);
+ v.push_back(v3);
+for(auto o_it:v)
+{
+    for(auto i_it:o_it)
+    {
+        cout << i_it<<" ";
+    }
+    cout<<endl;
+}
+return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/STL/Array.cpp b/DSA/DSA-CPP/STL/Array.cpp
new file mode 100644
index 00000000..bb691217
--- /dev/null
+++ b/DSA/DSA-CPP/STL/Array.cpp
@@ -0,0 +1,35 @@
+//First Container : Array
+//Array stores element in contagious memory locations.
+#include <iostream>
+#include <array>
+using namespace std;
+int main()
+{
+    array<int, 5> arr = {1, 2, 3, 4, 5}; //declaration
+    for (auto it : arr)                  //printing using auto iterator
+    {
+        cout << it << " ";
+    }
+    cout << endl
+         << arr.at(0) << endl;                            //printing elemnt at 0 using at func
+    for (auto it2 = arr.begin(); it2 != arr.end(); ++it2) //printing using begin() and end()
+    {
+        cout << *it2 << " ";
+    }
+    cout << endl;
+    for (auto it3 = arr.rbegin(); it3 != arr.rend(); ++it3) //printing in reverse order using rbegin() and rend()
+    {
+        cout << *it3 << " ";
+    }
+    cout << endl;
+    cout << arr.front(); //  printing first and last element
+    cout << " " << arr.back();
+    cout<<"\nSize of array :"<<arr.size()<<endl;
+    array<int ,10> arr1;
+    arr1.fill(10);       //filling array with fill() fnc   
+    for (auto it : arr1)                  //printing using auto iterator
+    {
+        cout << it << " ";
+    }     
+    return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/STL/Vector.cpp b/DSA/DSA-CPP/STL/Vector.cpp
new file mode 100644
index 00000000..0f225e70
--- /dev/null
+++ b/DSA/DSA-CPP/STL/Vector.cpp
@@ -0,0 +1,36 @@
+//Second Container : Array
+//Vector ~ Dynamic Array
+#include <iostream>
+#include <vector>
+using namespace std;
+int main()
+{
+    vector<int> v;  //declaration
+    v.push_back(1); //insertion using pop_back fnc
+    v.push_back(2);
+    v.push_back(3);
+    v.push_back(4);
+    v.push_back(5);
+    for (auto it : v) //printing using auto iterator
+    {
+        cout << it << " ";
+    }
+    cout << endl;
+    for (auto it2 = v.begin(); it2 != v.end(); ++it2) //printing using begin() and end()
+    {
+        cout << *it2 << " ";
+    }
+    cout << endl;
+    cout << "Size of vector : " << v.size();
+    v.pop_back(); //popping out last element
+    cout << endl
+         << "Capacity of vector : " << v.capacity() << endl;
+    vector<int> v2;
+    v2 = v;            //copying v vector into v2
+    for (auto it : v2) //printing using auto iterator
+    {
+        cout << it << " ";
+    }
+    v.emplace_back(5); //entering value using emplace back fnc
+    return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/STL/calculator_using_templatefnc.cpp b/DSA/DSA-CPP/STL/calculator_using_templatefnc.cpp
new file mode 100644
index 00000000..dfdb0a71
--- /dev/null
+++ b/DSA/DSA-CPP/STL/calculator_using_templatefnc.cpp
@@ -0,0 +1,17 @@
+#include<iostream>
+using namespace std;
+template < typename T>
+void calculator(T a,T b){
+  cout<<"Sum of input numbers: "<<a+b<<endl;
+  cout<<"Multiply of input numbers: "<<a*b<<endl;
+  cout<<"Division of input numbers: "<<a/b<<endl;
+}
+int main()
+{
+    calculator <int>(2,3);
+ 
+    calculator <float>(2.2,3.3);
+   
+    calculator <double>(2.2222,3.333);
+}
+
diff --git a/DSA/DSA-CPP/STL/compare_sortfnc.cpp b/DSA/DSA-CPP/STL/compare_sortfnc.cpp
new file mode 100644
index 00000000..4c8fd88e
--- /dev/null
+++ b/DSA/DSA-CPP/STL/compare_sortfnc.cpp
@@ -0,0 +1,33 @@
+#include<iostream>
+#include<algorithm>
+#include<utility>
+#include<vector>
+using namespace std;
+bool myCmp(pair<string, int> p1, pair<string, int> p2)
+{
+    if(p1.second > p2.second)
+    {
+        return 1;
+    }
+    else if(p1.second == p2.second)
+    {
+        if(p1.first < p2.first)
+        {
+            return 1;
+        }
+        else
+        {
+            return 0;
+        }
+    }
+    
+    return 0;
+}  
+int main(){
+ vector <pair<string,int>> v ={{"ram",89},{"shyam",91},{"pyam",89}};
+ sort(v.begin(),v.end(),myCmp);
+ for(auto i=0;i<v.size();++i){
+     cout<<v[i].first<<" "<<v[i].second<<endl;
+ }
+return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/STL/deque.cpp b/DSA/DSA-CPP/STL/deque.cpp
new file mode 100644
index 00000000..81c1fd93
--- /dev/null
+++ b/DSA/DSA-CPP/STL/deque.cpp
@@ -0,0 +1,20 @@
+#include<iostream>
+#include<deque>       //allows insertion and deletion at both ends
+using namespace std;
+int main(){
+ deque <int> d;
+ d.push_back(11);cout<<d.size()<<" ";
+ d.push_front(22);cout<<d.size()<<" ";
+ d.push_front(32);cout<<d.size()<<" ";
+ d.push_back(44);cout<<d.size()<<" ";
+ d.pop_front();cout<<d.size()<<" ";
+ for(int i=0;i<d.size();++i){
+     cout<<d[i]<<" ";
+ }
+
+ cout<<d.size();
+//  cout<<d.front();
+//  cout<<" "<<d.back();
+
+return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/STL/list.cpp b/DSA/DSA-CPP/STL/list.cpp
new file mode 100644
index 00000000..1edfd36c
--- /dev/null
+++ b/DSA/DSA-CPP/STL/list.cpp
@@ -0,0 +1,12 @@
+#include<iostream>
+#include<list>
+using namespace std;
+int main(){
+ list <int> l;
+ l.push_back(23);
+ l.push_front(34);
+ for (int i:l){
+     cout<<i;
+ }
+return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/STL/map.cpp b/DSA/DSA-CPP/STL/map.cpp
new file mode 100644
index 00000000..4c3edf3f
--- /dev/null
+++ b/DSA/DSA-CPP/STL/map.cpp
@@ -0,0 +1,32 @@
+// it maps keys to values
+//returns keys in sorted order
+//program to map number to sqr
+#include <iostream>
+#include <map>
+using namespace std;
+int main()
+{
+    map<int, int> m;
+    m[1] = 1; //here 1 in brackets is key and 1 after is its mapped value
+    m[2] = 4;
+    m.insert({-1, 1});
+    m[3] = 9;
+    m[10] = 100;
+    m.insert({-3, 9}); //same -1 is key and 1 is the value
+    for (auto i : m)
+    {
+        cout << i.first << "-->" << i.second << endl; //this will print in sorted order
+    }
+
+    cout << "Finding -1 " << m.count(-1) << endl; //returns bool value : 1 if present 0 if not
+    cout << "Finding -6 " << m.count(-6) << endl;
+    //This particular block searches for a key and then print the map starting from that key neglecting the key less than it. for ex in this case if we want to see just the positive mapping we can do it in this manner.
+    {
+        auto it = m.find(1);
+        for (auto i = it; i != m.end(); ++i)
+        {
+            cout << (*i).first << "-->" << (*i).second << endl;
+        }
+    }
+    return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/STL/pair.cpp b/DSA/DSA-CPP/STL/pair.cpp
new file mode 100644
index 00000000..ca3c13e6
--- /dev/null
+++ b/DSA/DSA-CPP/STL/pair.cpp
@@ -0,0 +1,28 @@
+#include <iostream>
+#include <bits/stdc++.h>
+using namespace std;
+int main()
+{
+    pair<int, string> p;      // Declaration
+    p = make_pair(2, "ABCD"); //initialisation
+                              // We can also use cin to take .first and .second value in the vector.
+    cout << p.first << " " << p.second;
+    cout << endl;
+    int a[3] = {1, 2, 3};
+    int b[3] = {11, 22, 33};
+    pair<int, int> q[3]; //Declaration of pair array
+    q[0] = {a[0], b[0]};
+    q[1] = {a[1], b[1]};
+    q[2] = {a[2], b[2]};
+    for (int i = 0; i < 3; ++i)
+    {
+        cout << q[i].first << " " << q[i].second << endl;
+    }
+
+    pair<string, string> s;
+    getline(cin, s.first);
+    getline(cin, s.second);
+    cout << s.first << " " << s.second;
+
+    return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/STL/priority_queue.cpp b/DSA/DSA-CPP/STL/priority_queue.cpp
new file mode 100644
index 00000000..d59209b8
--- /dev/null
+++ b/DSA/DSA-CPP/STL/priority_queue.cpp
@@ -0,0 +1,15 @@
+#include<iostream>
+#include<bits/stdc++.h>
+using namespace std;
+int main(){
+ priority_queue<int> pq;
+ pq.push(  1);
+ pq.push(6);
+ pq.push(4);
+ pq.push(-1);
+ cout<<pq.top();
+ pq.pop();
+ cout<<endl;
+ cout<<pq.top();
+return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/STL/queue.cpp b/DSA/DSA-CPP/STL/queue.cpp
new file mode 100644
index 00000000..cf12a41e
--- /dev/null
+++ b/DSA/DSA-CPP/STL/queue.cpp
@@ -0,0 +1 @@
+//first in first out
\ No newline at end of file
diff --git a/DSA/DSA-CPP/STL/set.cpp b/DSA/DSA-CPP/STL/set.cpp
new file mode 100644
index 00000000..ff9e5bdc
--- /dev/null
+++ b/DSA/DSA-CPP/STL/set.cpp
@@ -0,0 +1,19 @@
+//tales only unique value 
+// set returns value in sorted order
+//unordered set returns in random order
+#include<iostream>
+#include<set>
+using namespace std;
+int main() {
+	set<int>s;
+	s.insert(1);
+	s.insert(1);
+	s.insert(3);
+	s.insert(3);
+	s.insert(2);
+	s.insert(0);
+	for (auto &i : s) {
+		cout << i << " ";
+	}
+	return 0;
+}
diff --git a/DSA/DSA-CPP/Sorting Algo/BubbleSort.cpp b/DSA/DSA-CPP/Sorting Algo/BubbleSort.cpp
new file mode 100644
index 00000000..9101954a
--- /dev/null
+++ b/DSA/DSA-CPP/Sorting Algo/BubbleSort.cpp	
@@ -0,0 +1,24 @@
+#include<iostream>
+using namespace std;
+int main(){
+    int n;
+    cin>>n;
+    int ar[n];
+    for(int x=0;x<n;x++){
+        cin>>ar[x];
+    }
+    int counter=1;
+    while(counter<n){
+        for(int x=0;x<n-counter;x++){
+            if(ar[x]>ar[x+1]){
+                int temp=ar[x];
+                ar[x]=ar[x+1];
+                ar[x+1]=temp;
+            }
+        }
+        counter++;
+    }
+    for(int x=0;x<n;x++){
+        cout<<ar[x]<<" ";
+    }
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/Sorting Algo/Heap_sort.cpp b/DSA/DSA-CPP/Sorting Algo/Heap_sort.cpp
new file mode 100644
index 00000000..650fd2e8
--- /dev/null
+++ b/DSA/DSA-CPP/Sorting Algo/Heap_sort.cpp	
@@ -0,0 +1,55 @@
+#include <iostream>
+using namespace std;
+  
+void heapsort(int arr[], int n, int root)
+{
+   int largest = root; 
+   int l = 2*root + 1; 
+   int r = 2*root + 2; 
+  
+   if (l < n && arr[l] > arr[largest])
+   largest = l;
+
+   if (r < n && arr[r] > arr[largest])
+   largest = r;
+  
+   if (largest != root)
+      {
+      swap(arr[root], arr[largest]);
+  
+      heapsort(arr, n, largest);
+      }
+}
+  
+void heapSort(int arr[], int n)
+{
+   for (int i = n / 2 - 1; i >= 0; i--)
+   heapsort(arr, n, i);
+  
+   for (int i=n-1; i>=0; i--)
+   {
+      swap(arr[0], arr[i]);
+  
+      heapsort(arr, i, 0);
+   }
+}
+  
+void showArray(int arr[], int n)
+{
+   for (int i=0; i<n; ++i)
+   cout << arr[i] << " ";
+   cout << "\n";
+}
+  
+int main()
+{
+   int heap_arr[] = {2,8,15,12,11,6};
+   int n = sizeof(heap_arr)/sizeof(heap_arr[0]);
+   cout<<"Input array"<<endl;
+   showArray(heap_arr,n);
+  
+   heapSort(heap_arr, n);
+  
+   cout << "Sorted array"<<endl;
+   showArray(heap_arr, n);
+}
diff --git a/DSA/DSA-CPP/Sorting Algo/InsertionSort.cpp b/DSA/DSA-CPP/Sorting Algo/InsertionSort.cpp
new file mode 100644
index 00000000..e61f1b46
--- /dev/null
+++ b/DSA/DSA-CPP/Sorting Algo/InsertionSort.cpp	
@@ -0,0 +1,52 @@
+// C++ pgm to sort the given numbers using insertion sort algorithm!
+#include <iostream>
+using namespace std;
+ 
+template <class T>
+// Function to print (sorted) array. 
+// Pass by referrence method used.
+void Print(T& vec, int n, string s){
+    cout << s << ": [" << flush;
+    for (int i=0; i<n; i++){
+        cout << vec[i] << flush;
+        if (i < n-1){
+            cout << ", " << flush;
+        }
+    }
+    cout << "]" << endl;
+}
+
+// Insertion sort logic/algo. 
+void InsertionSort(int A[], int n){
+    for (int i=1; i<n; i++){
+        int j = i-1;
+        int x = A[i];
+        while (j>-1 && A[j] > x){
+            A[j+1] = A[j];
+            j--;
+        }
+        A[j+1] = x;
+    }
+}
+ 
+int main() {
+ 
+    int *A,n,s;
+    cout<<"Enter the size of an array: "<<endl;
+    cin>>s;
+    A = new int[s];
+    cout<<"Enter the no. of elements to enter: ";
+    cin>>n;
+    cout<<"Enter the elements: "<<endl;
+    for (int i = 0; i < n; i++)
+    {
+        cin>>A[i];
+    }
+    
+    Print(A, n, "       A");
+ 
+    InsertionSort(A, n);
+    Print(A, n, "Sorted A");
+ 
+    return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/Sorting Algo/Mergesort.cpp b/DSA/DSA-CPP/Sorting Algo/Mergesort.cpp
new file mode 100644
index 00000000..2b1d53b2
--- /dev/null
+++ b/DSA/DSA-CPP/Sorting Algo/Mergesort.cpp	
@@ -0,0 +1,33 @@
+#include <bits/stdc++.h>
+using namespace std;
+void merge(vector<int>& array, int startL, int endL, int startR, int endR) {
+  vector<int> left(array.begin() + startL, array.begin() + endL + 1);
+  vector<int> right(array.begin() + startR, array.begin() + endR + 1);
+  int mergeArrayStart = startL, leftIndex = 0, rightIndex = 0;
+
+  while (leftIndex < left.size() && rightIndex < right.size()) {
+    if (left[leftIndex] >= right[rightIndex]) {
+      array[mergeArrayStart++] = right[rightIndex++];
+    } else if (left[leftIndex] < right[rightIndex])
+      array[mergeArrayStart++] = left[leftIndex++];
+  }
+
+  while (leftIndex < left.size()) array[mergeArrayStart++] = left[leftIndex++];
+  while (rightIndex < right.size())
+    array[mergeArrayStart++] = right[rightIndex++];
+}
+void mergeSort(vector<int>& array, int start, int end) {
+  if (start >= end) return;
+  int mid = start + (end - start) / 2;
+
+  mergeSort(array, start, mid);
+  mergeSort(array, mid + 1, end);
+  merge(array, start, mid, mid + 1, end);
+}
+
+int main() {
+  vector<int> a = {0, 0};
+  mergeSort(a, 0, a.size() - 1);
+  for (int i : a) cout << i << " ";
+  return 0;
+}
diff --git a/DSA/DSA-CPP/Sorting Algo/SelectionSort.cpp b/DSA/DSA-CPP/Sorting Algo/SelectionSort.cpp
new file mode 100644
index 00000000..523e74fb
--- /dev/null
+++ b/DSA/DSA-CPP/Sorting Algo/SelectionSort.cpp	
@@ -0,0 +1,23 @@
+#include<iostream>
+using namespace std;
+int main(){
+    int n;
+    cin>>n;
+    int ar[n];
+    for(int x=0;x<n;x++){
+        cin>>ar[x];
+    }
+    for(int x=0;x<n;x++){
+        for(int y=x+1;y<n-1;y++){
+            if(ar[x]>ar[y]){
+                int temp=ar[x];
+                ar[x]=ar[y];
+                ar[y]=temp;
+            }
+        }
+    }
+    for(int x=0;x<n;x++){
+        cout<<ar[x]<<" ";
+    }
+    return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/Sorting Algo/ShellSort.cpp b/DSA/DSA-CPP/Sorting Algo/ShellSort.cpp
new file mode 100644
index 00000000..b41d8325
--- /dev/null
+++ b/DSA/DSA-CPP/Sorting Algo/ShellSort.cpp	
@@ -0,0 +1,63 @@
+// C++ implementation of Shell Sort
+#include  <iostream>
+using namespace std;
+ 
+// Function to sort array using shellSort 
+int shellSort(int arr[], int n)
+{
+    // Start with a big gap, then reduce the gap
+    for (int gap = n/2; gap > 0; gap /= 2)
+    {
+        /* Do a gapped insertion sort for this gap size.
+        The first gap elements a[0..gap-1] are already in gapped order
+        keep adding one more element until the entire array is
+        gap sorted */ 
+        for (int i = gap; i < n; i += 1)
+        {
+            /*add a[i] to the elements that have been gap sorted
+            save a[i] in temp and make a hole at position i */
+            int temp = arr[i];
+ 
+            /*shift earlier gap-sorted elements up until the correct
+            location for a[i] is found*/
+            int j;           
+            for (j = i; j >= gap && arr[j - gap] > temp; j -= gap)
+                arr[j] = arr[j - gap];
+             
+            //  put temp (the original a[i]) in its correct location
+            arr[j] = temp;
+        }
+    }
+    return 0;
+}
+ 
+void printArray(int arr[], int n)
+{
+    for (int i=0; i<n; i++)
+        cout << arr[i] << " ";
+    cout<<endl;
+}
+ 
+int main()
+{
+    int n;
+    cout<<"Enter number of elements in array\n";
+    cin>>n;
+
+    int arr[n], i;
+    cout<<"Enter elements of array\n";
+    for(i=0;i<n;i++)
+    {
+      cin>>arr[i];
+    }
+ 
+    cout << "Array before sorting: \n";
+    printArray(arr, n);
+ 
+    shellSort(arr, n);
+ 
+    cout << "Array after sorting: \n";
+    printArray(arr, n);
+ 
+    return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/Sorting Algo/circle_sort.cpp b/DSA/DSA-CPP/Sorting Algo/circle_sort.cpp
new file mode 100644
index 00000000..36e59066
--- /dev/null
+++ b/DSA/DSA-CPP/Sorting Algo/circle_sort.cpp	
@@ -0,0 +1,93 @@
+// C++ program to implement Circle  Sort
+
+#include<bits/stdc++.h> 
+using namespace std; 
+  
+/*
+Performs recursive circular swaps and returns true if atleast one swap occurs
+*/
+bool rec_sort(int arr[], int beg, int end) 
+{ 
+    bool isSwap = false; 
+  
+    // If concerned array is empty, Return
+    if (beg == end) 
+        return false; 
+  
+    // Storing the values of beg, end to later use in the recursive call
+    int begA, endA;
+    for(begA = beg, endA = end; begA < endA; begA++, endA--) 
+    { 
+        //Compares the first and last elements 
+        if (arr[begA] > arr[endA]) 
+        { 
+            swap(arr[begA], arr[endA]); 
+            isSwap = true; 
+        } 
+        
+    } 
+  
+    // If the array has odd number of elements
+    if (begA == endA) 
+        if (arr[begA] > arr[endA + 1]) 
+        { 
+            swap(arr[beg], arr[endA+1]); 
+            isSwap = true; 
+        } 
+  
+    int mid = (end - beg) / 2; 
+    bool isSwapA = rec_sort(arr, beg, beg+mid); 
+    bool isSwapB = rec_sort(arr, beg+mid+1, end); 
+  
+    return (isSwap || isSwapA || isSwapB); 
+} 
+
+void circle_sort(int arr[], int n) 
+{  
+    while (rec_sort(arr, 0, n-1)) 
+    {    
+        
+    } 
+} 
+  
+
+int main()
+{
+    int n;
+    cout<<"\nHow many numbers do you want to sort? ";
+    cin>>n;
+    int arr[n];
+
+    if (n <= 0)
+    {
+        cout<<"The array is Empty!!!";
+        return 0;
+    }
+    // Input the numbers to sort
+    cout<<"Enter the numbers: ";
+    for (int i = 0; i < n; i++)
+        cin>>arr[i];
+  
+    //Call the sort function 
+    circle_sort(arr,n);  
+
+    cout<<"The numbers in sorted order is: ";
+    // Print the sorted array
+    for (int i = 0; i < n; i++)
+        cout<<arr[i]<<" ";
+    cout<<endl;
+    return 0;
+}
+
+/*
+Time Complexity: O(n*log(n))
+Space Complexity: O(n)
+SAMPLE INPUT AND OUTPUT
+SAMPLE 1
+How many numbers do you want to sort? 5
+Enter the numbers: 1 4 3 4 2
+The numbers in sorted order is:  1  2  3  4  5
+SAMPLE 2
+How many numbers do you want to sort? 0
+The array is Empty!!!
+*/
diff --git a/DSA/DSA-CPP/Sorting Algo/comb_sort.cpp b/DSA/DSA-CPP/Sorting Algo/comb_sort.cpp
new file mode 100644
index 00000000..2efae447
--- /dev/null
+++ b/DSA/DSA-CPP/Sorting Algo/comb_sort.cpp	
@@ -0,0 +1,84 @@
+// C++ program to implement Comb  Sort
+
+/*
+Comb sort is an improvised Bubble sort. Bubble sort removes its inversion one by one whereas In Comb sort,
+more than one inversion is removed by one swap and hence it is more efficient than Bubble sort.
+*/
+
+#include <bits/stdc++.h> 
+using namespace std; 
+
+// Comb sort
+void comb_sort(int arr[], int n)
+{
+    int flag= 1, space = n; 
+    
+    while (space > 1 || flag == 1) 
+    {
+        // Here empirically found shrink factor 1.3 is used.
+        space = (space * 10) / 13;
+        
+        //Assigning space its minimum value of 1
+        if(space < 1)
+            space = 1;
+    
+        flag = 0;
+        
+        // Compare elements with the space value
+        for (int i = 0; i < (n - space); i++) 
+        {
+            if (arr[i] > arr[i + space]) 
+            {
+                swap(arr[i],arr[i+space]);
+                flag= 1;
+            }
+        }
+    }
+}
+
+
+int main()
+{
+    int n;
+    cout<<"\nHow many numbers do you want to sort? ";
+    cin>>n;
+    int arr[n];
+
+    if (n <= 0)
+    {
+        cout<<"The array is Empty!!!";
+        return 0;
+    }
+    // Input the numbers to sort
+    cout<<"Enter the numbers: ";
+    for (int i = 0; i < n; i++)
+        cin>>arr[i];
+  
+    //Call the sort function 
+    comb_sort(arr,n);  
+
+    cout<<"The numbers in sorted order is: ";
+    // Print the sorted array
+    for (int i = 0; i < n; i++)
+        cout<<arr[i]<<" ";
+    cout<<endl;
+
+    return 0;
+}
+
+/*
+
+Time Complexity: O(n^2), though in average works better than bubble sort
+Space Complexity: O(n)
+
+SAMPLE INPUT AND OUTPUT
+
+SAMPLE 1
+How many numbers do you want to sort? 5
+Enter the numbers: 1 4 2 5 3
+The numbers in sorted order is:  1  2  3  4  5
+
+SAMPLE 2
+How many numbers do you want to sort? 0
+The array is Empty!!!
+*/
diff --git a/DSA/DSA-CPP/Sorting Algo/cyclic_sort.cpp b/DSA/DSA-CPP/Sorting Algo/cyclic_sort.cpp
new file mode 100644
index 00000000..30fb05e3
--- /dev/null
+++ b/DSA/DSA-CPP/Sorting Algo/cyclic_sort.cpp	
@@ -0,0 +1,51 @@
+#include <iostream>
+#include <stdio.h>
+
+using namespace std;
+void CyclicSort(int arr[], int n);
+void Swap(int *arr, int i);
+
+int main(void)
+{
+    int n;
+    cout << "Enter the length of the array " << endl;
+    cin >> n;
+
+    int arr[n];
+
+    for (int i = 0; i < n; i++)
+    {
+        cin >> arr[i];
+    }
+
+    CyclicSort(arr, n);
+
+    for (int i = 0; i < n; i++)
+    {
+        cout << arr[i];
+    }
+}
+
+void CyclicSort(int arr[], int n)
+{
+    for (int i = 0; i < n-1; i++)
+    {
+        if (arr[i] != arr[i]-1)
+        {
+            Swap(arr, i);
+        }
+        else
+        {
+            i++;
+        }
+    }
+}
+
+void Swap(int *arr, int i)
+{
+    int temp = arr[i];
+    int next = arr[i] - 1;
+
+    arr[i] = arr[next];
+    arr[next] = temp;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/Sorting Algo/menuDriven.cpp b/DSA/DSA-CPP/Sorting Algo/menuDriven.cpp
new file mode 100644
index 00000000..967f110b
--- /dev/null
+++ b/DSA/DSA-CPP/Sorting Algo/menuDriven.cpp	
@@ -0,0 +1,470 @@
+#include <bits/stdc++.h>
+using namespace std;
+
+class Sort
+{
+    int size;
+    int *arr;
+
+public:
+    Sort(int n)
+    {
+        this->size = n;
+        arr = new int[size];
+    }
+
+    void setVal()
+    {
+        for (int i = 0; i < size; i++)
+        {
+            cout << "Enter value you want to insert at index " << i << ": ";
+            cin >> arr[i];
+        }
+    }
+
+    void bubbleSortA()
+    {
+        for (int i = 0; i < size - 1; i++)
+        {
+            for (int j = 0; j < size - 1 - i; j++)
+            {
+                if (arr[j] > arr[j + 1])
+                {
+                    int temp = arr[j + 1];
+                    arr[j + 1] = arr[j];
+                    arr[j] = temp;
+                }
+            }
+        }
+    }
+
+    void bubbleSortD()
+    {
+        for (int i = 0; i < size - 1; i++)
+        {
+            for (int j = 0; j < size - 1 - i; j++)
+            {
+                if (arr[j] < arr[j + 1])
+                {
+                    int temp = arr[j + 1];
+                    arr[j + 1] = arr[j];
+                    arr[j] = temp;
+                }
+            }
+        }
+    }
+
+    void insertionSortA()
+    {
+        for (int i = 1; i <= size - 1; i++)
+        {
+            int key = arr[i];
+            int j = i - 1;
+            while (j >= 0 && arr[j] > key)
+            {
+                arr[j + 1] = arr[j];
+                j--;
+            }
+            arr[j + 1] = key;
+        }
+    }
+
+    void insertionSortD()
+    {
+        for (int i = 1; i <= size - 1; i++)
+        {
+            int key = arr[i];
+            int j = i - 1;
+            while (j >= 0 && arr[j] < key)
+            {
+                arr[j + 1] = arr[j];
+                j--;
+            }
+            arr[j + 1] = key;
+        }
+    }
+
+    void selectionSortA()
+    {
+        int indexOfmin;
+        for (int i = 0; i < size - 1; i++)
+        {
+            indexOfmin = i;
+            for (int j = i + 1; j < size; j++)
+            {
+                if (arr[j] < arr[indexOfmin])
+                {
+                    indexOfmin = j;
+                }
+            }
+            int temp = arr[indexOfmin];
+            arr[indexOfmin] = arr[i];
+            arr[i] = temp;
+        }
+    }
+
+    void selectionSortD()
+    {
+        int indexOfmax;
+        for (int i = 0; i < size - 1; i++)
+        {
+            indexOfmax = i;
+            for (int j = i + 1; j < size; j++)
+            {
+                if (arr[j] > arr[indexOfmax])
+                {
+                    indexOfmax = j;
+                }
+            }
+            int temp = arr[indexOfmax];
+            arr[indexOfmax] = arr[i];
+            arr[i] = temp;
+        }
+    }
+
+    int PartitionA(int low, int high)
+    {
+        int i, j, pivot;
+        pivot = arr[low];
+        i = low + 1;
+        j = high;
+        do
+        {
+            if (arr[i] < pivot)
+            {
+                i++;
+            }
+            if (arr[j] > pivot)
+            {
+                j--;
+            }
+            if (i < j)
+            {
+                int temp = arr[j];
+                arr[j] = arr[i];
+                arr[i] = temp;
+            }
+        } while (i < j);
+        int t = arr[low];
+        arr[low] = arr[j];
+        arr[j] = t;
+        return j;
+    }
+
+    void quickSortA(int low, int high)
+    {
+        int p;
+        if (low < high)
+        {
+            p = PartitionA(low, high);
+            quickSortA(low, p - 1);
+            quickSortA(p + 1, high);
+        }
+    }
+
+    int PartitionD(int low, int high)
+    {
+        int i, j, pivot;
+        pivot = arr[low];
+        i = low + 1;
+        j = high;
+        do
+        {
+            if (arr[i] > pivot)
+            {
+                i++;
+            }
+            if (arr[j] < pivot)
+            {
+                j--;
+            }
+            if (i < j)
+            {
+                int temp = arr[j];
+                arr[j] = arr[i];
+                arr[i] = temp;
+            }
+        } while (i < j);
+        int t = arr[low];
+        arr[low] = arr[j];
+        arr[j] = t;
+        return j;
+    }
+
+    void quickSortD(int low, int high)
+    {
+        int p;
+        if (low < high)
+        {
+            p = PartitionD(low, high);
+            quickSortD(low, p - 1);
+            quickSortD(p + 1, high);
+        }
+    }
+
+    void mergeA(int low, int mid, int high)
+    {
+        int i, j, b[size + 1], k = low;
+        i = low;
+        j = mid + 1;
+        while (i <= mid && j <= high)
+        {
+            if (arr[i] < arr[j])
+            {
+                b[k] = arr[i];
+                k++;
+                i++;
+            }
+            else
+            {
+                b[k] = arr[j];
+                k++;
+                j++;
+            }
+        }
+        while (i <= mid)
+        {
+            b[k] = arr[i];
+            k++;
+            i++;
+        }
+        while (j <= high)
+        {
+            b[k] = arr[j];
+            k++;
+            j++;
+        }
+        for (int i = low; i <= high; i++)
+        {
+            arr[i] = b[i];
+        }
+    }
+
+    void mergeSortA(int low, int high)
+    {
+        int mid;
+        if (low < high)
+        {
+            mid = (low + high) / 2;
+            mergeSortA(low, mid);
+            mergeSortA(mid + 1, high);
+            mergeA(low, mid, high);
+        }
+    }
+
+    void mergeD(int low, int mid, int high)
+    {
+        int i, j, b[size + 1], k = low;
+        i = low;
+        j = mid + 1;
+        while (i <= mid && j <= high)
+        {
+            if (arr[i] > arr[j])
+            {
+                b[k] = arr[i];
+                k++;
+                i++;
+            }
+            else
+            {
+                b[k] = arr[j];
+                k++;
+                j++;
+            }
+        }
+        while (i <= mid)
+        {
+            b[k] = arr[i];
+            k++;
+            i++;
+        }
+        while (j <= high)
+        {
+            b[k] = arr[j];
+            k++;
+            j++;
+        }
+        for (int i = low; i <= high; i++)
+        {
+            arr[i] = b[i];
+        }
+    }
+
+    void mergeSortD(int low, int high)
+    {
+        int mid;
+        if (low < high)
+        {
+            mid = (low + high) / 2;
+            mergeSortD(low, mid);
+            mergeSortD(mid + 1, high);
+            mergeD(low, mid, high);
+        } 
+    }
+
+    void countSortA()
+    {
+        int max = *max_element(arr, arr + size);
+        int count[max + 1];
+        for (int i = 0; i < max + 1; i++)
+        {
+            count[i] = 0;
+        }
+        for (int i = 0; i < size; i++)
+        {
+            count[arr[i]]++;
+        }
+        int j = 0;
+        for (int i = 0; i < max + 1;)
+        {
+            if (count[i] > 0)
+            {
+                arr[j] = i;
+                j++;
+                count[i]--;
+            }
+            else
+            {
+                i++;
+            }
+        }
+    }
+
+    void countSortD()
+    {
+        int max = *max_element(arr, arr + size);
+        int count[max + 1];
+        for (int i = 0; i < max + 1; i++)
+        {
+            count[i] = 0;
+        }
+        for (int i = 0; i < size; i++)
+        {
+            count[arr[i]]++;
+        }
+        int j = 0;
+        for (int i = max; i >= 0;)
+        {
+            if (count[i] > 0)
+            {
+                arr[j] = i;
+                j++;
+                count[i]--;
+            }
+            else
+            {
+                i--;
+            }
+        }
+    }
+
+    void display()
+    {
+        for (int i = 0; i < size; i++)
+        {
+            cout << arr[i] << " ";
+        }
+        cout << endl;
+    }
+};
+
+int main()
+{
+    int s;
+    cout << "Enter the size of array: ";
+    cin >> s;
+    Sort S(s);
+    S.setVal();
+    cout << "\nInitial Array:" << endl;
+    S.display();
+    while (true)
+    {
+        cout << "\n\n------Menu Driven Program For Sorting------" << endl;
+        cout << "1. Ascending Order through Bubble sort" << endl;
+        cout << "2. Descending Order through Bubble sort" << endl;
+        cout << "3. Ascending Order through Insertion sort" << endl;
+        cout << "4. Descending Order through Insertion sort" << endl;
+        cout << "5. Ascending Order through Selection sort" << endl;
+        cout << "6. Descending Order through Selection sort" << endl;
+        cout << "7. Ascending Order through Quick sort" << endl;
+        cout << "8. Descending Order through Quick sort" << endl;
+        cout << "9. Ascending Order through Merge sort" << endl;
+        cout << "10. Descending Order through Merge sort" << endl;
+        cout << "11. Ascending Order through Count sort" << endl;
+        cout << "12. Descending Order through Count sort" << endl;
+        cout << "13. Exit" << endl;
+        cout << "-------------------------------------------" << endl;
+        int choice;
+        cout << "\nEnter you choice: ";
+        cin >> choice;
+        switch (choice)
+        {
+        case 1:
+            S.bubbleSortA();
+            cout << "Sorted Array:" << endl;
+            S.display();
+            break;
+        case 2:
+            S.bubbleSortD();
+            cout << "Sorted Array:" << endl;
+            S.display();
+            break;
+        case 3:
+            S.insertionSortA();
+            cout << "Sorted Array:" << endl;
+            S.display();
+            break;
+        case 4:
+            S.insertionSortD();
+            cout << "Sorted Array:" << endl;
+            S.display();
+            break;
+        case 5:
+            S.selectionSortA();
+            cout << "Sorted Array:" << endl;
+            S.display();
+            break;
+        case 6:
+            S.selectionSortD();
+            cout << "Sorted Array:" << endl;
+            S.display();
+            break;
+        case 7:
+            S.quickSortA(0, s - 1);
+            cout << "Sorted Array:" << endl;
+            S.display();
+            break;
+        case 8:
+            S.quickSortD(0, s - 1);
+            cout << "Sorted Array:" << endl;
+            S.display();
+            break;
+        case 9:
+            S.mergeSortA(0, s - 1);
+            cout << "Sorted Array:" << endl;
+            S.display();
+            break;
+        case 10:
+            S.mergeSortD(0, s - 1);
+            cout << "Sorted Array:" << endl;
+            S.display();
+            break;
+        case 11:
+            S.countSortA();
+            cout << "Sorted Array:" << endl;
+            S.display();
+            break;
+        case 12:
+            S.countSortD();
+            cout << "Sorted Array:" << endl;
+            S.display();
+            break;
+        case 13:
+            cout << "Exiting..." << endl;
+            exit(0);
+        default:
+            break;
+        }
+    }
+    return 0;
+}
diff --git a/DSA/DSA-CPP/Stacks/Postfix.cpp b/DSA/DSA-CPP/Stacks/Postfix.cpp
new file mode 100644
index 00000000..4b4cea66
--- /dev/null
+++ b/DSA/DSA-CPP/Stacks/Postfix.cpp
@@ -0,0 +1,54 @@
+#include<bits/stdc++.h>
+using namespace std;
+float scanNum(char ch){
+   int value;
+   value = ch;
+   return float(value-'0');
+}
+int isOperator(char ch){
+   if(ch == '+'|| ch == '-'|| ch == '*'|| ch == '/' || ch == '^')
+      return 1;
+      return -1;
+   }
+   int isOperand(char ch){
+      if(ch >= '0' && ch <= '9')
+         return 1;
+      return -1;
+   }
+float operation(int a, int b, char op){
+      
+      if(op == '+')
+         return b+a;
+      else if(op == '-')
+         return b-a;
+      else if(op == '*')
+         return b*a;
+      else if(op == '/')
+         return b/a;
+      else if(op == '^')
+         return pow(b,a);
+      else
+   return INT_MIN;
+}
+float postfixEval(string postfix){
+   int a, b;
+   stack<float> stk;
+   string::iterator it;
+   for(it=postfix.begin(); it!=postfix.end(); it++){
+    
+      if(isOperator(*it) != -1){
+         a = stk.top();
+          stk.pop();
+         b = stk.top();
+         stk.pop();
+         stk.push(operation(a, b, *it));
+      }else if(isOperand(*it) > 0){
+         stk.push(scanNum(*it));
+      }
+   }
+   return stk.top();
+}
+main(){
+   string post = "21+3*";
+   cout <<postfixEval(post);
+}
diff --git a/DSA/DSA-CPP/Stacks/Prefix.cpp b/DSA/DSA-CPP/Stacks/Prefix.cpp
new file mode 100644
index 00000000..7cb5e072
--- /dev/null
+++ b/DSA/DSA-CPP/Stacks/Prefix.cpp
@@ -0,0 +1,44 @@
+#include<bits/stdc++.h>
+using namespace std;
+
+int prefixEvaluation(string s){
+    stack<int>st;
+
+    for(int x=s.length()-1;x>=0;x--){
+        if(s[x]>='0' && s[x]<='9'){
+            st.push(s[x]-'0');
+        }
+        else{
+            int op1=st.top();
+            st.pop();
+            int op2=st.top();
+            st.pop();
+
+            switch(s[x]){
+                case '+':
+                st.push(op1+op2);
+                break;
+                case '-':
+                st.push(op1-op2);
+                break;
+                case '*':
+                st.push(op1*op2);
+                break;
+                case '/':
+                st.push(op1/op2);
+                break;
+                case '^':
+                st.push(op1^op2);
+                break;
+            }
+        }
+    }
+    return st.top();
+}
+
+int main(){
+    
+    
+    cout<<prefixEvaluation("-+7*45+20");
+    return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/Stacks/PrintReverse.cpp b/DSA/DSA-CPP/Stacks/PrintReverse.cpp
new file mode 100644
index 00000000..c6d60f9b
--- /dev/null
+++ b/DSA/DSA-CPP/Stacks/PrintReverse.cpp
@@ -0,0 +1,26 @@
+#include<bits/stdc++.h>
+using namespace std;
+
+void revereseSentence(string s){
+    stack<string>st;
+    for(int x=0;x<s.length();x++){
+        string word="";
+        while(s[x]!=' ' && x<s.size()){
+            word+=s[x];
+            x++;
+        }
+        st.push(word);
+    }
+
+    while(!st.empty()){
+        cout<<st.top()<<" ";
+        st.pop();
+    }cout<<endl;
+}
+
+int main(){
+    
+    string s="Hey, how are your doing?";
+    revereseSentence(s);
+    return 0;
+}       
\ No newline at end of file
diff --git a/DSA/DSA-CPP/Stacks/PushPopEmpty.cpp b/DSA/DSA-CPP/Stacks/PushPopEmpty.cpp
new file mode 100644
index 00000000..02c947bf
--- /dev/null
+++ b/DSA/DSA-CPP/Stacks/PushPopEmpty.cpp
@@ -0,0 +1,57 @@
+#include<bits/stdc++.h>
+using namespace std;
+#define n 100
+
+class stackk{
+    int* ar;
+    int top;
+
+    public:
+    stackk(){
+        ar=new int[n];
+        top=-1;
+    }
+
+    void push(int x){
+        if(top==n-1){
+            cout<<"Stack Overflow"<<'\n';
+            return;
+        }
+        top++;
+        ar[top]=x;
+    }
+
+    void pop(){
+        if(top==-1){
+            cout<<"Stack is empty"<<'\n';
+            return;
+        }
+        top--;
+    }
+
+    int Top(){
+        if(top==-1){
+            cout<<"No element in stack"<<'\n';
+            return -1;
+        }
+        return ar[top];
+    }
+
+    bool empty(){
+        return top==-1;
+    }
+};
+
+
+int main(){
+    stackk st;
+
+    st.push(1);
+    st.push(2);
+    st.push(3);
+    st.pop();
+    cout<<st.Top()<<'\n';
+    cout<<st.empty()<<'\n';
+
+    return 0;
+}       
\ No newline at end of file
diff --git a/DSA/DSA-CPP/Stacks/Reverse.cpp b/DSA/DSA-CPP/Stacks/Reverse.cpp
new file mode 100644
index 00000000..57e2a69b
--- /dev/null
+++ b/DSA/DSA-CPP/Stacks/Reverse.cpp
@@ -0,0 +1,43 @@
+#include<bits/stdc++.h>
+using namespace std;
+
+void insertAtBottom(stack<int>&st,int ele){
+
+    if(st.empty()){
+        st.push(ele);
+        return;
+    }
+    int topel=st.top();
+    st.pop();
+    insertAtBottom(st,ele);
+    st.push(topel);
+}
+
+void reverse(stack<int>&st){
+
+    if(st.empty()){
+        return;
+    }
+    int ele=st.top();
+    st.pop();
+    reverse(st);
+    insertAtBottom(st,ele);
+}
+
+int main(){
+
+    stack<int>st;
+    st.push(1);
+    st.push(2);
+    st.push(3);
+    st.push(4);
+    st.push(5);
+    st.push(6);
+    reverse(st);
+    while(!st.empty()){
+        cout<<st.top()<<" ";
+        st.pop();
+    }
+
+    return 0;
+}   
\ No newline at end of file
diff --git a/DSA/DSA-CPP/Stacks/Stack.cpp b/DSA/DSA-CPP/Stacks/Stack.cpp
new file mode 100644
index 00000000..73ab642d
--- /dev/null
+++ b/DSA/DSA-CPP/Stacks/Stack.cpp
@@ -0,0 +1,129 @@
+//Stack implementation
+#include <bits/stdc++.h>
+using namespace std;
+
+class Stack
+{
+	int top;
+	int arr[10000];
+	int sze;
+
+public:
+	Stack(int sz)
+	{
+		top = -1;
+		sze = sz;
+	}
+
+	void push(int x)
+	{
+		arr[++top] = x;
+	}
+
+	void pop()
+	{
+		top--;
+	}
+
+	int tos()
+	{
+		return arr[top];
+	}
+
+	int size()
+	{
+		return (top + 1);
+	}
+
+	bool isEmpty()
+	{
+		if (top == -1)
+		{
+			return true;
+		}
+		return false;
+	}
+
+	bool isFull()
+	{
+		if (top == sze - 1)
+		{
+			return true;
+		}
+		return false;
+	}
+	void show()
+	{
+		for (int i = top; i >= 0; i--)
+		{
+			cout << arr[i] << " ";
+		}
+	}
+};
+
+int main(void)
+{
+	Stack s(10);
+	int ch = 1;
+	while (ch != 7)
+	{
+		cout << "\nEnter your choice:\n1.Push\n2.Pop\n3.Show top\n4.Size\n5.Is empty\n6.Show\n7.Quit\nChoice: ";
+		cin >> ch;
+		if (ch == 1)
+		{
+			if (s.isFull())
+			{
+				cout << "\nOVERFLOW!!";
+			}
+			else
+			{
+				int x;
+				cout << "\nEnter value: ";
+				cin >> x;
+				s.push(x);
+			}
+		}
+		else if (ch == 2)
+		{
+			if (s.isEmpty())
+			{
+				cout << "\nUNDERFLOW!!";
+			}
+			else
+			{
+				s.pop();
+			}
+		}
+		else if (ch == 3)
+		{
+			if (s.isEmpty())
+			{
+				cout << "\nEmpty Stack!!";
+			}
+			else
+			{
+				cout << "\nTop os Stack is: " << s.tos();
+			}
+		}
+		else if (ch == 4)
+		{
+			cout << "\nSize: " << s.size();
+		}
+		else if (ch == 5)
+		{
+			cout << "\n Is empty: " << s.isEmpty();
+		}
+		else if (ch == 6)
+		{
+			if (s.isEmpty())
+			{
+				cout << "\nEmpty Stack!!";
+			}
+			else
+			{
+				cout << "\nStack is :";
+				s.show();
+			}
+		}
+	}
+}
diff --git a/DSA/DSA-CPP/Stacks/implementingstackusingarray.cpp b/DSA/DSA-CPP/Stacks/implementingstackusingarray.cpp
new file mode 100644
index 00000000..316fcbda
--- /dev/null
+++ b/DSA/DSA-CPP/Stacks/implementingstackusingarray.cpp
@@ -0,0 +1,49 @@
+#include <bits/stdc++.h>
+using namespace std;
+
+class Stack{
+    public:
+    int size;
+    int top;
+    int *arr;
+
+    int isempty(){
+        if(top==-1){
+            return 1;
+        }
+        return 0;
+    }
+    int isfull(){
+        if(top==size-1){
+            return 1;
+        }
+        return 0;
+    }
+};
+
+int main()
+{
+    // Stack s;
+    // s.size=80;
+    // s.top=-1;
+    // s.arr=new int[s.size];
+
+    Stack *s=new Stack;
+    s->size=4; 
+    s->top=-1;
+    s->arr=new int[s->size];
+
+    s->arr[++s->top]=4;
+    s->arr[++s->top]=5;
+    s->arr[++s->top]=8;
+    s->arr[++s->top]=9;
+     
+    if(s->isempty()){
+        cout<<"The stack is empty";
+    }
+    else{
+        cout<<"The stack is not empty";
+    }
+
+    return 0;
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/Stacks/parenthesesCheck.cpp b/DSA/DSA-CPP/Stacks/parenthesesCheck.cpp
new file mode 100644
index 00000000..caa8b8b6
--- /dev/null
+++ b/DSA/DSA-CPP/Stacks/parenthesesCheck.cpp
@@ -0,0 +1,88 @@
+#include <bits/stdc++.h>
+
+using namespace std;
+
+string ltrim(const string &);
+string rtrim(const string &);
+struct stackk
+{
+    int top = -1;
+
+    int arr[10000];
+};
+
+char val;
+
+int isEmpty(struct stackk *ptr)
+{
+    if (ptr->top == -1)
+    {
+        return 1;
+    }
+    return 0;
+}
+void push(struct stackk *ptr, char val)
+{
+    ptr->top++;
+    ptr->arr[ptr->top] = val;
+}
+char pop(struct stackk *ptr)
+{
+    if (isEmpty(ptr))
+    {
+        return 0;
+    }
+    val = ptr->arr[ptr->top];
+
+    ptr->top--;
+    // cout<<val;
+    return val;
+}
+string isBalanced(string s)
+{
+
+    struct stackk *ar = new stackk;
+    for (int i = 0; i < s.size(); i++)
+    {
+        if (s[i] == '(' || s[i] == '[' || s[i] == '{')
+        {
+            push(ar, s[i]);
+        }
+        else
+        {
+            if (pop(ar) == 0)
+            {
+
+                return "NO";
+            }
+
+            else if (s[i] == ')' && val != '(')
+            {
+                cout << val;
+                return "NO";
+            }
+            else if (s[i] == ']' && val != '[')
+            {
+                return "NO";
+            }
+            else if (s[i] == '}' && val != '{')
+            {
+                return "NO";
+            }
+        }
+    }
+    if (isEmpty(ar))
+    {
+
+        return "YES";
+    }
+
+    return "NO";
+}
+
+int main()
+{
+    string a;
+    cin >> a;
+    cout << isBalanced(a);
+}
diff --git a/DSA/DSA-CPP/Tree/avl.cpp b/DSA/DSA-CPP/Tree/avl.cpp
new file mode 100644
index 00000000..0e4942a9
--- /dev/null
+++ b/DSA/DSA-CPP/Tree/avl.cpp
@@ -0,0 +1,187 @@
+#include <iostream>
+
+struct TreeNode{
+	TreeNode* left;
+	TreeNode* right;
+	int data, height;
+	TreeNode(const int& data): data(data), left(nullptr), right(nullptr), height(0){}
+};
+ 
+int height(TreeNode* node){
+	/**
+	 * Return the height of the node
+	 */
+
+	if(node == nullptr){ return -1; }
+	return node->height;
+}
+
+void updateheight(TreeNode*& node){
+	/**
+	 * Update the height of the node
+	 */
+
+	if(node == nullptr){ return; }
+	node->height = 1 + std::max(height(node->left), height(node->right));
+}
+
+int balance_factor(TreeNode* node){
+	/**
+	 * Find the balance factor of the given node
+	 */
+
+	if(node != nullptr){ return height(node->right) - height(node->left); }
+	return 0;
+}
+
+void leftrotation(TreeNode*& node){
+	/**
+	 * Rotate the sub-tree rooted with the node to left
+	 */
+
+	if(node == nullptr){ return; }
+
+	TreeNode* a = node;
+	TreeNode* b = node->right;
+
+	a->right = b->left;
+	b->left = a;
+	node = b;
+
+	updateheight(a);
+	updateheight(b);
+}
+
+void rightrotation(TreeNode*& node){
+	/**
+	 * Rotate the sub-tree rooted with the node to right
+	 */
+
+	if(node == nullptr){ return; }
+
+	TreeNode* a = node;
+	TreeNode* b = node->left;
+
+	a->left = b->right;
+	b->right= a;
+	node = b;
+
+	updateheight(a); 
+	updateheight(b);
+}
+
+void right_leftrotation(TreeNode*& node){
+	/**
+	 * Rotate the sub-tree rooted with the node to the right and then left
+	 */
+
+	if(node == nullptr){ return; }
+	
+	rightrotation(node->right);
+	leftrotation(node);
+}
+
+void left_rightrotation(TreeNode*& node){
+	/**
+	 * Rotate the sub-tree rooted with the node to the left and then right  
+	 */
+
+	if(node == nullptr){ return; }
+	
+	leftrotation(node->left);
+	rightrotation(node);
+}
+
+void insert(TreeNode*& root, const int& data){
+	/**
+	 * Create and insert the node in the appropriate place of the tree
+	 * Update the height of every node in the tree
+	 * Check the balance factor of the node and do the appropriate rotation
+	 * to make the tree balanced
+	 */
+
+	if(root == nullptr) { 
+		root = new TreeNode(data);
+	}
+	else if(root->data < data){ insert(root->right, data); }
+	else{ insert(root->left, data); }
+
+	updateheight(root);
+
+	const int initial_bal = balance_factor(root) ; 
+
+	if(initial_bal == 2){
+		int r_bal = balance_factor(root->right);
+		if(r_bal == 1 || r_bal == 0){ leftrotation(root); }	
+		else if(r_bal == -1){ right_leftrotation(root); }
+	}
+	else if(initial_bal == -2){
+		int l_bal = balance_factor(root->left); 
+		if(l_bal == 1 || l_bal == 0){ left_rightrotation(root); } 
+		else if(l_bal == -1){ rightrotation(root); }
+	}
+}
+
+void print(TreeNode* root){
+	if(root != nullptr){
+		std::cout << root->data << " "; 
+		print(root->left);
+		print(root->right);
+	}
+}
+
+int main(){
+	TreeNode* root = nullptr;
+	insert(root, 1);
+        insert(root, 2);
+        insert(root, 3);
+        insert(root, 4);
+        insert(root, 5);
+        insert(root, 6);
+        insert(root, 7);
+        insert(root, 8);
+        insert(root, 9);
+        insert(root, 10);
+
+	/*
+
+      Binary tree                         
+	   1  
+	    \
+	     2
+	      \
+	       3
+	        \
+		 4
+		  \
+		   5
+		    \
+		     6
+		      \
+		       7
+		        \
+			 8
+			  \
+			   9
+			    \
+			     10
+	
+	Output: 1 2 3 4 5 6 7 8 9 10
+	Here the balance factor of the root node is 9                          
+
+	AVL Tree
+	   4
+	 /  \
+	2    8
+       /\   / \
+      1  3 6   9
+	  / \   \
+	 5   7	 10
+
+	Output: 4 2 1 3 8 6 5 7 9 10
+	Here the balance factor of the root node is 1
+
+	*/
+
+	print(root);
+}
diff --git a/DSA/DSA-CPP/Tree/binary-search-tree.cpp b/DSA/DSA-CPP/Tree/binary-search-tree.cpp
new file mode 100644
index 00000000..0bd94920
--- /dev/null
+++ b/DSA/DSA-CPP/Tree/binary-search-tree.cpp
@@ -0,0 +1,238 @@
+#include <iostream>
+#include <cmath>
+
+//Structure of the Tree
+struct TreeNode{
+	int data;
+	TreeNode* left;
+	TreeNode* right;
+	TreeNode(const int& data): data(data), left(nullptr), right(nullptr){}
+};
+
+TreeNode* find(TreeNode* root, const int& data){
+	/**
+	 * Find the node that contains the given data and
+	 * return that node
+	 *
+	 * @params: `root` root/parent node of the tree
+	 * @params: `data` data to be find in the tree
+	 * @return: tree node that contains the data
+	 *
+	 * Average case Time Complexity: O(log(n))
+	 * Worst case Time Complexity: O(n)
+	 *
+	 */
+
+	if(root == nullptr) 	    { throw std::runtime_error("Error: find() cannot find the data. The data doesn't exist."); }
+	else if(root->data == data) { return root; }
+	else if(root->data < data)  { return find(root->right, data); }
+	else 			    { return find(root->left, data); }
+}
+
+void Insert(TreeNode*& root, const int& data){
+	/**
+	 * Create and Insert the node in the appropriate place of the tree
+	 *
+	 * @params: `root` root/parent node of the tree
+	 * @params: `data` data to be inserted in the tree
+	 * @return: void
+	 *
+	 * Average case Time Complexity: O(log(n))
+	 * Worst case Time Complexity: O(n)
+	 *
+	 */
+
+	if(root == nullptr) 	    { root = new TreeNode(data); }
+	else if(root->data == data) { throw std::runtime_error("The node already exist. Duplicates not allowed"); }
+	else if(root->data < data)  { Insert(root->right, data); }
+	else 			    { Insert(root->left, data); }
+}
+
+
+bool isfull(TreeNode* root){
+        /**
+         *
+         * Check if a binary tree is full or not
+         * A binary tree is full when every node in the 
+         * tree has either two or zero child nodes.
+         *
+         * @params: `root` root/parent node of the tree
+         *
+         * @return: true if it the binary tree is full else false
+         */
+
+        if(root == nullptr)                                     { return true; }
+        if(root->left == nullptr && root->right == nullptr)     { return true; }
+        if((root->left != nullptr && root->right != nullptr) )  { return isfull(root->left) && isfull(root->right); }
+        return false;
+}
+
+int depth(TreeNode* root){
+        /**
+         * Find the depth of the left most tree.
+         * Here the depth of the left most tree is found but 
+         * it is only a matter of preference.
+         *
+         * @params: `root` root/parent node of the tree
+         *
+         * @return: `d` returns the depth of the left most tree
+         */
+
+        int d = 0;
+        while(root != nullptr){
+                root = root->left;
+                d++;
+        }
+        return d;
+}
+
+
+bool perfect_recursive(TreeNode* cur, int depth, int level = 0){
+        /**
+         * A Recursive strategy to check if a tree is perfect or not
+         *
+         * A binary tree is perfect if when all the inner node's
+         * has two childs and the all the leaf node's are at the
+         * same level.
+         *
+         * @params: `cur`  node of the tree
+         * @params: `depth` depth of the left most tree
+         * @params: `level` level of the cur node
+         *
+         * @return: true if the binary tree is perfect else false
+         */
+
+        if(cur == nullptr)                                { return true; }
+        if(cur->left == nullptr && cur->right == nullptr) { return depth == level; }
+        if(cur->left == nullptr || cur->right == nullptr) { return false; }
+        if(cur->left != nullptr && cur->right != nullptr) {
+                return perfect_recursive(cur->left, depth, level+1) && perfect_recursive(cur->right, depth, level+1);
+        }
+}
+
+int count_nodes(TreeNode* cur){
+        /**
+         * Count the number of node's in the tree
+         * @params: `cur`  node of the tree
+         */
+
+        if(cur != nullptr){ return 1 + count_nodes(cur->left) + count_nodes(cur->right); }
+}
+
+
+int height(TreeNode* cur){
+        /**
+         * Find the height of the tree
+         *
+         * @params: `cur`  node of the tree
+         */
+
+        if(cur != nullptr){ return 1 + std::max(height(cur->left),  height(cur->right)); }
+}
+
+bool perfect(TreeNode* cur){
+        /**
+         * Knowing the height and the number of node's of
+         * the tree we can find whether the tree is perfect or not
+         *
+         * A binary tree is perfect if when all the inner node's
+         * has two childs and the all the leaf node's are at the
+         * same level.
+         */
+
+        int h = height(cur) - 1;
+        int N = count_nodes(cur);
+        if(N == pow(2, h+1) - 1) { return true; }
+        return false;
+}
+
+bool isperfect(TreeNode* root){
+        /**
+         *
+         * @params: `root` root/parent node of the tree
+         *
+         * @return: true if the binary tree is perfect else false
+         */
+
+        if(perfect(root))                           { return true; }
+        //if(perfect_recursive(root, depth(root) - 1)) { return true; }
+	return false;
+}
+
+
+void print(TreeNode* root){
+	/**
+	 * Print the tree in an inorder fashion
+	 * 
+	 * @params: `root` root/parent node of the tree
+	 * @return: void
+	 */
+	if(root != nullptr){
+		print(root->left);
+		std::cout << root->data << " ";
+		print(root->right);
+	}	
+}
+
+void free(TreeNode* root){
+	/*
+	 * Free up the memory in the heap
+	 *
+	 * @params: `root` root/parent node of the tree
+	 */
+
+	if(root != nullptr){
+		free(root->left);
+		free(root->right);
+		delete root;
+		root = nullptr;
+	}
+}
+
+int main(){
+	TreeNode* root = nullptr;
+
+	Insert(root, 37);
+	Insert(root, 19);
+	Insert(root, 4);
+	Insert(root, 22);
+	Insert(root, 51);
+	Insert(root, 55);
+	Insert(root, 42);
+	Insert(root, 20);
+	Insert(root, 11);
+	Insert(root, 2);
+	
+	print(root);
+
+	TreeNode* n = find(root, 19);
+	std::cout << "\nValue of n: " << n->data << std::endl;
+
+	if(isfull(root)) { std::cout << "The binary tree is FULL" << std::endl; }
+	else 		{ std::cout << "The binary tree is not FULL" << std::endl; }
+
+	if(isperfect(root)) { std::cout << "The binary tree is PERFECT" << std::endl; }
+	else 		   { std::cout << "The binary tree is not PERFECT" << std::endl; }
+
+	/* 
+	Tree structure
+		37
+	       /  \
+	      19  51
+	     / \   / \
+	    4  22 42 55
+	   /\	/ 	
+	  2 11  20
+
+	OUTPUT:
+	  2 4 11 19 20 22 37 42 51 55
+	  Value of n: 19
+	  The binary tree is not FULL
+	  The binary tree is not PERFECT
+	*/
+	
+
+	// free the memory
+	free(root);
+	return 0;
+}
diff --git a/DSA/DSA-CPP/Tree/in-order-predecessor-successor.cpp b/DSA/DSA-CPP/Tree/in-order-predecessor-successor.cpp
new file mode 100644
index 00000000..c8b367a7
--- /dev/null
+++ b/DSA/DSA-CPP/Tree/in-order-predecessor-successor.cpp
@@ -0,0 +1,173 @@
+#include <iostream>
+#include <stdexcept>
+
+struct TreeNode{
+	TreeNode* right;
+	TreeNode* left;
+	int data;
+	TreeNode(const int& data): data(data), right(nullptr), left(nullptr){}
+};
+
+void Insert(TreeNode*& root, const int& data){
+        /**
+         * Create and Insert the node in the appropriate place of the tree
+         *
+         * @params: `root` root/parent node of the tree
+         * @params: `data` data to be inserted in the tree
+         * @return: void
+         *
+         * Average case Time Complexity: O(log(n))
+         * Worst case Time Complexity: O(n)
+         *
+         */
+
+        if(root == nullptr)         { root = new TreeNode(data); }
+        else if(root->data == data) { throw std::runtime_error("The node already exist. Duplicates not allowed"); }
+        else if(root->data < data)  { Insert(root->right, data); }
+        else                        { Insert(root->left, data); }
+}
+
+int rightmost(TreeNode* root){
+	/**
+	 * Find and return the rightmost value of the sub-tree
+	 *
+         * @params: `root` root/parent node of the tree
+	 *
+	 * @return: value of the node at the rightmost end of the sub tree
+	 */
+
+	if(root->right == nullptr){ return root->data;}
+	return rightmost(root->right);
+}
+
+int prevSmallerAncester(TreeNode* root, const int& data, int ancestor){	
+	/**
+	 * Find and return the previous smaller value to data
+	 *
+         * @params: `root` root/parent node of the tree
+	 * @params: `data` data to compare with
+	 * @params: `ancestor` holds the previous smaller value to data
+	 * 
+	 * @return: previous smaller value to data
+	 */
+
+	if(root->data < data){ return prevSmallerAncester(root->right, data, root->data); }
+	else if(root->data > data){ return prevSmallerAncester(root->left, data, ancestor); }
+	return ancestor;
+
+}
+
+int inorderpred(TreeNode* cur, const int& data, TreeNode* root){
+	/**
+	 * Find the in-order predecessor of the given data
+	 *
+	 * @params: `cur` root/parent node of the tree
+	 * @params: `data` data where it's predecessor to be found
+	 * @params: `root` root of the tree for the prevSmallerAncester function
+	 *
+	 * @return: in-order predecessor for the given data
+	 */
+
+	if(cur == nullptr){ throw std::runtime_error("Nullptr"); }
+	else if(cur->data == data){
+		if(cur->left != nullptr){ return rightmost(cur->left); }
+		return prevSmallerAncester(root, data, 0);
+	}
+	else if(cur->data < data){ return inorderpred(cur->right, data, root); }
+	else { return inorderpred(cur->left, data, root); }
+}
+
+int leftmost(TreeNode* cur){
+	/**
+	 * Find and return the leftmost value of the sub-tree
+	 *
+         * @params: `root` root/parent node of the tree
+	 *
+	 * @return: value of the node at the leftmost end of the sub tree
+	 */
+	
+	if(cur->left != nullptr){ return leftmost(cur->left); }
+	return cur->data;
+}
+
+int successor(TreeNode* root, const int& data, int suc){
+	/**
+	 * Find and return the lowest greatest value to data
+	 *
+         * @params: `root` root/parent node of the tree
+	 * @params: `data` data to compare with
+	 * @params: `ancestor` holds the previous smaller value to data
+	 * 
+	 * @return: lowest greatest value to data
+	 */
+	
+	if(root->data < data){ return successor(root->right, data, suc); }
+	else if(root->data > data){ return successor(root->left, data, root->data); }
+	return suc;
+}
+
+int inordersuc(TreeNode* cur, const int& data, TreeNode* root){
+	/**
+	 * Find the in-order successor of the given data
+	 *
+	 * @params: `cur` root/parent node of the tree
+	 * @params: `data` data where it's predecessor to be found
+	 * @params: `root` root of the tree for the prevSmallerAncester function
+	 *
+	 * @return: in-order successor for the given data
+	 */
+	
+	if(cur == nullptr){ throw std::runtime_error("Nullptr"); }
+	else if(cur->data == data){
+		if(cur->right != nullptr){ leftmost(cur->right); }
+		return successor(root, data, 0);
+	}
+	else if(cur->data < data){return inordersuc(cur->right, data, root); }
+	else{return inordersuc(cur->left, data, root); }
+}
+
+void print(TreeNode* root){
+	if(root != nullptr){
+		print(root->left);
+		std::cout << root->data << " ";
+		print(root->right);
+	}
+}
+
+int main(){
+	TreeNode* root = nullptr;
+
+	Insert(root, 37);
+        Insert(root, 19);
+        Insert(root, 4);
+        Insert(root, 22);
+        Insert(root, 51);
+        Insert(root, 55);
+        Insert(root, 42);
+        Insert(root, 20);
+        Insert(root, 11);
+        Insert(root, 2);
+	
+	/*
+        Tree structure
+                37
+               /  \
+              19  51
+             / \   / \
+            4  22 42 55
+           /\   /
+          2 11  20
+
+        OUTPUT:
+		In-order predecessor of 42 is: 37
+	 */
+
+	print(root);
+	std::cout << std::endl;
+	int val = 55;
+	std::cout << "In-order successor " << inordersuc(root, val, root) << std::endl; 
+	std::cout << "In-order pred " << inorderpred(root, val, root) << std::endl; 
+}
+
+
+
diff --git a/DSA/DSA-CPP/Tree/max-heap.cpp b/DSA/DSA-CPP/Tree/max-heap.cpp
new file mode 100644
index 00000000..fd6734b3
--- /dev/null
+++ b/DSA/DSA-CPP/Tree/max-heap.cpp
@@ -0,0 +1,139 @@
+/*
+ Implementation of the min-heap using an array.
+
+ Max-Heap is a Binary tree where each parent nodes value is greater 
+ than that of their child. It is used when you need quick access to 
+ the largest number in the array.
+*/
+
+#include <iostream>
+#include <stdexcept>
+
+class Heap{
+	public:
+		void insert(const int& data);
+		void removemin();
+		void print();
+		Heap();
+		~Heap();
+
+	private:
+		// size - number of elements in the array
+		// capacity - number of elements the array can store
+		int size, capacity;
+		int *items_;
+
+		int parent(unsigned index) const;
+		int child(unsigned index) const;
+
+		void heapifyUP(unsigned index);
+		void heapifyDOWN(unsigned index);
+		void growArray();
+
+};
+
+Heap::Heap(): size(0), capacity(2){
+	items_ = new int[capacity + 1];
+}
+
+Heap::~Heap(){
+	delete items_;
+	items_ = nullptr;
+}
+
+int Heap::parent(unsigned index) const{ return index/2; }
+
+void Heap::growArray(){
+	/**
+	  * Inorder to accommodate more numbers in the array
+	  * Allocate memory in the heap 
+	  * Double the size of the old array up to (capacity*2) + 1
+	  * Copy the elements of the previous array into the new array
+	  */
+
+	// Doubling the size of the array
+	int* new_Array = new int[(capacity * 2) + 1];
+	// Copying the elements of the old array to the new array
+	for(int i=1; i<=size; i++){ new_Array[i] = items_[i]; }
+	// Doubling the capacity
+	capacity *= 2;
+	// delete the items_ inorder to avoid any memory leak
+	delete items_;
+	// set items_ to point to new_Array
+	items_ = new_Array;
+}
+
+void Heap::insert(const int& data){
+	// if size == capacity it means the array is full and need to grow
+	if(size == capacity){ growArray(); }
+	items_[++size] = data;
+	heapifyUP(size);
+}
+
+void Heap::heapifyUP(unsigned index){
+	if(index > 1){
+		if(items_[index] > items_[parent(index)]){
+			std::swap(items_[index], items_[parent(index)]);
+			heapifyUP(parent(index));
+		}
+	}
+}
+
+void Heap::removemin(){
+	std::swap(items_[1], items_[size--]);
+	heapifyDOWN(1);
+}
+
+int Heap::child(unsigned index) const{
+	unsigned left = index * 2;
+	unsigned right = (index * 2) + 1;
+
+	if(right > size){ return left; }
+	else if(items_[left] >= items_[right]){ return left; }
+	return right;
+}
+
+void Heap::heapifyDOWN(unsigned index){
+	int childindex = child(index);
+	if(index*2 <= size){
+		if(items_[index] < items_[childindex]){
+			std::swap(items_[index], items_[childindex]);
+			heapifyDOWN(childindex);
+		}
+	}
+}
+
+void Heap::print(){
+	for(int i=1; i<=size; i++){ std::cout << items_[i] << " "; }
+	std::cout << std::endl;
+}
+
+
+int main(){
+	Heap heap;
+
+	heap.insert(4);
+	heap.insert(10);
+	heap.insert(2);
+	heap.insert(22);
+	heap.insert(45);
+	heap.insert(18);
+	heap.insert(-8);
+	heap.insert(95);
+	heap.insert(13);
+	heap.insert(42);
+
+	heap.removemin();
+	heap.removemin();
+
+	heap.print();
+	/*
+	Output: 42 22 18 13 10 2 -8 4
+	
+	Time complexity to build the heap: O(n)
+	Time complexity to remove min: O(log(n))
+	Time complexity to remove all elements: O(n*log(n))
+	*/
+	return 0;
+
+}
diff --git a/DSA/DSA-CPP/Tree/min-heap.cpp b/DSA/DSA-CPP/Tree/min-heap.cpp
new file mode 100644
index 00000000..583c2b37
--- /dev/null
+++ b/DSA/DSA-CPP/Tree/min-heap.cpp
@@ -0,0 +1,133 @@
+/*
+ Implementation of the min-heap using an array.
+
+ Min-Heap is a Binary tree where each child nodes value is greater 
+ than that of their parent. It is used when you need quick access to 
+ the smallest number in the array.
+*/
+
+#include <iostream>
+#include <stdexcept>
+
+class Heap{
+	public:
+		void insert(const int& data);
+		void removemin();
+		void print();
+		Heap();
+
+	private:
+		// size - number of elements in the array
+		// capacity - number of elements the array can store
+		int size, capacity;
+		int *items_;
+
+		int parent(unsigned index) const;
+		int child(unsigned index) const;
+
+		void heapifyUP(unsigned index);
+		void heapifyDOWN(unsigned index);
+		void growArray();
+
+};
+
+Heap::Heap(): size(0), capacity(2){
+	items_ = new int[capacity + 1];
+}
+
+int Heap::parent(unsigned index) const{ return index/2; }
+
+void Heap::growArray(){
+	/**
+	  * Inorder to accommodate more numbers in the array
+	  * Allocate memory in the heap 
+	  * Double the size of the old array up to (capacity*2) + 1
+	  * Copy the elements of the previous array into the new array
+	  */
+
+	// Doubling the size of the array
+	int* new_Array = new int[(capacity * 2) + 1];
+	// Copying the elements of the old array to the new array
+	for(int i=1; i<=size; i++){ new_Array[i] = items_[i]; }
+	// Doubling the capacity
+	capacity *= 2;
+	// delete the items_ inorder to avoid any memory leak
+	delete items_;
+	// set items_ to point to new_Array
+	items_ = new_Array;
+}
+
+void Heap::insert(const int& data){
+	// if size == capacity it means the array is full and need to grow
+	if(size == capacity){ growArray(); }
+	items_[++size] = data;
+	heapifyUP(size);
+}
+
+void Heap::heapifyUP(unsigned index){
+	if(index > 1){
+		if(items_[index] < items_[parent(index)]){
+			std::swap(items_[index], items_[parent(index)]);
+			heapifyUP(parent(index));
+		}
+	}
+}
+
+void Heap::removemin(){
+	std::swap(items_[1], items_[size--]);
+	heapifyDOWN(1);
+}
+
+int Heap::child(unsigned index) const{
+	unsigned left = index * 2;
+	unsigned right = (index * 2) + 1;
+
+	if(right > size){ return left; }
+	else if(items_[left] <= items_[right]){ return left; }
+	return right;
+}
+
+void Heap::heapifyDOWN(unsigned index){
+	int childindex = child(index);
+	if(index*2 <= size){
+		if(items_[index] > items_[childindex]){
+			std::swap(items_[index], items_[childindex]);
+			heapifyDOWN(childindex);
+		}
+	}
+}
+
+void Heap::print(){
+	for(int i=1; i<=size; i++){ std::cout << items_[i] << " "; }
+	std::cout << std::endl;
+}
+
+
+int main(){
+	Heap heap;
+
+	heap.insert(4);
+	heap.insert(10);
+	heap.insert(2);
+	heap.insert(22);
+	heap.insert(45);
+	heap.insert(18);
+	heap.insert(-8);
+	heap.insert(95);
+	heap.insert(13);
+	heap.insert(42);
+
+	heap.removemin();
+	heap.removemin();
+
+	heap.print();
+	/*
+	Output: 4 10 18 13 42 22 45 95
+	
+	Time complexity to build the heap: O(n)
+	Time complexity to remove min: O(log(n))
+	Time complexity to remove all elements: O(n*log(n))
+	*/
+	return 0;
+
+}
diff --git a/DSA/DSA-CPP/Tree/tree-traversals-bst.cpp b/DSA/DSA-CPP/Tree/tree-traversals-bst.cpp
new file mode 100644
index 00000000..c4083376
--- /dev/null
+++ b/DSA/DSA-CPP/Tree/tree-traversals-bst.cpp
@@ -0,0 +1,123 @@
+#include <iostream>
+
+//Structure of the Tree
+struct TreeNode{
+	int data;
+	TreeNode* left;
+	TreeNode* right;
+	TreeNode(const int& data): data(data), left(nullptr), right(nullptr){}
+};
+
+void Insert(TreeNode*& root, const int& data){
+	/**
+	 * Create and Insert the node in the appropriate place of the tree
+	 *
+	 * @params: `root` root/parent node of the tree
+	 * @params: `data` data to be inserted in the tree
+	 * @return: void
+	 *
+	 * Average case Time Complexity: O(log(n))
+	 * Worst case Time Complexity: O(n)
+	 *
+	 */
+
+	if(root == nullptr) 	    { root = new TreeNode(data); }
+	else if(root->data == data) { throw std::runtime_error("The node already exist. Duplicates not allowed"); }
+	else if(root->data < data)  { Insert(root->right, data); }
+	else 			    { Insert(root->left, data); }
+}
+
+void Pre_Order(TreeNode* root){
+	/**
+	 * Print the tree in an pre-order fashion
+	 * 
+	 * @params: `root` root/parent node of the tree
+	 */
+	if(root != nullptr){
+		std::cout << root->data << " ";
+		Pre_Order(root->left);
+		Pre_Order(root->right);
+	}	
+}
+
+void In_Order(TreeNode* root){
+	/**
+	 * Print the tree in an in-order fashion
+	 * 
+	 * @params: `root` root/parent node of the tree
+	 */
+	if(root != nullptr){
+		In_Order(root->left);
+		std::cout << root->data << " ";
+		In_Order(root->right);
+	}	
+}
+
+void Post_Order(TreeNode* root){
+	/**
+	 * Print the tree in an post-order fashion
+	 * 
+	 * @params: `root` root/parent node of the tree
+	 */
+	if(root != nullptr){
+		Post_Order(root->left);
+		Post_Order(root->right);
+		std::cout << root->data << " ";
+	}	
+}
+
+void free(TreeNode* root){
+	/*
+	 * Free up the memory in the heap
+	 *
+	 * @params: `root` root/parent node of the tree
+	 */
+
+	if(root != nullptr){
+		free(root->left);
+		free(root->right);
+		delete root;
+		root = nullptr;
+	}
+}
+
+int main(){
+	TreeNode* root = nullptr;
+	Insert(root, 37);
+	Insert(root, 19);
+	Insert(root, 4);
+	Insert(root, 2);
+	Insert(root, 11);
+	Insert(root, 22);
+	Insert(root, 20);
+	Insert(root, 51);
+	Insert(root, 55);
+	Insert(root, 42);
+	
+	In_Order(root);
+	std::cout << std::endl;
+	Pre_Order(root);
+	std::cout << std::endl;
+	Post_Order(root);
+	std::cout << std::endl;
+	/* 
+	Tree structure
+		37
+	       /  \
+	      19  51
+	     / \   / \
+	    4  22 42 55
+	   /\	/ 	
+	  2 11  20
+
+	  In_Order: 2 4 11 19 22 20 37 42 51 55 
+	  Post_Order: 2 11 4 20 22 19 42 55 51 37
+	  Pre_Order: 37 19 4 2 11 22 20 51 42 55
+
+	*/
+
+	
+	// free the memory
+	free(root);
+	return 0;
+}
diff --git a/DSA/DSA-CPP/bitManipulation/ChangeBit.cpp b/DSA/DSA-CPP/bitManipulation/ChangeBit.cpp
new file mode 100644
index 00000000..3023bc81
--- /dev/null
+++ b/DSA/DSA-CPP/bitManipulation/ChangeBit.cpp
@@ -0,0 +1,16 @@
+#include <bits/stdc++.h>
+using namespace std;
+typedef long long ll;
+
+int updateBit(int n, int pos, int payload)
+{
+    n = (n & (~(1 << pos)));
+    return (n | payload << pos);
+}
+
+int main(void)
+{
+    int n, pos, payload;
+    cin >> n >> pos >> payload;
+    cout << updateBit(n, pos, payload);
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/bitManipulation/clearBit.cpp b/DSA/DSA-CPP/bitManipulation/clearBit.cpp
new file mode 100644
index 00000000..a484a3b3
--- /dev/null
+++ b/DSA/DSA-CPP/bitManipulation/clearBit.cpp
@@ -0,0 +1,15 @@
+#include <bits/stdc++.h>
+using namespace std;
+typedef long long ll;
+
+int clearBit(int n, int pos)
+{
+    return (n & (~(1 << pos)));
+}
+
+int main(void)
+{
+    int n, pos;
+    cin >> n >> pos;
+    cout << clearBit(n, pos);
+}
diff --git a/DSA/DSA-CPP/bitManipulation/getBit.cpp b/DSA/DSA-CPP/bitManipulation/getBit.cpp
new file mode 100644
index 00000000..a3219077
--- /dev/null
+++ b/DSA/DSA-CPP/bitManipulation/getBit.cpp
@@ -0,0 +1,23 @@
+#include <bits/stdc++.h>
+using namespace std;
+typedef long long ll;
+
+int getBit(int n, int pos)
+{
+    return ((n & (1 << pos)) != 0);
+}
+
+int main(void)
+{
+    int n, pos;
+    cin >> n >> pos;
+    int res = getBit(n, pos);
+    if (!res)
+    {
+        cout << "Opss!! Not 1 at position";
+    }
+    else
+    {
+        cout << "Yeah!! Found 1 at position";
+    }
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/bitManipulation/questions/countOne.cpp b/DSA/DSA-CPP/bitManipulation/questions/countOne.cpp
new file mode 100644
index 00000000..b2f28438
--- /dev/null
+++ b/DSA/DSA-CPP/bitManipulation/questions/countOne.cpp
@@ -0,0 +1,21 @@
+#include <bits/stdc++.h>
+using namespace std;
+typedef long long ll;
+
+int countOne(int n)
+{
+    int ans = 0;
+    while (n)
+    {
+        ans++;
+        n = n & n - 1;
+    }
+    return ans;
+}
+
+int main(void)
+{
+    int n;
+    cin >> n;
+    cout << countOne(n);
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/bitManipulation/questions/findUnique.cpp b/DSA/DSA-CPP/bitManipulation/questions/findUnique.cpp
new file mode 100644
index 00000000..8ec9e67a
--- /dev/null
+++ b/DSA/DSA-CPP/bitManipulation/questions/findUnique.cpp
@@ -0,0 +1,25 @@
+#include <bits/stdc++.h>
+using namespace std;
+typedef long long ll;
+
+int findUnique(vector<int> vec, int n)
+{
+    int ans = vec[0];
+    for (int i = 1; i < n; i++)
+    {
+        ans = ans ^ vec[i];
+    }
+    return ans;
+}
+
+int main(void)
+{
+    int n;
+    cin >> n;
+    vector<int> vec(n);
+    for (int i = 0; i < n; i++)
+    {
+        cin >> vec[i];
+    }
+    cout << findUnique(vec, n);
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/bitManipulation/questions/powerOf2.cpp b/DSA/DSA-CPP/bitManipulation/questions/powerOf2.cpp
new file mode 100644
index 00000000..05e21891
--- /dev/null
+++ b/DSA/DSA-CPP/bitManipulation/questions/powerOf2.cpp
@@ -0,0 +1,15 @@
+#include <bits/stdc++.h>
+using namespace std;
+typedef long long ll;
+
+bool powerOfTwo(int n)
+{
+    return (n && !(n & n - 1));
+}
+
+int main(void)
+{
+    int n;
+    cin >> n;
+    cout << powerOfTwo(n);
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/bitManipulation/questions/printSubarray.cpp b/DSA/DSA-CPP/bitManipulation/questions/printSubarray.cpp
new file mode 100644
index 00000000..79397475
--- /dev/null
+++ b/DSA/DSA-CPP/bitManipulation/questions/printSubarray.cpp
@@ -0,0 +1,31 @@
+#include <bits/stdc++.h>
+using namespace std;
+typedef long long ll;
+
+void printSubset(vector<int> vec, int n)
+{
+    for (int i = 0; i < (1 << n); i++)
+    {
+        for (int j = 0; j < n; j++)
+        {
+            if (i & (1 << j))
+            {
+                cout << vec[j] << " ";
+            }
+        }
+        cout << endl;
+    }
+}
+
+int main(void)
+{
+    int n;
+    cin >> n;
+    vector<int> vec(n);
+    for (int i = 0; i < n; i++)
+    {
+        cin >> vec[i];
+    }
+
+    printSubset(vec, n);
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/bitManipulation/questions/unique2.cpp b/DSA/DSA-CPP/bitManipulation/questions/unique2.cpp
new file mode 100644
index 00000000..dca94a62
--- /dev/null
+++ b/DSA/DSA-CPP/bitManipulation/questions/unique2.cpp
@@ -0,0 +1,43 @@
+#include <bits/stdc++.h>
+using namespace std;
+typedef long long ll;
+
+void unique2(vector<int> vec, int n)
+{
+    int ans1, ans2, temp, pos = 0, xorRes = vec[0];
+    for (int i = 1; i < n; i++)
+    {
+        xorRes = xorRes ^ vec[i];
+    }
+    temp = xorRes;
+    ans1 = 0;
+    while (ans1 != 1)
+    {
+        ans1 = (temp & 1);
+        temp = temp >> 1;
+        pos++;
+    }
+    pos--;
+    ans1 = 0;
+    for (int i = 0; i < n; i++)
+    {
+        if (vec[i] & (1 << pos))
+        {
+            ans1 = xorRes ^ vec[i];
+        }
+    }
+    ans2 = xorRes ^ ans1;
+    cout << ans1 << " " << ans2;
+}
+
+int main(void)
+{
+    int n;
+    cin >> n;
+    vector<int> vec(n);
+    for (int i = 0; i < n; i++)
+    {
+        cin >> vec[i];
+    }
+    unique2(vec, n);
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/bitManipulation/setBit.cpp b/DSA/DSA-CPP/bitManipulation/setBit.cpp
new file mode 100644
index 00000000..c4739be4
--- /dev/null
+++ b/DSA/DSA-CPP/bitManipulation/setBit.cpp
@@ -0,0 +1,15 @@
+#include <bits/stdc++.h>
+using namespace std;
+typedef long long ll;
+
+int setBit(int n, int pos)
+{
+    return (n | 1 << pos);
+}
+
+int main(void)
+{
+    int n, pos;
+    cin >> n >> pos;
+    cout << setBit(n, pos);
+}
\ No newline at end of file
diff --git a/DSA/DSA-CPP/linearvsbinaryserach.cpp b/DSA/DSA-CPP/linearvsbinaryserach.cpp
new file mode 100644
index 00000000..a9240e69
--- /dev/null
+++ b/DSA/DSA-CPP/linearvsbinaryserach.cpp
@@ -0,0 +1,111 @@
+#include <bits/stdc++.h>
+using namespace std;
+
+void linearSearch(vector<int>&ar, int n, int x)
+{
+	int comp = 0;
+	int idx = -1;
+	bool flag = false;
+	for (int i = 0; i < n; i++)
+	{
+		comp++;
+		if (x == ar[i])
+		{
+			idx = i;
+			flag = true;
+			break;
+		}
+	}
+	cout << "Comparisons Done: " << comp << '\n';
+	if (flag)
+	{
+		cout << "Element found at index: " << idx << '\n';
+	}
+	else
+	{
+		cout << -1 << '\n';
+	}
+}
+
+void binarySearch(vector<int>&ar, int n, int x)
+{
+	int left = 0;
+	int right = n - 1;
+	bool flag = false;
+	int comp = 0, idx = -1;
+	while (left <= right)
+	{
+		comp++;
+		int middle = (left + right) / 2;
+		if (x == ar[middle])
+		{
+			flag = true;
+			idx = middle;
+			break;
+		}
+		else if (x > ar[middle])
+		{
+			left = middle + 1;
+		}
+		else
+		{
+			right = middle - 1;
+		}
+	}
+	cout << "Comparisons Done: " << comp << '\n';
+	if (flag)
+	{
+		cout << "Element Found at index: " << idx << '\n';
+	}
+	else
+	{
+		cout << -1 << '\n';
+	}
+}
+
+int main()
+{
+    // Unsorted array for linear search
+    // int arr[] = {1,3,5,56,4,3,23,5,4,54634,56,34};
+    // int size = sizeof(arr)/sizeof(int);
+    // int element=4;
+    // int searchindex=linearSearch(arr,size,element);
+    // cout<<"The element "<<element<<" found at index "<<endl<<searchindex<<endl;
+    
+    // sorted array for binary search
+    // int arr[] = {1,3,5,56,64,73,123,225,444};
+    // int size = sizeof(arr)/sizeof(int);
+    // int element=225;
+    // int searchindex=binarySearch(arr,size,element);
+    // cout<<"The element "<<element<<" found at index "<<endl<<searchindex<<endl;
+
+    int n;
+    cin>>n; // input size from user
+    vector<int>ar(n);
+    for(auto &it:ar){   // input array elements
+        cin>>it;  
+    }
+
+    cout << "Enter element to be search\n";
+	int ele;
+	cin >> ele;
+
+	int choice;
+	cout << "Enter 1 for Linear Search\n";
+	cout << "Enter 2 for Binary Search\n";
+	cin >> choice;
+	switch (choice)
+	{
+	case 1:
+		linearSearch(ar, n, ele);
+		break;
+	case 2:
+        sort(ar.begin(),ar.end()); // to sort array for binary search
+		binarySearch(ar, n, ele);
+		break;
+    default:
+        cout<<"Invalid Choice\n";
+	}
+
+    return 0;
+}
diff --git a/DSA/DSA-CPP/pallindrome_deque.cpp b/DSA/DSA-CPP/pallindrome_deque.cpp
new file mode 100644
index 00000000..bf37907e
--- /dev/null
+++ b/DSA/DSA-CPP/pallindrome_deque.cpp
@@ -0,0 +1,95 @@
+// Find if a string is palindrome or not using DeQue
+#include<iostream>
+using namespace std;
+
+#define MAX 100
+
+int size, Q[MAX], front=-1, rear=-1, x;
+
+void insert_rear(int x)
+{
+    if(front==-1)
+        front=0;
+    rear++;
+    Q[rear]=x;
+}
+
+int delete_from_front()
+{
+    if(front==-1)
+        cout<<"DeQueue is Empty\n";
+    if (front==rear)
+    {
+        int d=Q[front];
+        front=rear=-1;
+        return d;
+    }
+
+    else if (front==size-1)
+    {
+        int d=Q[front];
+        front=0;
+        return d;
+    }
+    else
+    {
+        int d=Q[front];
+        front=front+1;
+        return d;
+    }
+}
+
+int delete_from_rear() {
+    if(front==-1)
+        cout<<"DeQueue is Empty\n";
+    if (front==rear)
+    {
+        int d=Q[rear];
+        front=rear=-1;
+        return d;
+    }
+    else if (rear==0)
+    {
+        int d=Q[rear];
+        rear=size-1;
+        return d;
+
+    }
+    else
+    {
+        int d=Q[rear];
+        rear=rear-1;
+        return d;
+    }
+}
+
+int main()
+{
+     int c,a,b,flag=0,cnt=0;
+     char ele[MAX];
+     cout<<"Enter the string: ";
+     gets(ele);
+     for(int j=0; ele[j] != '\0'; j++)
+     {
+            cnt++;
+     }
+     size=cnt;
+     int count=size/2;
+     for (int i=0;i<size;i++)
+     {
+        insert_rear(ele[i]);
+     }
+     while(count>0)
+     {
+         a=delete_from_front();
+         b=delete_from_rear();
+         if(a!=b)
+            flag=1;
+         count--;
+     }
+     if(flag==0)
+        cout<<"\nString is a Pallindrome\n";
+     else
+        cout<<"\nString is not a Pallindrome\n";
+     return 0;
+}
diff --git a/DSA/DSA-Java/BinarySearch.java b/DSA/DSA-Java/BinarySearch.java
new file mode 100644
index 00000000..5d528706
--- /dev/null
+++ b/DSA/DSA-Java/BinarySearch.java
@@ -0,0 +1,38 @@
+import java.io.*;
+import java.util.*;
+
+public class BinarySearch{
+	public static void main(String[] args) {
+		// Make sure that given array is sorted 
+		int[] arr = {1,2,3,4,5,6,7,8,9,10};
+		Scanner in = new Scanner(System.in);
+		System.out.print("Enter The Element To be Search :");
+		int target = in.nextInt();
+		int ans =binarySearch(arr,target);
+		System.out.println("The element '"+target+"' is Present at "+ans+" th Location");
+	}
+
+	static int binarySearch(int[] arr, int target){
+		//initializing start=0 and end=arr.length - 1
+		int start = 0;
+		int end  = arr.length - 1;
+		
+		while(start <= end){
+			
+			int mid = (start + end)/2;
+			//if target element is less than middle element 
+			if(target < arr[mid] ){
+				end = mid -1;
+			}
+			//target element is greater than mid element
+			else if(target > arr[mid]){
+				start = mid +1;
+			}
+			//target element is equal to mid element
+			else{	
+				return mid;
+			}
+		}
+		return -1;
+	}
+}
\ No newline at end of file
diff --git a/DSA/DSA-Java/Booth Multiplication/README.TXT b/DSA/DSA-Java/Booth Multiplication/README.TXT
new file mode 100644
index 00000000..2bea2ddd
--- /dev/null
+++ b/DSA/DSA-Java/Booth Multiplication/README.TXT	
@@ -0,0 +1,12 @@
+------------------------------------------------------------------------
+This is the project README file. Here, you should describe your project.
+Tell the reader (someone who does not know anything about this project)
+all he/she needs to know. The comments should usually include at least:
+------------------------------------------------------------------------
+
+PROJECT TITLE:
+PURPOSE OF PROJECT:
+VERSION or DATE:
+HOW TO START THIS PROJECT:
+AUTHORS:
+USER INSTRUCTIONS:
diff --git a/DSA/DSA-Java/Booth Multiplication/mul$1.class b/DSA/DSA-Java/Booth Multiplication/mul$1.class
new file mode 100644
index 00000000..f15d17fc
Binary files /dev/null and b/DSA/DSA-Java/Booth Multiplication/mul$1.class differ
diff --git a/DSA/DSA-Java/Booth Multiplication/mul$2.class b/DSA/DSA-Java/Booth Multiplication/mul$2.class
new file mode 100644
index 00000000..e8a6af92
Binary files /dev/null and b/DSA/DSA-Java/Booth Multiplication/mul$2.class differ
diff --git a/DSA/DSA-Java/Booth Multiplication/mul.class b/DSA/DSA-Java/Booth Multiplication/mul.class
new file mode 100644
index 00000000..8bfaba3a
Binary files /dev/null and b/DSA/DSA-Java/Booth Multiplication/mul.class differ
diff --git a/DSA/DSA-Java/Booth Multiplication/mul.ctxt b/DSA/DSA-Java/Booth Multiplication/mul.ctxt
new file mode 100644
index 00000000..ce00e4d1
--- /dev/null
+++ b/DSA/DSA-Java/Booth Multiplication/mul.ctxt	
@@ -0,0 +1,21 @@
+#BlueJ class context
+comment0.target=mul
+comment1.params=args
+comment1.target=void\ main(java.lang.String[])
+comment2.params=primaryStage
+comment2.target=void\ start(javafx.stage.Stage)
+comment3.params=arg0
+comment3.target=void\ handle(javafx.event.ActionEvent)
+comment4.params=arg0
+comment4.target=void\ handle(javafx.event.ActionEvent)
+comment5.params=s1
+comment5.target=java.lang.String\ get2scomplement(java.lang.String)
+comment6.params=n
+comment6.target=java.lang.String\ getbinary(int)
+comment7.params=str
+comment7.target=java.lang.String\ shiftright(java.lang.String)
+comment8.params=s1\ s2
+comment8.target=java.lang.String\ binaryaddn(java.lang.String,\ java.lang.String)
+comment9.params=s
+comment9.target=void\ binarytodec(java.lang.String)
+numComments=10
diff --git a/DSA/DSA-Java/Booth Multiplication/mul.java b/DSA/DSA-Java/Booth Multiplication/mul.java
new file mode 100644
index 00000000..ff062a06
--- /dev/null
+++ b/DSA/DSA-Java/Booth Multiplication/mul.java	
@@ -0,0 +1,355 @@
+/**
+ * Write a description of mul here.
+ * 
+ * @author Sushant Sinha
+ * @version v1.0.0
+ */
+
+import javafx.application.Application;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.geometry.Pos;
+import javafx.scene.control.TextArea;
+import javafx.scene.control.TextField;
+import javafx.scene.text.Text;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.layout.GridPane;
+import javafx.stage.Stage;
+import javafx.scene.paint.Color;
+import javax.swing.*;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.Scanner;
+
+
+public class mul extends Application {
+
+    public static void main(String[] args) {
+        launch(args);
+    }
+    
+    @Override
+    public void start(Stage primaryStage) throws Exception {
+
+        GridPane root = new GridPane();
+        GridPane output = new GridPane();
+        Button btn = new Button("Multiply");
+
+        btn.setStyle(
+            "-fx-background-radius: 5em; " +
+            "-fx-min-width: 90px; " +
+            "-fx-min-height: 90px; " +
+            "-fx-max-width: 90px; " +
+            "-fx-max-height: 90px;"
+        );
+
+        Button exit = new Button("Exit");
+
+        exit.setTextFill(Color.WHITE);
+
+        exit.setStyle(
+            "-fx-background-color: #af0000;"+
+            "-fx-background-radius: 5em; " +
+            "-fx-min-width: 90px; " +
+            "-fx-min-height: 90px; " +
+            "-fx-max-width: 90px; " +
+            "-fx-max-height: 90px;"
+        );
+
+        Text t1 = new Text("Multiplicand: ");
+        Text t2 = new Text("Multiplier: ");
+        TextField multiplicand = new TextField();
+        TextField multiplier = new TextField();
+        TextArea result=new TextArea();
+        result.setPrefWidth(1000);        
+        result.setPrefHeight(500);
+        result.setEditable(false);
+        
+        Scene scene = new Scene(root, 1500, 800);
+        Scene scene1 = new Scene(output, 1500, 800);
+        
+        root.setHgap(17);
+        root.setVgap(20);
+        root.add(btn, 25, 20);
+        root.add(t1, 20, 17);
+        root.add(t2, 30, 17);
+        root.add(multiplicand, 22, 17);
+        root.add(multiplier, 32, 17);
+
+        output.setHgap(15);
+        output.setVgap(50);
+        output.add(result,20,4);
+        output.add(exit,22,4);
+        
+        primaryStage.setScene(scene);
+        primaryStage.setTitle("BOOTH MULTIPLIER");
+        primaryStage.show();
+
+        // action events
+
+        btn.setOnAction(new EventHandler < ActionEvent > () {
+
+
+
+            @Override
+            public void handle(ActionEvent arg0) {
+
+                int m1 = Integer.parseInt(multiplicand.getText());
+                int m2 = Integer.parseInt(multiplier.getText());
+
+                String m = getbinary(m1);
+                result.setText(result.getText()+m1 +", the multiplicand in signed 2s complement notation is " +m+"\n");
+
+                String r = getbinary(m2);
+                result.setText(result.getText()+m2 +", the multiplier in signed 2s complement notation is " +r);
+                int x = m.length();
+                int y = r.length();
+                result.setText("\n"+result.getText()+"\n-------------------------------------------------------------------------");
+                // determining initial values of A,S and P
+
+                if (m1 * m2 > 32767 || m1 * m2 < -32768) { // -2^15 < product < 2^15-1 for a 16 bit register
+                    result.setText("\n"+result.getText()+"Product is out of range for a 16-bit register!!");
+                    return;
+                }
+
+                String A = m;
+                for (int i = 0; i <= y; i++) {
+                    A = A + "0";
+                }
+
+                result.setText(result.getText()+"\n\nThe initial value of BR (with appended zeroes for ease of addition) is " + A);
+
+                String S = get2scomplement(m.substring(1));
+
+                if (m1 <= 0) {
+                    S = "0" + S;
+                }
+                
+                else{
+                    S = "1" + S;
+                }
+
+                for (int i = 0; i <= y; i++) {
+                    S = S + "0";
+                }
+                result.setText(result.getText()+"\n\nThe initial value of 2's complement of BR represented by BR'+1(with appended zeroes for ease of addition) is " + S);
+
+                String P = "";
+                for (int i = 0; i < x; i++) {
+                    P += "0";
+                }
+                P = P + r + "0";
+                result.setText(result.getText()+"\n\nThe initial value of AC+QR+Q(n+1) is " + P);
+                result.setText(result.getText()+"\n-------------------------------------------------------------------------");
+                for (int i = y; i >0; i--) {
+
+                    if (P.substring(P.length() - 2).equals("01")) {
+                        P = binaryaddn(P, A);
+                        P = shiftright(P);
+                        result.setText(result.getText()+"\nThe value of    AC+QR+Q(n+1)    after          AC+QR+Q(n+1) + BR operation and right shift is                  " + P + "          for SC = " + i);
+                    }
+                    
+                    else if (P.substring(P.length() - 2).equals("10")) {
+                        P = binaryaddn(P, S);
+                        P = shiftright(P);
+                        result.setText(result.getText()+"\nThe value of    AC+QR+Q(n+1)    after          AC+QR+Q(n+1) +  + BR'+1 operation and right shift is        " + P + "          for SC = " + i);
+                    }
+                    
+                    else {
+                        P = shiftright(P);
+                        result.setText(result.getText()+"\nThe value of    AC+QR+Q(n+1)    after          right shift is                                                                             " + P +"          for SC = " + i);
+                    }
+                }
+
+                P = P.substring(0, P.length() - 1);
+                result.setText(result.getText()+"\n-------------------------------------------------------------------------");
+
+                result.setText(result.getText()+"\nThe product of the numbers entered in binary is " +P);
+                if (P.charAt(0) == '0') {
+                    result.setText(result.getText()+"\nIt's Decimal Equivalent is ");
+                    
+                    Long n = Long.parseLong(P);
+                    Long rem = (long) 0;
+                    Long ans = (long) 0;
+                    Long val = (long) 1;
+            
+                    while (n != 0) {
+                        rem = n % 10;
+                        ans = ans + rem * val;
+                        n = n / 10;
+                        val = val * 2;
+                    }
+                    
+                    result.setText(result.getText()+ans);
+                    int i;
+                    for (i = 0; i < P.length(); i++) {
+                        if (P.charAt(i) == '0') { // leftmost zeroes are removed to get decimal eqv to avoid redundancy 
+                            continue;
+                        }
+                        break;
+                    }
+                    if (i == P.length()) { // this means that the string consists of zeroes only.
+                        // checking for 0
+                        result.setText(result.getText()+"0");
+
+                        return;
+                    }
+                    binarytodec(P.substring(i)); // after removing leading zeroes
+                }
+
+                if (P.charAt(0) == '1') {
+                    result.setText(result.getText()+"\nMSB = 1 indicates that the given number is negative." +" It's magnitude is given by the magnitude of it's 2's complement, that is ");
+                    String comp=get2scomplement(P);
+                    Long n = Long.parseLong(comp);
+                    Long rem = (long) 0;
+                    Long ans = (long) 0;
+                    Long val = (long) 1;
+            
+                    while (n != 0) {
+                        rem = n % 10;
+                        ans = ans + rem * val;
+                        n = n / 10;
+                        val = val * 2;
+                    }
+                    
+                    result.setText(result.getText()+ans);
+                 
+                                    
+                }
+                
+                primaryStage.setScene(scene1);
+                primaryStage.setTitle("BOOTH MULTIPLIER");
+                primaryStage.show();
+
+            }
+
+        });
+        
+        exit.setOnAction(new EventHandler < ActionEvent > () {
+
+            @Override
+            public void handle(ActionEvent arg0) {
+
+                System.exit(0);
+
+            }
+
+        });
+    }
+        
+    static String get2scomplement(String s1) {
+
+        String s2 = "";
+        for (int i = 0; i < s1.length(); i++) { // flipping the bits
+
+            if (s1.charAt(i) == '0') {
+                s2 += '1';
+                continue;
+            }
+            s2 += '0';
+        }
+
+        String s3 = "";
+        String carry = "1";
+        for (int i = s2.length() - 1; i >= 0; i--) {
+
+            if (s2.charAt(s2.length() - 1) == '0') {
+                s2 = s2.substring(0, s2.length() - 1) + "1";
+                return s2;
+            }
+
+            if (s2.charAt(i) == '1' && carry.equals("1")) {
+                s3 = '0' + s3;
+                carry = "1";
+            } else if (s2.charAt(i) == '0' && carry.equals("1")) {
+                s3 = '1' + s3;
+                carry = "0";
+            } else if (s2.charAt(i) == '0' && carry.equals("0")) {
+                s3 = '0' + s3;
+                carry = "0";
+            } else {
+                s3 = '1' + s3;
+                carry = "0";
+            }
+
+        }
+
+        return s3;
+
+    }
+
+    public static String getbinary(int n) {
+
+        String str1 = "";
+
+        if (n >= 0) {
+
+            str1 = Integer.toBinaryString(n);
+            str1 = "0" + str1;
+        } else {
+            str1 = Integer.toBinaryString(-1 * n);
+            str1 = get2scomplement(str1);
+            str1 = "1" + str1;
+        }
+        return str1;
+
+    }
+
+    public static String shiftright(String str) {
+
+        return str.charAt(0) + str.substring(0, str.length() - 1);
+
+    }
+
+    public static String binaryaddn(String s1, String s2) {
+
+        String res = "";
+        String carry = "0";
+        for (int i = s1.length() - 1; i >= 0; i--) {
+
+            if (s1.charAt(i) == '1' && s2.charAt(i) == '1' && carry.equals("0") ||
+                (s1.charAt(i) == '0' && s2.charAt(i) == '1' &&
+                    carry.equals("1")) || s1.charAt(i) == '1' &&
+                s2.charAt(i) == '0' && carry.equals("1")) {
+                res = '0' + res;
+                carry = "1";
+            } else if (s1.charAt(i) == '1' && s2.charAt(i) == '1' &&
+                carry.equals("1")) {
+                res = '1' + res;
+                carry = "1";
+            } else if (s1.charAt(i) == '0' && s2.charAt(i) == '1' &&
+                carry.equals("0") || s1.charAt(i) == '1' &&
+                s2.charAt(i) == '0' && carry.equals("0") ||
+                s1.charAt(i) == '0' && s2.charAt(i) == '0' &&
+                carry.equals("1")) {
+                res = '1' + res;
+                carry = "0";
+            } else if (s1.charAt(i) == '0' && s2.charAt(i) == '0' &&
+                carry.equals("0")) {
+                res = '0' + res;
+                carry = "0";
+            }
+
+        }
+
+        return res;
+
+    }
+
+    public static void binarytodec(String s) {
+        Long n = Long.parseLong(s);
+        Long rem = (long) 0;
+        Long ans = (long) 0;
+        Long val = (long) 1;
+
+        while (n != 0) {
+            rem = n % 10;
+            ans = ans + rem * val;
+            n = n / 10;
+            val = val * 2;
+
+        }
+
+    }
+}
diff --git a/DSA/DSA-Java/Booth Multiplication/package.bluej b/DSA/DSA-Java/Booth Multiplication/package.bluej
new file mode 100644
index 00000000..1d7b2f8e
--- /dev/null
+++ b/DSA/DSA-Java/Booth Multiplication/package.bluej	
@@ -0,0 +1,34 @@
+#BlueJ package file
+editor.fx.0.height=0
+editor.fx.0.width=0
+editor.fx.0.x=0
+editor.fx.0.y=0
+objectbench.height=145
+objectbench.width=1133
+package.divider.horizontal=0.6
+package.divider.vertical=0.8363832077502691
+package.editor.height=770
+package.editor.width=1790
+package.editor.x=-168
+package.editor.y=94
+package.frame.height=1048
+package.frame.width=1938
+package.numDependencies=0
+package.numTargets=1
+package.showExtends=true
+package.showUses=true
+project.charset=UTF-8
+project.invoke.thread=FX
+readme.height=58
+readme.name=@README
+readme.width=47
+readme.x=10
+readme.y=10
+target1.height=50
+target1.name=mul
+target1.showInterface=false
+target1.type=ClassTarget
+target1.typeParameters=
+target1.width=80
+target1.x=70
+target1.y=10
diff --git a/DSA/DSA-Java/Heaps/BinaryHeap.java b/DSA/DSA-Java/Heaps/BinaryHeap.java
new file mode 100644
index 00000000..e57b8a06
--- /dev/null
+++ b/DSA/DSA-Java/Heaps/BinaryHeap.java
@@ -0,0 +1,101 @@
+import java.util.Scanner;
+import java.util.Arrays;
+import java.util.NoSuchElementException;
+
+public class BinaryHeap{
+
+        private static final int d = 2;
+        private int heapSize;
+        private int[] heap;
+
+        public BinaryHeap(int capacity){
+            heapSize = 0;
+            heap = new int[capacity + 1];
+            Arrays.fill(heap, -1);
+        }
+
+        public boolean isEmpty(){
+            return heapSize==0;
+        }
+
+        public boolean isFull(){
+            return heapSize == heap.length;
+        }
+
+        public boolean makeEmpty(){
+            return heapSize == 0;
+        }
+
+        public int parent(int i){
+            return (i - 1)/d;
+        }
+
+        /**get index of k th child of i **/
+        private int kthChild(int i, int k){
+            return d * i + k;
+        }
+    
+        public void insert(int x){
+            if (isFull()){
+                throw new NoSuchElementException("Overflow Exception");
+            }
+            heap[heapSize++] = x;
+            heapifyUp(heapSize - 1);
+        }
+
+        public int deleteMin(){
+            int keyItem = heap[0];
+            delete(0);
+            return keyItem;
+        }
+
+        public int delete(int ind){
+            if(isEmpty()){
+                throw new NoSuchElementException("Underflow Exception");
+            }
+            int keyItem = heap[ind];
+            heap[ind] = heap[heapSize - 1];
+            heapSize--;
+            heapifyDown(ind);
+            return keyItem;
+        }
+
+        private void heapifyUp(int i) {
+            int temp = heap[i];
+            while(i>0 && temp > heap[parent(i)]){
+                heap[i] = heap[parent(i)];
+                i = parent(i);
+            }
+            heap[i] = temp;
+        }
+
+        private void heapifyDown(int i){
+            int child;
+            int temp = heap[i];
+            while(kthChild(i, 1) < heapSize){
+                child = maxChild(i);
+                if(temp < heap[child]){ heap[i] = heap[child]; }else break; i = child; } heap[i] = temp; } private int maxChild(int i) { int leftChild = kthChild(i, 1); int rightChild = kthChild(i, 2); return heap[leftChild]>heap[rightChild]?leftChild:rightChild;
+        }
+        public void printHeap(){
+            System.out.print("nHeap = ");
+            for (int i = 0; i < heapSize; i++)
+                System.out.print(heap[i] +" ");
+            System.out.println();
+        }
+        
+
+    public static void main(String args[]){
+        BinaryHeap b = new BinaryHeap(10);
+        b.insert(1);
+        b.insert(2);
+        b.insert(3);
+        b.insert(4);
+        b.insert(5);
+        b.printHeap();
+        b.deleteMin();
+        b.printHeap();
+        b.insert(0);
+        b.delete(2);
+        b.printHeap();
+    }
+}
\ No newline at end of file
diff --git a/DSA/DSA-Java/LinkedList/Circularll.java b/DSA/DSA-Java/LinkedList/Circularll.java
new file mode 100644
index 00000000..20bbcb88
--- /dev/null
+++ b/DSA/DSA-Java/LinkedList/Circularll.java
@@ -0,0 +1,112 @@
+class Circularll
+{
+	Node head;
+
+	static class Node
+	{
+		int data;
+		Node next;
+		Node(int data)
+		{
+			this.data = data;
+			this.next = null;
+		}
+	}
+
+	public void insert(int data)
+	{
+		Node new_node = new Node(data);
+		if(head == null)
+		{
+			head = new_node;
+			new_node.next = head;
+		}
+		else
+		{
+			Node temp = head;
+			while(temp.next != head)
+			{
+				temp = temp.next;
+			}
+			temp.next = new_node;
+			new_node.next = head;
+			head = new_node;
+		}
+	}
+
+	public void inBetween(Node prev_node, int data)
+	{
+		if(head == null)
+		{
+			Node new_node = new Node(data);
+			head = new_node;
+			new_node.next = head;
+			return;
+		}
+		Node new_node = new Node(data);
+		new_node.next = prev_node.next;
+		prev_node.next = new_node;
+	}
+	public void delete()
+	{
+		if(head == null)
+		{
+			System.out.println("List is empty.");
+		}
+		else if(head.next == head)
+		{
+			head = null;
+		}
+		else
+		{
+			Node temp = head;
+			while(temp.next != head)
+			{
+				temp = temp.next;
+			}
+			temp.next = head.next;
+			head = head.next;
+		}
+	}
+
+	public void show()
+	{
+		Node temp = head;
+		if(head == null)
+		{
+			System.out.println("List is empty.");
+		}
+		else
+		{
+			while(temp.next != head)
+			{
+				System.out.print(temp.data +" ");
+				temp = temp.next;
+			}
+			System.out.print(temp.data +" ");
+
+			System.out.print("\n");
+
+		}
+	}
+
+	public static void main(String a[])
+	{
+		Circularll l = new Circularll();
+		l.insert(10);
+		l.inBetween(l.head.next, 11);
+		// System.out.print(l.head.data +" ");
+		l.insert(12);
+		l.insert(13);
+		l.insert(14);
+		l.insert(15);
+		l.insert(16);
+		l.insert(17);
+		l.show();
+		l.delete();
+		l.show();
+		l.delete();
+		l.show();
+		// System.out.print(l.head.data +" ");
+	}
+}
\ No newline at end of file
diff --git a/DSA/DSA-Java/LinkedList/Doublyll.java b/DSA/DSA-Java/LinkedList/Doublyll.java
new file mode 100644
index 00000000..3f108979
--- /dev/null
+++ b/DSA/DSA-Java/LinkedList/Doublyll.java
@@ -0,0 +1,117 @@
+public class Doublyll {
+	Node head;
+
+	class Node {
+		int data;
+		Node prev;
+		Node next;
+		Node(int d) { data = d; }
+	}
+
+    //inserting at start
+	public void insert(int new_data)
+	{
+		Node new_Node = new Node(new_data);
+
+		new_Node.next = head;
+		new_Node.prev = null;
+
+		if (head != null)
+			head.prev = new_Node;
+
+		head = new_Node;
+	}
+
+	// Add a node before the given node
+	public void InsertBefore(Node next_node, int new_data)
+	{
+		if(next_node == null)
+		{
+			System.out.println("The given next node can not be NULL");
+			return;
+		}
+
+		Node new_node = new Node(new_data);
+		new_node.prev = next_node.prev;
+		next_node.prev = new_node;
+		new_node.next = next_node;
+		if(new_node.prev != null)
+			new_node.prev.next = new_node;
+		else
+			head = new_node;
+	}
+
+	/* inserta  new node after the given node */
+	public void InsertAfter(Node prev_Node, int new_data)
+	{
+		if (prev_Node == null) {
+			System.out.println("The given previous node cannot be NULL ");
+			return;
+		}
+		Node new_node = new Node(new_data);
+		new_node.next = prev_Node.next;
+		prev_Node.next = new_node;
+		new_node.prev = prev_Node;
+		if (new_node.next != null)
+			new_node.next.prev = new_node;
+	}
+
+	// Add a node at the end of the list
+	void atLast(int new_data)
+	{
+		Node new_node = new Node(new_data);
+
+		Node last = head;
+		new_node.next = null;
+		if (head == null) {
+			new_node.prev = null;
+			head = new_node;
+			return;
+		}
+
+		while (last.next != null)
+			last = last.next;
+
+		last.next = new_node;
+		new_node.prev = last;
+	}
+
+
+	public void printlist(Node node)
+	{
+		Node last = null;
+		System.out.println("Traversal in forward Direction");
+		while (node != null) {
+			System.out.print(node.data + " ");
+			last = node;
+			node = node.next;
+		}
+		System.out.println();
+		System.out.println("Traversal in reverse direction");
+		while (last != null) {
+			System.out.print(last.data + " ");
+			last = last.prev;
+		}
+	}
+
+
+	public static void main(String[] args)
+	{
+		Doublyll dll = new Doublyll();
+
+		dll.atLast(6);
+
+		dll.insert(7);
+
+		dll.insert(1);
+
+		dll.atLast(4);
+
+		dll.InsertAfter(dll.head.next, 8);
+
+		dll.InsertBefore(dll.head.next.next, 5);
+
+		System.out.println("Created Doubly Linked List is: ");
+		dll.printlist(dll.head);
+	}
+}
\ No newline at end of file
diff --git a/DSA/DSA-Java/LinkedList/Singlyll.java b/DSA/DSA-Java/LinkedList/Singlyll.java
new file mode 100644
index 00000000..6aa0997d
--- /dev/null
+++ b/DSA/DSA-Java/LinkedList/Singlyll.java
@@ -0,0 +1,225 @@
+class Singlyll
+{
+	Node head;
+
+	static class Node
+	{
+		int data;
+		Node next;
+		Node(int data)
+		{
+			this.data = data;
+			this.next = null;
+		}
+	}
+
+	public void insert(int data)
+	{
+		if(head == null)
+		{
+			head = new Node(data);
+			return;
+		}
+		Node new_node = new Node(data);
+		new_node.next = head;
+		head = new_node;
+	}
+
+    public void inBetween(Node prev_node, int data){
+		if(head == null){
+			head = new Node(data);
+			return;
+		}
+		if(prev_node.next == null){
+			System.out.println("cant insert because pre_node of next is null, try inserting at last.");
+			return;
+		}
+		Node new_node = new Node(data);
+		new_node.next = prev_node.next;
+		prev_node.next = new_node;
+	}
+
+    public void atLast(int data){
+		if(head == null){
+			head = new Node(data);
+			return;
+		}
+		Node new_node = new Node(data);
+		new_node.next = null;
+		Node last_node = head;
+		while(last_node.next != null){
+			last_node = last_node.next;
+		}
+		last_node.next = new_node;
+		return;
+	}
+
+	public void deleteFirst()
+	{
+		if(head == null)
+		{
+			System.out.println("List is already empty.");
+		}
+		else if(head.next == null)
+		{
+			head = null;
+		}
+		else
+		{
+			head = head.next;
+		}
+	}
+
+	public void deleteLast()
+	{
+		if(head == null)
+		{
+			System.out.println("List is already empty.");
+		}
+		else if(head.next == null)
+		{
+			head = null;
+		}
+		else
+		{
+			Node temp = head;
+			while(temp.next.next != null)//[B]->[c]->[D]->[E]-x
+			{
+				temp = temp.next;
+			}
+			temp.next = null;
+
+		}
+
+	}
+
+	public void deletePos(int pos)
+	{
+		if(head == null)
+		{
+			System.out.println("List is already empty.");
+		}
+		else if(head.next == null)
+		{
+			head = null;
+		}
+		else if(pos == 0)
+		{
+			head = head.next;
+		}
+		else
+		{
+			Node temp = head;
+			int i = 0;
+			while(i < pos-1)//refer this to understand the loop[A]->[B]->[c]->[D]->[E]-x
+			{
+				if(temp == null)
+				{
+					System.out.println("Given position is invalid.");
+					return;
+				}
+				temp = temp.next;
+				i++;
+			}
+			Node temp2 = temp.next.next;
+			temp.next = temp2;
+		}
+	}
+
+	public void deleteKey(int key)
+	{
+		if(head == null)
+		{
+			System.out.println("List is already empty.");
+		}
+		else if(head.data == key)
+		{
+			if(head.next == null)
+			{
+				head = null;
+			}
+			else
+			{
+				head = head.next;
+			}
+		}
+		else
+		{
+			Node temp = head;
+			Node prev = null;
+			boolean check = false;
+			while(temp != null)//[A]->[B]->[c]->[D]->[E]-x
+			{
+				if(temp.data == key){
+					check = true;
+					break;
+				}
+				prev = temp;
+				temp = temp.next;
+			}
+			if(check)
+			{
+				prev.next = temp.next;
+			}
+			else
+			{
+				System.out.println("Key not found.");
+			}
+		
+		}
+	}
+
+	public void display()
+	{	
+		if(head == null)
+		{
+			System.out.println("Your list is Empty.");
+		}
+		else
+		{
+			Node node = head;
+			while(node != null)
+			{
+				System.out.print(node.data +" ");
+				node = node.next;
+			}
+			System.out.print("\n");
+		}
+	}
+
+	public static void main(String a[])
+	{
+		Singlyll list = new Singlyll();
+		list.insert(10);
+		list.insert(11);
+		list.insert(12);
+		list.insert(13);
+		list.insert(14);
+		list.insert(15);
+		list.insert(16);
+		list.insert(17);
+		list.insert(18);
+
+		list.display();
+
+		list.deleteKey(10);
+		list.display();
+
+		list.deleteKey(12);
+		list.display();
+		
+		list.deleteLast();
+		list.display();
+		
+		list.deleteFirst();
+		list.display();
+
+		list.deletePos(1);
+		list.display();
+
+		list.deletePos(11);
+		list.display();
+
+
+	}
+}
diff --git a/DSA/DSA-Java/Queue/Queue.java b/DSA/DSA-Java/Queue/Queue.java
new file mode 100644
index 00000000..a5ed6fd8
--- /dev/null
+++ b/DSA/DSA-Java/Queue/Queue.java
@@ -0,0 +1,98 @@
+//Array implementation Of Queue
+// For implementing queue, we need to keep track of two indices, front and rear. We enqueue an item at the rear and dequeue an item from the front. If we simply increment front and rear indices, then there may be problems, the front may reach the end of the array. The solution to this problem is to increase front and rear in circular manner (See this for details)
+class Queue{
+	int front,rear,size;
+	int capacity;
+	int array[];
+
+	public Queue(int capacity){
+		this.capacity = capacity;
+		front = this.size = 0;
+		rear = capacity - 1;  
+		array = new int[this.capacity];
+	}
+
+	boolean isFull(Queue q){
+		return (q.size == q.capacity);
+	}
+
+	boolean isEmpty(Queue q){
+		return (q.size == 0);
+	}
+	void insert(int data){
+		if(isFull(this)){
+			System.out.println("Queue is full.");
+		}
+		else{
+			this.rear = (this.rear + 1) % this.capacity;
+			this.array[this.rear] = data;
+			this.size++;
+		}
+	}
+
+	void delete(){
+		if(isEmpty(this)){
+			System.out.println("Queue is Empty.");
+		}
+		else{
+			int item = this.array[this.front];
+			this.front = (front + 1) % this.capacity;
+			this.size--;
+		}
+	}
+
+	void front() 
+	{ 
+		if (isEmpty(this)){
+			System.out.println("Queue is Empty"); 
+		}
+		else{
+			System.out.println(this.array[this.front]);
+		}
+	} 
+
+	void rear() 
+	{ 
+		if (isEmpty(this)){
+			System.out.println("Queue is Empty"); 
+		}
+		else{
+			System.out.println(this.array[this.rear]);
+		}
+	} 
+
+	void show(){
+		if(isEmpty(this)){
+			System.out.println("Queue is Empty");
+		}
+		else{
+			for(int i = front; i <=this.rear; i++){
+				System.out.print(this.array[i]+" ");
+			}
+			System.out.print("\n");
+		}
+	}
+
+	public static void main(String[] args){
+		Queue q = new Queue(3);
+		q.insert(2);
+		q.insert(3);
+		q.insert(4);
+		q.front();
+		q.show();
+		q.delete();
+		q.show();
+		q.delete();
+		q.show();
+		q.delete();
+		q.front();
+		q.show();
+		q.insert(1);
+		q.show();
+		q.insert(3);
+		q.show();
+		q.insert(5);
+		q.show();
+		q.rear();
+	}
+}
\ No newline at end of file
diff --git a/DSA/DSA-Java/SortingAlgo/BucketSort.java b/DSA/DSA-Java/SortingAlgo/BucketSort.java
new file mode 100644
index 00000000..45d464d1
--- /dev/null
+++ b/DSA/DSA-Java/SortingAlgo/BucketSort.java
@@ -0,0 +1,38 @@
+public class BucketSort {
+  public void bucketSort(float[] arr, int n) {
+    if (n <= 0)
+      return;
+    
+    @SuppressWarnings("unchecked")
+    ArrayList<Float>[] bucket = new ArrayList[n];
+
+    for (int i = 0; i < n; i++) // Create empty buckets
+      bucket[i] = new ArrayList<Float>();
+
+    for (int i = 0; i < n; i++) { // Add elements into the buckets
+      int bucketIndex = (int) arr[i] * n;
+      bucket[bucketIndex].add(arr[i]);
+    }
+    
+    for (int i = 0; i < n; i++) {
+      Collections.sort((bucket[i])); // Sort the elements of each bucket
+    }
+
+    int index = 0;
+    for (int i = 0; i < n; i++) {
+      for (int j = 0, size = bucket[i].size(); j < size; j++) {
+        arr[index++] = bucket[i].get(j); // Getting the sorted array
+      }
+    }
+  }
+  
+  public static void main(String[] args) {
+    BucketSort object = new BucketSort();
+    float[] arr = { (float) 0.82, (float) 0.62, (float) 0.15, (float) 0.22, (float) 0.37, (float) 0.92,
+        (float) 0.53 };
+    object.bucketSort(arr, 7);
+
+    for (float i : arr)
+      System.out.print(i + "  ");
+  }
+}
diff --git a/DSA/DSA-Java/SortingAlgo/CountSort.java b/DSA/DSA-Java/SortingAlgo/CountSort.java
new file mode 100644
index 00000000..2305d3f1
--- /dev/null
+++ b/DSA/DSA-Java/SortingAlgo/CountSort.java
@@ -0,0 +1,43 @@
+class CountSort {
+  
+  void countSort(int array[], int size) {
+    int[] output = new int[size + 1];
+
+    int max = array[0];  
+    for (int i = 1; i < size; i++) {  // Find the largest element in the array
+      if (array[i] > max)
+        max = array[i];
+    }
+    int[] count = new int[max + 1];
+
+    for (int i = 0; i < max; ++i) {
+      count[i] = 0;
+    }
+
+    for (int i = 0; i < size; i++) {  // Store the count of each element in count[]
+      count[array[i]]++;
+    }
+
+    for (int i = 1; i <= max; i++) {   // Store the cummulative count of each array
+      count[i] += count[i - 1];
+    }
+
+    for (int i = size - 1; i >= 0; i--) {  // Find index of each element of array[] in count[] and place the elements in output[]
+      output[count[array[i]] - 1] = array[i];
+      count[array[i]]--;
+    }
+
+    for (int i = 0; i < size; i++) {
+      array[i] = output[i];  // Copying the sorted elements into original array
+    }
+  }
+
+  public static void main(String args[]) {
+    int[] arr = { 6, 2, 2, 8, 3, 4, 4 };
+    int size = arr.length;
+    CountSort object = new CountSort();
+    object.countSort(arr, size);
+    System.out.println("Sorted Array in Ascending Order : ");
+    System.out.println(Arrays.toString(arr));
+  }
+}
diff --git a/DSA/DSA-Java/SortingAlgo/Heapsort.java b/DSA/DSA-Java/SortingAlgo/Heapsort.java
new file mode 100644
index 00000000..fa21e53d
--- /dev/null
+++ b/DSA/DSA-Java/SortingAlgo/Heapsort.java
@@ -0,0 +1,64 @@
+public class Heapsort {
+    public void sort(int arr[]) {
+        int n = arr.length;
+
+        // Build heap
+        for (int i = n / 2 - 1; i >= 0; i--)
+            heapify(arr, n, i);
+
+        // Extract elements from heap one by one
+        for (int i = n - 1; i >= 0; i--) {
+            int temp = arr[0];// Move the current root to end
+            arr[0] = arr[i];
+            arr[i] = temp;
+
+            // call max heapify on reduced heap
+            heapify(arr, i, 0);
+        }
+    }
+
+    // Heapify a subtree rooted with node i which is an index in arr[]. n is size of
+    // heap
+    void heapify(int arr[], int n, int i) {
+        int largest = i; // Initialize largest as root
+        int l = 2 * i + 1; // left child = 2*i + 1
+        int r = 2 * i + 2; // right child = 2*i + 2
+
+        // If left child is larger than root
+        if (l < n && arr[l] > arr[largest])
+            largest = l;
+
+        // If right child is larger than the largest so far
+        if (r < n && arr[r] > arr[largest])
+            largest = r;
+
+        // If largest is not the root
+        if (largest != i) {
+            int swap = arr[i];
+            arr[i] = arr[largest];
+            arr[largest] = swap;
+
+            // Recursively heapify the subtree
+            heapify(arr, n, largest);
+        }
+    }
+
+    // Function to print array
+    static void printArray(int arr[]) {
+        int n = arr.length;
+        for (int i = 0; i < n; ++i)
+            System.out.print(arr[i] + " ");
+        System.out.println();
+    }
+
+    public static void main(String args[]) {
+        int arr[] = { 22, 11, 30, 5, 1, 7 };
+        int n = arr.length;
+
+        Heapsort object = new Heapsort();
+        object.sort(arr);
+
+        System.out.println("The sorted array is: ");
+        printArray(arr);
+    }
+}
diff --git a/DSA/DSA-Java/SortingAlgo/QuickSort.java b/DSA/DSA-Java/SortingAlgo/QuickSort.java
new file mode 100644
index 00000000..48a8ddbf
--- /dev/null
+++ b/DSA/DSA-Java/SortingAlgo/QuickSort.java
@@ -0,0 +1,52 @@
+// Program to sort an array using quicksort technique
+
+import java.util.Scanner;
+
+public class QuickSort {
+
+    void quick(int a[], int first, int last) {
+        if (first >= 0 && last >= 0 && first < last) {
+            int pivot = divide(a, first, last);
+            quick(a, first, pivot - 1);
+            quick(a, pivot + 1, last);
+        }
+    }
+
+    int divide(int a[], int first, int last) {
+        int pivot = a[last];
+        int i = first - 1;
+        for (int j = first; j < last; j++) {
+            if (a[j] <= pivot) {
+                i = i + 1;
+                int temp = a[i];
+                a[i] = a[j];
+                a[j] = temp;
+            }
+        }
+        int temp = a[i + 1];
+        a[i + 1] = a[last];
+        a[last] = temp;
+        return i;
+    }
+
+    public static void main(String argv[]) {
+
+        Scanner sc = new Scanner(System.in);
+
+        System.out.println("Enter the size of the array: ");
+        int size = sc.nextInt();
+        int a[] = new int[size];
+
+        System.out.println("Enter the elements of the array: ");
+        for (int i = 0; i < size; i++) {
+            a[i] = sc.nextInt();
+        }
+
+        QuickSort obj = new QuickSort();
+        obj.quick(a, 0, size - 1);
+        System.out.println("Array after applying quick sort");
+        for (int i = 0; i < size; i++) {
+            System.out.print(a[i] + " ");
+        }
+    }
+}
diff --git a/DSA/DSA-Java/Stack/StackArray.java b/DSA/DSA-Java/Stack/StackArray.java
new file mode 100644
index 00000000..96d47c4e
--- /dev/null
+++ b/DSA/DSA-Java/Stack/StackArray.java
@@ -0,0 +1,90 @@
+//Representation of stack using array
+
+import java.util.Scanner;
+
+class StackArray
+{
+	final int MAX = 10;
+	int data[] = new int[MAX];
+	int top;
+	StackArray()
+	{
+		top = -1;
+	}
+
+	public boolean isEmpty()
+	{
+		return (top <= -1);
+	}
+
+    //Inserting an element into stack
+	public void push(int d)
+	{
+		if(top == MAX-1)
+		{
+			System.out.println("Stack is full.");
+		}
+		else
+		{
+			top++;
+			this.data[top] = d;
+		}
+	}
+
+    //Checking top most element in a Stack (Peeking)
+	public void peek()
+	{
+		if(top <= -1)
+		{
+			System.out.println("Stack is Empty");
+		}
+		else
+		{
+			System.out.println(data[top]);
+		}
+	}
+
+    //deleting an element from stack
+	public void pop()
+	{
+		if(top <= -1)
+		{
+			System.out.println("Stack is Empty");
+		}
+		else
+		{
+			int a = this.data[top];
+			top--;
+		}
+	}
+
+	public void watch()
+	{
+		int i = 0;
+		if(top <= -1)
+		{
+			System.out.println("Stack is Empty");
+		}
+		else
+		{
+			while(i <= this.top)
+			{
+				System.out.print(this.data[i] +" ");
+				i++;
+			}
+		}
+		
+	}
+	public static void main(String a[])
+	{
+		StackArray s = new StackArray();
+		s.push(1);
+		s.push(3);
+		s.push(4);
+		s.push(5);
+		s.peek();
+		s.pop();
+		s.peek();
+		s.watch();
+	}
+}
\ No newline at end of file
diff --git a/DSA/DSA-Java/Stack/Stackll.java b/DSA/DSA-Java/Stack/Stackll.java
new file mode 100644
index 00000000..e54b4ccf
--- /dev/null
+++ b/DSA/DSA-Java/Stack/Stackll.java
@@ -0,0 +1,101 @@
+//Stack using Linked List
+class Stackl
+{
+	Node top;
+
+	static class Node
+	{
+		int data;
+		Node next;
+
+		Node(int data)
+		{
+			this.data = data;
+			this.next = null;
+		}
+	}
+
+	public boolean isEmpty()
+	{
+		if(top == null)
+		{
+			return true;
+		}
+		else
+		{
+			return false;
+		}
+	}
+
+    //Inserting an element into stack
+	public void push(int item)
+	{
+		if(top == null)
+		{
+			top = new Node(item);
+		}
+		else
+		{
+			Node new_node = new Node(item);
+			new_node.next = top;
+			top = new_node;
+		}
+	}	
+
+    //deleting an element from stack
+	public void pop()
+	{
+		if(top == null)
+		{
+			System.out.println("Stack is empty.");
+		}
+		else if(top.next == null)
+		{
+			top = null;
+		}
+		else
+		{
+			top = top.next;
+		}
+	}
+
+    //Checking top most element in a Stack (Peeking)
+	public void peek()
+	{
+		if(top == null)
+		{
+			System.out.println("Stack is empty.");
+		}
+		else
+		{
+			System.out.println(top.data);
+		}
+	}
+
+	public void watch()
+	{
+		Node temp = top;
+		while(temp != null)
+		{
+			System.out.print(temp.data +" ");
+			temp = temp.next;
+		}
+	}
+	public static void main(String a[])
+	{
+		Stackl s = new Stackl();
+		//// if(s.isEmpty())
+		// 	System.out.println("yes");
+		// }
+		 	s.push(1);
+		 	s.push(2);
+		 	s.push(3);
+		 	s.push(4);
+		 	s.push(5);
+		 	s.peek();
+		 	s.pop();
+		 	s.peek();
+		 	s.watch();
+		 	
+	}
+}
\ No newline at end of file
diff --git a/DSA/DSA-Java/Trees/BinarySearchTree/BST.java b/DSA/DSA-Java/Trees/BinarySearchTree/BST.java
new file mode 100644
index 00000000..8c87a091
--- /dev/null
+++ b/DSA/DSA-Java/Trees/BinarySearchTree/BST.java
@@ -0,0 +1,77 @@
+class BST{
+	Node root;
+
+	static class Node{
+		int data;
+		Node left;
+		Node right;
+		Node(int data){
+			this.data = data;
+			this.left = null;
+			this.right = null;
+		}
+	}
+
+	void insert(int data){
+		root = ins(root, data);
+	}
+	Node ins(Node root, int data){
+		if(root == null){
+			root = new Node(data);
+			return root;
+		}
+		if(data < root.data){
+			root.left = ins(root.left, data);
+		}
+		else if(data > root.data){
+			root.right = ins(root.right, data);
+		}
+		// return unchanged Node pointer
+		return root;
+	}
+
+	void search(int key){
+		Node temp = root;
+		searchKey(temp,key);
+	}
+	void searchKey(Node root, int key){
+		if(key == root.data){
+			System.out.println("key found.");
+			return;
+		}
+		if(key < root.data){
+			searchKey(root.left, key);
+		}
+		else if(key > root.data){
+			searchKey(root.right, key);
+		}
+		
+	}
+	void show(){
+		Node temp = root;
+		inorder(temp);
+	}
+	void inorder(Node temp){
+		if(temp == null){
+			return;
+		}
+		else{
+			inorder(temp.left);
+			System.out.print(temp.data+" ");
+			inorder(temp.right);
+		}
+	}
+
+	public static void main(String argd[]){
+		BST tree = new BST();
+		tree.insert(50); 
+        tree.insert(30); 
+        tree.insert(20); 
+        tree.insert(40); 
+        tree.insert(70); 
+        tree.insert(60); 
+        tree.insert(80);
+        tree.search(80);
+		tree.show();
+	}	
+}
\ No newline at end of file
diff --git a/DSA/DSA-Java/Trees/BinaryTree/BinaryTree.java b/DSA/DSA-Java/Trees/BinaryTree/BinaryTree.java
new file mode 100644
index 00000000..d86e3538
--- /dev/null
+++ b/DSA/DSA-Java/Trees/BinaryTree/BinaryTree.java
@@ -0,0 +1,169 @@
+import java.util.Queue;
+import java.util.LinkedList; 
+import java.util.*;
+
+class BinaryTree{
+	Node root;
+
+	static class Node{
+		int data;
+		Node left;
+		Node right;
+		Node(int data){
+			this.data = data;
+			this.left = null;
+			this.right = null;
+		}
+	}
+
+	void show(){
+		Node temp = root;
+		inorder(temp);
+	}
+	void inorder(Node temp){
+		if(temp == null){
+			return;
+		}
+		else{
+			inorder(temp.left);
+			System.out.print(temp.data+" ");
+			inorder(temp.right);
+		}
+	}
+	// Node temp = root;
+	//inserting the data into the binary tree at first position available in level order.
+	void insert(int data){
+		Queue<Node> q = new LinkedList<>();
+		Node temp = root;
+		q.add(temp);
+		// if(root == null){
+		// 	root = new Node(data);
+		// 	return;
+		// }
+		while(!q.isEmpty()){
+			temp = q.peek();
+			q.remove();
+
+			if(temp.left == null){
+				temp.left = new Node(data);
+				break;
+			}
+			else{
+				q.add(temp.left);	
+			}
+			if(temp.right == null){
+				temp.right = new Node(data);
+				break;
+			}
+			else{
+				q.add(temp.right);
+			}
+		}
+	}
+
+	void delete_deepest(Node root, Node d_node){
+		Queue<Node> q = new LinkedList<>();
+		q.add(root);
+		Node temp;
+
+		while(!q.isEmpty()){
+			temp = q.peek();
+			q.remove();
+			if(temp == d_node){
+				temp = null;
+				break;
+			}
+			if(temp.right != null)
+			{
+				if(temp.right == d_node) {
+				temp.right = null;
+				break;
+			}
+			else
+				q.add(temp.right);
+			}
+			if(temp.left != null)
+			{
+				if(temp.left == d_node) {
+				temp.left = null;
+				break;	
+			}
+			else
+				q.add(temp.left);
+			}
+		}
+	}
+// 1. Starting at root, find the deepest and rightmost node in binary tree and node which we want to delete.
+// 2. Replace the deepest rightmost node’s data with node to be deleted.
+// 3. Then delete the deepest rightmost node.
+	void del(Node root, int key){
+		if(root == null){
+			return;
+		}
+		if(root.left == null && root.right == null){
+			if(root.data == key){
+				root = null;
+				return;
+			}
+			else{
+				return;
+			}
+		}
+		Queue<Node> q = new LinkedList<>();
+		Node temp = root;
+		Node key_node = null; 
+		q.add(root);
+
+		while(!q.isEmpty()){
+			temp = q.peek();
+			q.remove();
+			if(temp.data == key){
+				key_node = temp;//even we find the key traverse util we get the deepest node.
+			}
+			if(temp.right != null){
+				q.add(temp.right);
+			}
+			if(temp.left != null){
+				q.add(temp.left);
+			}
+		}
+		if(key_node != null){
+			int x = temp.data; //temp will be our deepest node.
+			delete_deepest(root, temp);
+			key_node.data = x;
+		}
+	} 
+
+
+	public static void main(String args[]){
+		BinaryTree b = new BinaryTree();
+		// b.root = new Node(9);
+		b.root = new Node(10);
+		// b.root.left = new Node(11); 
+        // b.root.left.left = new Node(7); 
+        // b.root.right = new Node(9); 
+        // b.root.right.left = new Node(15); 
+        // b.root.right.right = new Node(8); 
+		// b.show();
+		// b.insert(12);
+		// System.out.println("\n");
+		// b.show();
+		// b.del(b.root, 11);
+		// System.out.println("\n");
+		// b.show();
+		b.insert(11);
+		b.insert(7);
+		b.insert(12);
+		b.insert(9);
+		b.insert(15);
+		b.insert(8);
+        b.show();
+        System.out.println();
+		b.del(b.root, 11);
+        b.show();
+        System.out.println();
+		// System.out.println(b.root.data);
+		// System.out.println(b.root.left.data);
+		// System.out.println(b.root.right.data);
+	}
+}
\ No newline at end of file
diff --git a/DSA/DSA-Java/Trees/BinaryTree/BinaryTreeArray.java b/DSA/DSA-Java/Trees/BinaryTree/BinaryTreeArray.java
new file mode 100644
index 00000000..4460c053
--- /dev/null
+++ b/DSA/DSA-Java/Trees/BinaryTree/BinaryTreeArray.java
@@ -0,0 +1,52 @@
+//Binary Tree using array
+public class BinaryTreeArray{
+	public static void main(String argd[]){
+		Tree bt = new Tree();
+		bt.Root("A");
+        bt.setLeft("B", 0);
+        bt.setRight("C", 0);
+        bt.setLeft("D", 1);
+        bt.setRight("E", 1);
+        bt.setLeft("F", 2);
+        bt.print();	
+	}
+}
+
+class Tree{
+	static int root = 0;
+	String[] str = new String[10];
+
+	public void Root(String root){
+		str[0] = root;
+	}
+
+	public void setLeft(String key, int root){
+		int t = (root*2)+1;
+		if(str[root]==null){
+			System.out.printf("Can't set child at %d, no parent found. \n", t);
+		}
+		else{
+			str[t] = key;
+		}
+	}
+
+	public void setRight(String key, int root){
+		int t = (root*2)+2;
+		if(str[root]==null){
+			System.out.printf("Can't set child at %d, no parent found. \n", t);
+		}
+		else{
+			str[t] = key;
+		}
+	}
+	public void print(){
+		for(int i = 0; i < 10; i++){
+			if(str[i]!=null){
+				System.out.print(str[i]);
+			}
+			else{
+				System.out.print("-");
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/DSA/DSA-Java/xyz.java b/DSA/DSA-Java/xyz.java
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/DSA/DSA-Java/xyz.java
@@ -0,0 +1 @@
+
diff --git a/DSA/DSA-Javascript/Data-Structures/Queue/CircularQueue.js b/DSA/DSA-Javascript/Data-Structures/Queue/CircularQueue.js
new file mode 100644
index 00000000..03d5de53
--- /dev/null
+++ b/DSA/DSA-Javascript/Data-Structures/Queue/CircularQueue.js
@@ -0,0 +1,100 @@
+/* Circular Queue
+ * offer a quick to store FIFO data with a maximum size.
+ * Conserves memory as we only store up to our capacity
+ * It is opposed to a queue which could continue to grow if input outpaces output
+ * Doesn't use dynamic memory so No memory
+ */
+
+class CircularQueue {
+  constructor (size) {
+    this.element = []
+    this.size = size
+    this.maxLength = 0
+    this.front = 0
+    this.back = -1
+  }
+
+  enqueue (element) {
+    // Adds an element to the queue
+    try {
+      if (this.maxLength >= this.size) {
+        throw new Error('Maximum length exceeded')
+      }
+      this.back++
+      this.element[this.back % this.size] = element
+      this.maxLength++
+    } catch (err) {
+      console.log(err.message)
+    }
+  }
+
+  dequeue () {
+    // Removes an element from the queue
+    try {
+      if (this.isEmpty()) {
+        throw new Error('No elements in Queue')
+      }
+      const value = this.peek()
+      this.element[this.front % this.size] = null
+      this.front++
+      this.maxLength--
+      return value
+    } catch (err) {
+      console.log(err.message)
+    }
+  }
+
+  peek () {
+    // returns the front element of the queue without removing it.
+    try {
+      if (this.isEmpty()) {
+        throw new Error('No elements in Queue')
+      }
+      return this.element[this.front % this.size]
+    } catch (err) {
+      console.log(err.message)
+    }
+  }
+
+  length () {
+    // Returns the length of the queue
+    if (this.isEmpty()) return 'No elements in Queue'
+    return this.element.length
+  }
+
+  clear () {
+    // Remove all item in the queue
+    this.element = []
+    this.maxLength = 0
+    this.back = 0
+    this.front = -1
+  }
+
+  isEmpty () {
+    // Returns true if the queue is empty
+    return this.length === 0
+  }
+}
+
+// Implementation
+const queue = new CircularQueue(6) // Enter Max Length
+queue.enqueue(1)
+queue.enqueue(15)
+queue.enqueue(176)
+queue.enqueue(59)
+queue.enqueue(3)
+queue.enqueue(55)
+
+console.log(queue.length()) // 6
+
+console.log(queue.element) // [ 1, 15, 176, 59, 3, 55 ]
+
+console.log(queue.dequeue()) // 1
+console.log(queue.length()) // 6
+
+console.log(queue.peek()) // 15
+
+console.log(queue.isEmpty()) // false
+
+queue.enqueue(39)
+queue.enqueue(85)
diff --git a/DSA/DSA-Javascript/Data-Structures/Queue/Queue.js b/DSA/DSA-Javascript/Data-Structures/Queue/Queue.js
new file mode 100644
index 00000000..050bbf54
--- /dev/null
+++ b/DSA/DSA-Javascript/Data-Structures/Queue/Queue.js
@@ -0,0 +1,74 @@
+/* Queue
+ * A queue is an ordered list of elements where an element is inserted at the end
+ * of the queue and is removed from the front of the queue.
+ */
+
+class Queue {
+  constructor () {
+    this.items = []
+  }
+
+  enqueue (element) {
+    // Adds an element to the queue
+    this.items.push(element)
+  }
+
+  dequeue () {
+    // Removes an element from the queue
+    try {
+      if (this.isEmpty()) {
+        throw new Error('Underflow')
+      }
+      return this.items.shift()
+    } catch (err) {
+      console.log(err.message)
+    }
+  }
+
+  peek () {
+    // returns the front element of the queue without removing it.
+    try {
+      if (this.isEmpty()) {
+        throw new Error('No elements in Queue')
+      }
+      return this.items[0]
+    } catch (err) {
+      console.log(err.message)
+    }
+  }
+
+  length () {
+    // Returns the length of the queue
+    if (this.isEmpty()) return 'No elements in Queue'
+    return this.items.length
+  }
+
+  isEmpty () {
+    // Returns true if the queue is empty
+    return this.items.length === 0
+  }
+
+  clear () {
+    // Remove all item in the queue
+    this.items = []
+  }
+}
+
+// Implementation
+const myQueue = new Queue()
+myQueue.enqueue(1)
+myQueue.enqueue(5)
+myQueue.enqueue(76)
+myQueue.enqueue(69)
+myQueue.enqueue(32)
+
+console.log(myQueue.length()) // 5
+
+console.log(myQueue.items) // [ 1, 5, 76, 69, 32 ]
+
+console.log(myQueue.dequeue()) // 1
+console.log(myQueue.length()) // 4
+
+console.log(myQueue.peek()) // 5
+
+console.log(myQueue.isEmpty()) // false
diff --git a/DSA/DSA-Javascript/Data-Structures/Stack/Stack.js b/DSA/DSA-Javascript/Data-Structures/Stack/Stack.js
new file mode 100644
index 00000000..1f082896
--- /dev/null
+++ b/DSA/DSA-Javascript/Data-Structures/Stack/Stack.js
@@ -0,0 +1,55 @@
+/* Stack
+ * A stack is exactly what it sounds like. An element gets added to the top of
+ * the stack and only the element on the top may be removed. This is an example
+ * of an array implementation of a Stack. So an element can only be added/removed
+ * from the end of the array.
+ */
+
+class Stack {
+  constructor () {
+    this.items = []
+  }
+
+  push (el) {
+    // push element into the items
+    this.items.push(el)
+  }
+
+  pop () {
+    // Removes an element from the stack, if the function is call on an empty stack it indicates "Underflow"
+    if (this.items.length === 0) return 'Underflow'
+    return this.items.pop()
+  }
+
+  peek () {
+    // Returns the top most elements in the stack, but doesn't delete it
+    return this.items[this.items.length - 1]
+  }
+
+  isEmpty () {
+    // Return true if stack is empty
+    return this.items.length === 0
+  }
+}
+
+// Implementation
+const myStack = new Stack()
+
+myStack.push(1)
+myStack.push(5)
+myStack.push(76)
+myStack.push(69)
+myStack.push(32)
+myStack.push(54)
+
+console.log(myStack.peek()) // 54
+
+console.log(myStack.pop()) // 54
+
+console.log(myStack.items) // [ 1, 5, 76, 69, 32 ]
+
+console.log(myStack.peek()) // 32
+
+myStack.push(55)
+
+console.log(myStack.peek()) // 55
diff --git a/DSA/DSA-Javascript/Data-Structures/Tree/BinarySearchTree.js b/DSA/DSA-Javascript/Data-Structures/Tree/BinarySearchTree.js
new file mode 100644
index 00000000..a94a3977
--- /dev/null
+++ b/DSA/DSA-Javascript/Data-Structures/Tree/BinarySearchTree.js
@@ -0,0 +1,243 @@
+/* Binary Search Tree!!
+ *
+ * Nodes that will go on the Binary Tree.
+ * They consist of the data in them, the node to the left, the node
+ * to the right, and the parent from which they came from.
+ *
+ * A binary tree is a data structure in which an element
+ * has two successors(children). The left child is usually
+ * smaller than the parent, and the right child is usually
+ * bigger.
+ */
+
+class Node {
+  constructor (data) {
+    this.data = data
+    this.left = null
+    this.right = null
+  }
+}
+
+class BinarySearchTree {
+  constructor () {
+    this.root = null
+  }
+
+  insert (data) {
+    // Creating a node and initialising with data
+    const newNode = new Node(data)
+
+    if (this.root === null) {
+      // if root is null then node will be added to the tree and made root.
+      this.root = newNode
+    } else {
+      // find the correct position in the tree and add the node
+      this.insertNode(this.root, newNode)
+    }
+  }
+
+  insertNode (node, newNode) {
+    // if the data is less than the node data move left of the tree
+    if (newNode.data < node.data) {
+      if (node.left === null) {
+        // if left is null insert node here
+        node.left = newNode
+      } else {
+        // if left is not null recur until null is found
+        this.insertNode(node.left, newNode)
+      }
+    } else {
+      // if the data is more than the node data move right of the tree
+      if (node.right === null) {
+        // if right is null insert node here
+        node.right = newNode
+      } else {
+        // if right is not null recur until null is found
+        this.insertNode(node.right, newNode)
+      }
+    }
+  }
+
+  remove (data) {
+    // root is re-initialized with root of a modified tree.
+    this.root = this.removeNode(this.root, data)
+  }
+
+  removeNode (node, key) {
+    if (node === null) {
+      // if the root is null then tree is empty
+      return null
+    } else if (key < node.data) {
+      // if data to be delete is less than roots data then move to left subtree
+      node.left = this.removeNode(node.left, key)
+      return node
+    } else if (key > node.data) {
+      // if data to be delete is greater than roots data then move to right subtree
+      node.right = this.removeNode(node.right, key)
+      return node
+    } else {
+      // if data is similar to the root's data then delete this node
+      if (node.left === null && node.right === null) {
+        // deleting node with no children
+        node = null
+        return node
+      }
+
+      if (node.left === null) {
+        // deleting node with one children
+        node = node.right
+        return node
+      } else if (node.right === null) {
+        node = node.left
+        return node
+      }
+
+      // Deleting node with two children
+      // minimum node of the right subtree
+      // is stored in aux
+      const aux = this.findMinNode(node.right)
+      node.data = aux.data
+
+      node.right = this.removeNode(node.right, aux.data)
+      return node
+    }
+  }
+
+  findMinNode (node) {
+    //  finds the minimum node in tree searching starts from given node
+    if (node.left === null) {
+      // if left of a node is null then it must be minimum node
+      return node
+    } else {
+      return this.findMinNode(node.left)
+    }
+  }
+
+  inorder (node) {
+    // Performs inorder traversal of a tree
+    if (node !== null) {
+      this.inorder(node.left)
+      console.log(node.data)
+      this.inorder(node.right)
+    }
+  }
+
+  preorder (node) {
+    // Performs preorder traversal of a tree
+    if (node !== null) {
+      console.log(node.data)
+      this.preorder(node.left)
+      this.preorder(node.right)
+    }
+  }
+
+  postorder (node) {
+    // Performs postorder traversal of a tree
+    if (node !== null) {
+      this.postorder(node.left)
+      this.postorder(node.right)
+      console.log(node.data)
+    }
+  }
+
+  getRootNode () {
+    // returns root of the tree
+    return this.root
+  }
+
+  search (node, data) {
+    // search for a node with given data
+    if (node === null) {
+      // if trees is empty return null
+      return null
+    } else if (data < node.data) {
+      // if data is less than node's data move left
+      return this.search(node.left, data)
+    } else if (data > node.data) {
+      // if data is less than node's data move left
+      return this.search(node.right, data)
+    } else {
+      // if data is equal to the node data return node
+      return node
+    }
+  }
+}
+
+const BST = new BinarySearchTree()
+
+// Inserting nodes to the BinarySearchTree
+BST.insert(15)
+BST.insert(25)
+BST.insert(10)
+BST.insert(7)
+BST.insert(22)
+BST.insert(17)
+BST.insert(13)
+BST.insert(5)
+BST.insert(9)
+BST.insert(27)
+
+//          15
+//         /  \
+//        10   25
+//       / \   / \
+//      7  13 22  27
+//     / \    /
+//    5   9  17
+
+let root = BST.getRootNode()
+
+// prints 5 7 9 10 13 15 17 22 25 27
+BST.inorder(root)
+
+// Removing node with no children
+BST.remove(5)
+
+//          15
+//         /  \
+//        10   25
+//       / \   / \
+//      7  13 22  27
+//       \    /
+//        9  17
+
+root = BST.getRootNode()
+
+// prints 7 9 10 13 15 17 22 25 27
+BST.inorder(root)
+
+// Removing node with one child
+BST.remove(7)
+
+//          15
+//         /  \
+//        10   25
+//       / \   / \
+//      9  13 22  27
+//            /
+//           17
+
+root = BST.getRootNode()
+
+// prints 9 10 13 15 17 22 25 27
+BST.inorder(root)
+
+// Removing node with two children
+BST.remove(15)
+
+//          17
+//         /  \
+//        10   25
+//       / \   / \
+//      9  13 22  27
+
+root = BST.getRootNode()
+console.log('inorder traversal')
+
+// prints 9 10 13 17 22 25 27
+BST.inorder(root)
+
+console.log('postorder traversal')
+BST.postorder(root)
+console.log('preorder traversal')
+BST.preorder(root)
diff --git a/DSA/DSA-Javascript/Maths/AbsoluteValue.js b/DSA/DSA-Javascript/Maths/AbsoluteValue.js
new file mode 100644
index 00000000..0de12252
--- /dev/null
+++ b/DSA/DSA-Javascript/Maths/AbsoluteValue.js
@@ -0,0 +1,9 @@
+// Return the absolute value of a given number
+
+const absoluteValue = value => {
+  return value < 0 ? -value : value
+}
+
+console.log(absoluteValue(-10))
+console.log(absoluteValue(23))
+console.log(absoluteValue(0))
diff --git a/DSA/DSA-Javascript/Maths/Factorial.js b/DSA/DSA-Javascript/Maths/Factorial.js
new file mode 100644
index 00000000..521016ff
--- /dev/null
+++ b/DSA/DSA-Javascript/Maths/Factorial.js
@@ -0,0 +1,20 @@
+// Return the factorial of a number
+
+const factorial = num => {
+  if (typeof num !== 'number') {
+    return 'Not a number'
+  } else {
+    if (num === 0 || num === 1) {
+      return 1
+    } else if (num < 0) {
+      return 'negative numbers has no factorial'
+    } else {
+      return num * factorial(num - 1)
+    }
+  }
+}
+
+console.log(factorial(-4))
+console.log(factorial(8))
+console.log(factorial('hello world'))
+console.log(factorial(4))
diff --git a/DSA/DSA-Javascript/Maths/Fibonacci.js b/DSA/DSA-Javascript/Maths/Fibonacci.js
new file mode 100644
index 00000000..2cf91af7
--- /dev/null
+++ b/DSA/DSA-Javascript/Maths/Fibonacci.js
@@ -0,0 +1,18 @@
+// Return the fibonacci numbers.
+
+const fibonacci = nth => {
+  const sequence = []
+
+  if (nth >= 1) sequence.push(1)
+  if (nth >= 2) sequence.push(1)
+
+  for (let i = 2; i < nth; i++) {
+    sequence.push(sequence[i - 1] + sequence[i - 2])
+  }
+
+  return sequence
+}
+
+console.log(fibonacci(-3))
+console.log(fibonacci(5))
+console.log(fibonacci(7))
diff --git a/DSA/DSA-Javascript/Maths/IsDivisible.js b/DSA/DSA-Javascript/Maths/IsDivisible.js
new file mode 100644
index 00000000..fcc5d321
--- /dev/null
+++ b/DSA/DSA-Javascript/Maths/IsDivisible.js
@@ -0,0 +1,14 @@
+// Checks if a number is divisible by another number.
+const isDivisible = (num1, num2) => {
+  if (!Number.isFinite(num1) || !Number.isFinite(num2)) {
+    throw new TypeError('Expected a number')
+  }
+  if (num2 === 0) {
+    return false
+  }
+  return num1 % num2 === 0
+}
+
+console.log(isDivisible(10, 5))
+console.log(isDivisible(123498175, 5))
+console.log(isDivisible(99, 5))
diff --git a/DSA/DSA-Javascript/Maths/IsEven.js b/DSA/DSA-Javascript/Maths/IsEven.js
new file mode 100644
index 00000000..d95a9ad4
--- /dev/null
+++ b/DSA/DSA-Javascript/Maths/IsEven.js
@@ -0,0 +1,10 @@
+// Return true if a number is even
+
+const isEven = num => {
+  if (typeof num !== 'number') return 'not a number'
+  return num % 2 === 0
+}
+
+console.log(isEven(2))
+console.log(isEven('hello world'))
+console.log(isEven(9))
diff --git a/DSA/DSA-Javascript/Maths/IsOdd.js b/DSA/DSA-Javascript/Maths/IsOdd.js
new file mode 100644
index 00000000..d914688a
--- /dev/null
+++ b/DSA/DSA-Javascript/Maths/IsOdd.js
@@ -0,0 +1,10 @@
+// Return true if a number is even
+
+const isEven = num => {
+  if (typeof num !== 'number') return 'not a number'
+  return num % 2 !== 0
+}
+
+console.log(isEven(2))
+console.log(isEven('hello world'))
+console.log(isEven(9))
diff --git a/DSA/DSA-Javascript/Maths/Pow.js b/DSA/DSA-Javascript/Maths/Pow.js
new file mode 100644
index 00000000..dfc46516
--- /dev/null
+++ b/DSA/DSA-Javascript/Maths/Pow.js
@@ -0,0 +1,13 @@
+// Returns the value of x to the power of y
+
+const pow = (x, y) => {
+  let result = 1
+  for (let i = 1; i <= y; i++) {
+    result *= x
+  }
+  return result
+}
+
+console.log(pow(9, 2))
+console.log(pow(0, 0))
+console.log(pow(3, 7))
diff --git a/DSA/DSA-Javascript/Sorts/BubbleSort.js b/DSA/DSA-Javascript/Sorts/BubbleSort.js
new file mode 100644
index 00000000..26f2c385
--- /dev/null
+++ b/DSA/DSA-Javascript/Sorts/BubbleSort.js
@@ -0,0 +1,17 @@
+const bubbleSort = inputArr => {
+  const len = inputArr.length
+  for (let i = 0; i < len; i++) {
+    for (let j = 0; j < len; j++) {
+      if (inputArr[j] > inputArr[j + 1]) {
+        const tmp = inputArr[j]
+        inputArr[j] = inputArr[j + 1]
+        inputArr[j + 1] = tmp
+      }
+    }
+  }
+  return inputArr
+}
+
+const array = [51, 76, 17, 8, 10, 2, 121, 44]
+const sortedArray = bubbleSort(array)
+console.log(sortedArray) // [ 2,  8, 10,  17, 44, 51, 76, 121 ]
diff --git a/DSA/DSA-Javascript/Sorts/InsertionSort.js b/DSA/DSA-Javascript/Sorts/InsertionSort.js
new file mode 100644
index 00000000..b3517f5c
--- /dev/null
+++ b/DSA/DSA-Javascript/Sorts/InsertionSort.js
@@ -0,0 +1,18 @@
+function insertionSort (unsortedList) {
+  const len = unsortedList.length
+  for (let i = 1; i < len; i++) {
+    let j
+    const tmp = unsortedList[i] // Copy of the current element.
+    // Check through the sorted part and compare with the number in tmp. If large, shift the number
+    for (j = i - 1; j >= 0 && unsortedList[j] > tmp; j--) {
+      // Shift the number
+      unsortedList[j + 1] = unsortedList[j]
+    }
+    // Insert the copied number at the correct position in sorted part.
+    unsortedList[j + 1] = tmp
+  }
+}
+
+const arr = [57, 32, 16, 2, 46, 89, 43, 88]
+insertionSort(arr)
+console.log(arr) // [ 2, 16, 32, 43, 46, 57, 88, 89 ]
diff --git a/DSA/DSA-Javascript/Sorts/MergeSort.js b/DSA/DSA-Javascript/Sorts/MergeSort.js
new file mode 100644
index 00000000..22bbf7c9
--- /dev/null
+++ b/DSA/DSA-Javascript/Sorts/MergeSort.js
@@ -0,0 +1,33 @@
+// Sort and merge two given arrays
+function merge (list1, list2) {
+  const results = []
+  let i = 0
+  let j = 0
+
+  while (i < list1.length && j < list2.length) {
+    if (list1[i] < list2[j]) {
+      results.push(list1[i++])
+    } else {
+      results.push(list2[j++])
+    }
+  }
+
+  return results.concat(list1.slice(i), list2.slice(j))
+}
+
+// Break down the lists into smaller pieces to be merged
+function mergeSort (list) {
+  if (list.length < 2) return list
+
+  const listHalf = Math.floor(list.length / 2)
+  const subList1 = list.slice(0, listHalf)
+  const subList2 = list.slice(listHalf, list.length)
+
+  return merge(mergeSort(subList1), mergeSort(subList2))
+}
+
+// Merge Sort Example
+const unsortedArray = [90, 56, 32, 81, 27, 6, 4, 17, 19, 10]
+const sortedArray = mergeSort(unsortedArray)
+
+console.log(sortedArray) // [ 4,  6, 10, 17, 19, 27, 32, 56, 81, 90 ]
diff --git a/DSA/DSA-Javascript/Sorts/QuickSort.js b/DSA/DSA-Javascript/Sorts/QuickSort.js
new file mode 100644
index 00000000..dcb5f245
--- /dev/null
+++ b/DSA/DSA-Javascript/Sorts/QuickSort.js
@@ -0,0 +1,28 @@
+function quickSort (items) {
+  const length = items.length
+
+  if (length <= 1) {
+    return items
+  }
+  const PIVOT = items[0]
+  const GREATER = []
+  const LESSER = []
+
+  for (let i = 1; i < length; i++) {
+    if (items[i] > PIVOT) {
+      GREATER.push(items[i])
+    } else {
+      LESSER.push(items[i])
+    }
+  }
+
+  let sorted = quickSort(LESSER)
+  sorted.push(PIVOT)
+  sorted = sorted.concat(quickSort(GREATER))
+
+  return sorted
+}
+
+const array = [10, 57, 3, 27, 2]
+const sortedArray = quickSort(array)
+console.log(sortedArray) // [ 2, 3, 10, 27, 57 ]
diff --git a/DSA/DSA-Javascript/Sorts/SelectionSort.js b/DSA/DSA-Javascript/Sorts/SelectionSort.js
new file mode 100644
index 00000000..c850ae3f
--- /dev/null
+++ b/DSA/DSA-Javascript/Sorts/SelectionSort.js
@@ -0,0 +1,31 @@
+const selectionSort = list => {
+  if (!Array.isArray(list)) {
+    throw new TypeError('Given input is not an array')
+  }
+  const items = [...list] // We don't want to modify the original array
+  const length = items.length
+  for (let i = 0; i < length - 1; i++) {
+    if (typeof items[i] !== 'number') {
+      throw new TypeError('One of the items in your array is not a number')
+    }
+    // Number of passes
+    let min = i // min holds the current minimum number position for each pass; i holds the Initial min number
+    for (let j = i + 1; j < length; j++) {
+      // Note that j = i + 1 as we only need to go through unsorted array
+      if (items[j] < items[min]) {
+        // Compare the numbers
+        min = j // Change the current min number position if a smaller num is found
+      }
+    }
+    if (min !== i) {
+      // After each pass, if the current min num != initial min num, exchange the position.
+      // Swap the numbers
+      ;[items[i], items[min]] = [items[min], items[i]]
+    }
+  }
+  return items
+}
+
+const array = [15, 6, 72, 68, 11, 2, 112, 14]
+const sortedArray = selectionSort(array)
+console.log(sortedArray) // [ 2,  6, 11,  14, 15, 68, 72, 112 ]
diff --git a/DSA/DSA-python/Maths/AverageMean.py b/DSA/DSA-python/Maths/AverageMean.py
new file mode 100644
index 00000000..09a034a5
--- /dev/null
+++ b/DSA/DSA-python/Maths/AverageMean.py
@@ -0,0 +1,15 @@
+# Find mean of a list of numbers.
+
+def mean(nums: list) -> float:
+    try:
+        if not nums:
+            raise ValueError("List is empty")
+        return sum(nums) / len(nums)
+    except Exception as err:
+        return err
+
+
+print(mean([3, 6, 9, 12, 15, 18, 21]))
+print(mean([5, 10, 15, 20, 25, 30, 35]))
+print(mean([1, 2, 3, 4, 5, 6, 7, 8]))
+print(mean([]))
diff --git a/DSA/DSA-python/Maths/FindMaximum.py b/DSA/DSA-python/Maths/FindMaximum.py
new file mode 100644
index 00000000..d86cb4bb
--- /dev/null
+++ b/DSA/DSA-python/Maths/FindMaximum.py
@@ -0,0 +1,10 @@
+# Find Maximum number in a list
+def find_max(nums):
+    maximum_num = nums[0]
+    for num in nums:
+        if num > maximum_num:
+            maximum_num = num
+    return maximum_num
+
+
+print(find_max([2, 4, 9, 7, 19, 94, 5]))
diff --git a/DSA/DSA-python/Maths/FindMinimum.py b/DSA/DSA-python/Maths/FindMinimum.py
new file mode 100644
index 00000000..c8b8bb0b
--- /dev/null
+++ b/DSA/DSA-python/Maths/FindMinimum.py
@@ -0,0 +1,11 @@
+# Find Minimum Number in a List
+def find_min(nums):
+    min_num = nums[0]
+    for num in nums:
+        if min_num > num:
+            min_num = num
+    return min_num
+
+
+print(find_min([0, 1, 2, 3, 4, 5, -3, 24, -56]))
+print(find_min([46, 32, -10, -54, 100, 101, -127]))
diff --git a/DSA/DSA-python/Maths/PerfectCube.py b/DSA/DSA-python/Maths/PerfectCube.py
new file mode 100644
index 00000000..968f1a6f
--- /dev/null
+++ b/DSA/DSA-python/Maths/PerfectCube.py
@@ -0,0 +1,8 @@
+# Check if a number is a perfect cube or not.
+def perfect_cube(n: int) -> bool:
+    val = n ** (1 / 3)
+    return (val * val * val) == n
+
+
+print(perfect_cube(27))
+print(perfect_cube(4))
diff --git a/DSA/DSA-python/Maths/PerfectSquare.py b/DSA/DSA-python/Maths/PerfectSquare.py
new file mode 100644
index 00000000..3af69f2f
--- /dev/null
+++ b/DSA/DSA-python/Maths/PerfectSquare.py
@@ -0,0 +1,24 @@
+# Check if a number is perfect square using binary search.
+
+def perfect_square(n: int) -> bool:
+    try:
+        left = 0
+        right = n
+        while left <= right:
+            mid = (left + right) // 2
+            if mid ** 2 == n:
+                return True
+            elif mid ** 2 > n:
+                right = mid - 1
+            else:
+                left = mid + 1
+        return False
+    except Exception as error:
+        return error
+
+
+print(perfect_square(16))
+print(perfect_square(1))
+print(perfect_square(10))
+print(perfect_square(None))
+print(perfect_square([]))
diff --git a/DSA/DSA-python/Sorting Algo/A-star Algorithm.py b/DSA/DSA-python/Sorting Algo/A-star Algorithm.py
new file mode 100644
index 00000000..4faf9d60
--- /dev/null
+++ b/DSA/DSA-python/Sorting Algo/A-star Algorithm.py	
@@ -0,0 +1,82 @@
+from queue import *
+class State(object):
+    def __init__(self,value, parent, start=0,goal=0,solver=0):
+        self.children = []
+        self.parent = parent
+        self.value = value
+        self.dist = 0
+        if parent:
+            self.path = parent.path[:]
+            self.path.append(value)
+            self.start = parent.start
+            self.goal = parent.goal
+            self.solver = parent.solver
+        else:
+            self.path = [value]
+            self.start = start
+            self.goal = goal
+            self.solver = solver
+
+    def GetDist(self):
+        pass
+    def CreateChildren(self):
+        pass
+
+
+class State_String(State):
+    def __init__(self, value, parent, start=0, goal=0, solver=0):
+        super(State_String,self).__init__(value, parent, start, goal, solver)
+        self.dist =self.GetDist()
+    def GetDist(self):
+        if self.value == self.goal:
+            return 0
+        dist = 0
+        for i in range(len(self.goal)):
+            letter = self.goal[i]
+            dist += abs(i - self.value.index(letter))
+        return dist
+    def CreateChildren(self):
+        if not self.children:
+            for i in range(len(self.goal)-1):
+                val = self.value
+                val = val[:i]+val[i+1]+val[i]+val[i+2]
+                child = State_String(val,self)
+                self.children.append(child)
+
+class Astar_Solver:
+    def __init__(self,start,goal):
+        self.path = []
+        self.visitedQueue = []
+        self.priorityQueue = PriorityQueue()
+        self.start = start
+        self.goal = goal
+
+    def Solver(self):
+        startState = State_String(self.start,0,self.start,self.goal,self)
+        count = 0
+        self.priorityQueue.put((0,count,startState))
+        while(not self.path and self.priorityQueue.qsize()):
+            closestChild = self.priorityQueue.get()[2]
+            closestChild.CreateChildren()
+            self.visitedQueue.append(closestChild.value)
+            for child in closestChild:
+                if child.value not in  self.visitedQueue:
+                    count += 1
+
+                    if not child.dist:
+                        self.path = child.path
+                        break
+                    self.priorityQueue.put((child.dist,count,child))
+
+        if not self.path:
+            print("Goal"+self.goal+"is not possible")
+        return self.path
+
+        if __name__ == "__main__":
+            start1 = "cdabfe"
+            goal1 = "abcdef"
+            print("Starting")
+            a = Astar_Solver(start1,goal1)
+            a.Solve()
+            for i in xrange(len(a.path)):
+                print("%d" %i + a.path[i])
\ No newline at end of file
diff --git a/DSA/DSA-python/Sorting Algo/BubbleSort.py b/DSA/DSA-python/Sorting Algo/BubbleSort.py
new file mode 100644
index 00000000..cd5dd192
--- /dev/null
+++ b/DSA/DSA-python/Sorting Algo/BubbleSort.py	
@@ -0,0 +1,20 @@
+#this is the most easiest algorith which jst involves swapping of elements
+import array 
+def BubbleSort(a):
+      n = len(a)
+
+      for i in range(n):
+            for j in range(i+1 , n):
+                  if(a[i]>a[j]):
+                        a[i] ,  a[j] = a[j] , a[i]
+
+a = array.array('i' , [])
+
+n = int(input("Enter lenght of array  : "))
+
+for i in range(n):
+      c = int(input("Enter the number : "))
+      a.append(c)
+
+BubbleSort(a)
+print(list(a))
\ No newline at end of file
diff --git a/DSA/DSA-python/Sorting Algo/InsertionSort.py b/DSA/DSA-python/Sorting Algo/InsertionSort.py
new file mode 100644
index 00000000..d568d389
--- /dev/null
+++ b/DSA/DSA-python/Sorting Algo/InsertionSort.py	
@@ -0,0 +1,25 @@
+import array
+
+# it is the most time taking sorting algo  , But performs best for small array which is already sorted
+
+def insertionSort(a):
+      for i in range(1 , len(a)):
+            key = a[i]
+            j = i-1
+            while (key<a[j] and j>=0):
+                  a[j+1]=a[j]
+                  j-=1
+            a[j+1]=key
+
+a = array.array('i' , [])
+
+n = int(input("Enter lenght of array  : "))
+
+for i in range(n):
+      c = int(input("Enter the number : "))
+      a.append(c)
+
+
+insertionSort(a)
+print(list(a))
+
diff --git a/DSA/DSA-python/Sorting Algo/Mergesort.py b/DSA/DSA-python/Sorting Algo/Mergesort.py
new file mode 100644
index 00000000..5990fe11
--- /dev/null
+++ b/DSA/DSA-python/Sorting Algo/Mergesort.py	
@@ -0,0 +1,66 @@
+# Program to implement merge sort
+
+import math     # to use math.inf
+
+# function for merge sort
+# arr[l..r] is the array that needs to be sorted
+# l and r are the left and right indices of arr
+def mergeSort(arr, l, r):
+    
+    if l < r:
+        # find mid index of arr
+        m = (l + r) // 2
+
+        # sort left half using merge sort
+        mergeSort(arr, l, m)
+
+        # sort right half using merge sort
+        mergeSort(arr, m + 1, r)
+
+        # merge the two half
+        merge(arr, l, m, r)
+
+
+# function for merging two sub arrays of arr[l..r]
+def merge(arr, l, m, r):
+    # length of left half of arr
+    nL = m - l + 1
+
+    # length of right half of arr
+    nR = r - m
+
+    # create two empty arrays L[0..nL] and R[0..nR]
+    L = [0] * (nL + 1)
+    R = [0] * (nR + 1)
+
+    # copy left half of arr in L[0..nL-1]
+    for i in range(0, nL):
+        L[i] = arr[l + i]
+
+    # copy right half of arr in R[0..nR-1]
+    for j in range(0, nR):
+        R[j] = arr[m + 1 + j]
+
+    # put infinity as sentinel value at the end of Both L and R
+    L[nL] = math.inf
+    R[nR] = math.inf
+
+    # iterate over L and R
+    # and copy the smallest of L[i] and R[j] to arr[k]
+    i = 0
+    j = 0
+    for k in range(l, r + 1):
+        if L[i] <= R[j]:
+            arr[k] = L[i]
+            i += 1
+        else:
+            arr[k] = R[j]
+            j += 1
+
+
+# driver code to test the implementation
+A = [2, 3, 5, 1, 5, 9, 7, 2, 8]
+
+mergeSort(A, 0, len(A) - 1)
+
+print(A)    # output: [1, 2, 2, 3, 5, 5, 7, 8, 9]
\ No newline at end of file
diff --git a/DSA/DSA-python/Sorting Algo/QuickSort.py b/DSA/DSA-python/Sorting Algo/QuickSort.py
new file mode 100644
index 00000000..65c5804f
--- /dev/null
+++ b/DSA/DSA-python/Sorting Algo/QuickSort.py	
@@ -0,0 +1,58 @@
+# This follows the same principle as Divide and conquer as in Merge Sort
+import array
+
+def partition(start , end , a):
+      #Initializing pivot index to start
+      pivot_index = start
+      pivot = a[pivot_index]
+
+      while start < end :
+
+            while start<len(a) and a[start]<=pivot : 
+                  start+=1
+
+            #decrement the end pointer till it 
+            # finds an element less than pivot
+
+            while a[end] > pivot : 
+                  end-=1
+
+            #if start and end have not crossed each other
+            #swap the numbers on start and end
+
+            if(start < end):
+                  a[start] , a[end] = a[end] , a[start]
+
+      # Swap pivot element with element on end pointer
+      # This puts pivot on its correct sorted place
+
+      a[end] , a[pivot_index] = a[pivot_index] , a[end]
+
+      return end
+
+def quick_sort(start , end , a):
+
+      if(start < end):
+            p = partition(start , end , a)
+            quick_sort(start , p-1 , a)
+            quick_sort(p+1 , end , a)
+
+a = array.array('i' , [])
+
+n = int(input("Enter lenght of array  : "))
+
+for i in range(n):
+      c = int(input("Enter the number : "))
+      a.append(c)
+
+quick_sort(0 , len(a)-1 , a)
+print(list(a))
+
+
+
+
+
+
+            
+
+
diff --git a/DSA/DSA-python/Sorting Algo/SelectionSort.py b/DSA/DSA-python/Sorting Algo/SelectionSort.py
new file mode 100644
index 00000000..25eb24ad
--- /dev/null
+++ b/DSA/DSA-python/Sorting Algo/SelectionSort.py	
@@ -0,0 +1,29 @@
+import array
+
+def SelectionSort(a):
+      n = len(a)
+      #i will go through len(a) - 1 array size -1(till)
+
+      for i in range(n):
+            min_index = i
+            for j in range(i+1 , n):
+                  if(a[j] < a[min_index]):
+                        #we will take new min index
+                        min_index = j
+
+            # Swap the found minimum element with
+            # the first element  
+            a[i] , a[min_index] = a[min_index] , a[i]
+
+
+a = array.array('i' , [])
+n = int(input("Enter lenght of array  : "))
+
+for i in range(n):
+      c = int(input("Enter the number : "))
+      a.append(c)
+
+# Time Complexity: O(n2) as there are two nested loops.
+
+SelectionSort(a)
+print(list(a))
diff --git a/DSA/DSA-python/Sorting Algo/bubblesort.py b/DSA/DSA-python/Sorting Algo/bubblesort.py
new file mode 100644
index 00000000..bf6342d5
--- /dev/null
+++ b/DSA/DSA-python/Sorting Algo/bubblesort.py	
@@ -0,0 +1,14 @@
+def bubbleSort(lst):
+    n = len(lst)
+ 
+    for i in range(n-1):
+ 
+        for j in range(0, n-i-1):
+ 
+           
+            if lst[j] > lst[j + 1] :
+                lst[j], lst[j + 1] = lst[j + 1], lst[j]
+ 
+lst = [64, 34, 25, 12, 22, 11, 90]
+ 
+bubbleSort(lst)
diff --git a/DSA/README.md b/DSA/README.md
new file mode 100644
index 00000000..201177b9
--- /dev/null
+++ b/DSA/README.md
@@ -0,0 +1,2 @@
+## Put DSA codes here
+### Make different folder accordingly for other language>concept>codes
diff --git a/DSA/Sorting Algo/bucket_sort.cpp b/DSA/Sorting Algo/bucket_sort.cpp
new file mode 100644
index 00000000..d3f49526
--- /dev/null
+++ b/DSA/Sorting Algo/bucket_sort.cpp	
@@ -0,0 +1,97 @@
+/*
+Bucket sort is a sorting algorithm that works by distributing the elements of an array into a number of buckets.
+Each bucket is then sorted individually, either using a different sorting algorithm,
+or by recursively applying the bucket sorting algorithm.Bucket sort is mainly useful when input is uniformly distributed
+over a range. Bucket sort can be implemented with comparisons and therefore can also be considered a comparison sort algorithm.
+*/
+
+// Header file to include STL library
+#include<bits/stdc++.h>
+ //For cin and cout
+using namespace std;
+
+//to sort the individual bucket
+void Insertion_Sort(float arr[10][10], int n, int idx) {
+  for (int i = 0; i < n; i++) {
+    int k = i;
+    float temp = arr[idx][i];
+    while (k - 1 >= 0 && arr[idx][k] < arr[idx][k - 1]) {
+      arr[idx][k] = arr[idx][k - 1];
+      k = k - 1;
+    }
+
+    arr[idx][k] = temp;
+  }
+}
+
+void Bucket_Sort(float arr[20], int n) {
+  // Declare a 2D array of float numbers
+  float temp[10][10];
+  //count array stores the length of elements in the respective buckets
+  int count[10] = {
+    0
+  };
+  for (int i = 0; i < n; i++) {
+    int idx = arr[i] * 10;
+    temp[idx][count[idx]] = arr[i];
+    count[idx]++;
+  }
+
+  for (int i = 0; i < 10; i++) {
+    if (count[i] > 0)
+      Insertion_Sort(temp, count[i], i);
+  }
+
+  //to rewrite the values in array in sorted order
+  int i = 0;
+  for (int j = 0; j < 10 && i < n; j++) {
+    if (count[j] > 0) {
+      for (int k = 0; k < count[j]; k++) {
+        arr[i] = temp[j][k];
+        i++;
+      }
+    }
+  }
+}
+
+int main() {
+  // Declare a variable to store no. of elements
+  int n;
+  // Declare an array of float numbers
+  float arr[20];
+  cout << "Enter number of elements :\n";
+  cin >> n;
+  for (int i = 0; i < n; i++) {
+    cout << "Enter the elements:\n";
+    cin >> arr[i];
+  }
+  //loop to print original array
+  cout << "\n";
+  for (int i = 0; i < n; i++) {
+    cout << "\t" << arr[i];
+  }
+  Bucket_Sort(arr, n);
+
+  cout << "\nSorted array is \n";
+  //loop to print sorted array
+  for (int i = 0; i < n; i++) {
+    cout << "\t" << arr[i];
+  }
+  return 0;
+}
+
+/*
+Input:
+Enter the number of elements :
+4
+Enter the elements:
+0.123 0.008 0.7 0.4
+Output:
+Sorted array is
+0.008 0.123 0.4 0.7
+--------------------------------
+Time Complexities:
+O(n+k): average time complexity
+O(n²): worst time complexity
+Space Complexity: O(n+k)
+*/
diff --git a/DSA/Sorting Algo/countsort.cpp b/DSA/Sorting Algo/countsort.cpp
new file mode 100644
index 00000000..a8f08ba6
--- /dev/null
+++ b/DSA/Sorting Algo/countsort.cpp	
@@ -0,0 +1,43 @@
+// C++ Program for implementation of counting sort  
+#include<bits/stdc++.h>  
+#include<string.h> 
+using namespace std;  
+  
+//  function to sort the given char arr[] in alphabetical order  
+void countSort(char arr[])  
+{    
+    char output[strlen(arr)];  
+  
+    //An array to store count of inidividul characters and initialize count array as 0  
+    int count[255 + 1], i;  
+    memset(count, 0, sizeof(count));  
+  
+    // Store count of each character  
+    for(i = 0; arr[i]; ++i)  
+        ++count[arr[i]];  
+  
+    // update count[i] so that count[i] now contains actual position of this character in output array  
+    for (i = 1; i <= 255; ++i)  
+        count[i] += count[i-1];  
+  
+    // Build the output character array  
+    for (i = 0; arr[i]; ++i)  
+    {  
+        output[count[arr[i]]-1] = arr[i];  
+        --count[arr[i]];  
+    }  
+     
+    // Copy the output array to arr to have sorted characters  
+    for (i = 0; arr[i]; ++i)  
+        arr[i] = output[i];  
+}  
+  
+int main()  
+{  
+    char arr[] = "datastructures"; 
+    //calling the countsort function inside main function
+    countSort(arr);  
+    //output the sorted array
+    cout<< "Sorted character array is " << arr;  
+    return 0;  
+}  
diff --git a/DSA/linearvsbinaryserach.cpp b/DSA/linearvsbinaryserach.cpp
deleted file mode 100644
index 7e963f73..00000000
--- a/DSA/linearvsbinaryserach.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <bits/stdc++.h>
-using namespace std;
-int linearSearch(int arr[],int size,int element){
-    int i;
-    for (i = 0; i < size; i++)
-    {
-        if(arr[i]==element){
-            return i;
-        }
-    }
-        return -1;
-}
-
-int binarySearch(int arr[],int size,int element){
-    int low=0,mid,high=size-1;  
-    // Keep searching until low <= high
-    while(low<=high)
-    {mid=(low+high)/2;
-    if(arr[mid]==element)
-        return mid;
-    else if(arr[mid]<element)
-        low=mid+1;
-    else 
-        high=mid-1;}
-    return -1;
-
-}
-
-int main()
-{
-    // Unsorted array for linear search
-    int arr[] = {1,3,5,56,4,3,23,5,4,54634,56,34};
-    int size = sizeof(arr)/sizeof(int);
-    int element=4;
-    int searchindex=linearSearch(arr,size,element);
-    cout<<"The element "<<element<<" found at index "<<endl<<searchindex<<endl;
-    
-    // sorted array for binary search
-    // int arr[] = {1,3,5,56,64,73,123,225,444};
-    // int size = sizeof(arr)/sizeof(int);
-    // int element=225;
-    // int searchindex=binarySearch(arr,size,element);
-    // cout<<"The element "<<element<<" found at index "<<endl<<searchindex<<endl;
-
-
-    return 0;
-}
diff --git a/Free-Resources/C++/pdfs/1.1 Banking System.pdf.pdf b/Free-Resources/C++/pdfs/1.1 Banking System.pdf.pdf
new file mode 100644
index 00000000..6fc3f55c
Binary files /dev/null and b/Free-Resources/C++/pdfs/1.1 Banking System.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/2.1 TemplateClass.pdf.pdf b/Free-Resources/C++/pdfs/2.1 TemplateClass.pdf.pdf
new file mode 100644
index 00000000..b7930181
Binary files /dev/null and b/Free-Resources/C++/pdfs/2.1 TemplateClass.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/5.1 VariableLiteralls.pdf.pdf b/Free-Resources/C++/pdfs/5.1 VariableLiteralls.pdf.pdf
new file mode 100644
index 00000000..61f26f1a
Binary files /dev/null and b/Free-Resources/C++/pdfs/5.1 VariableLiteralls.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/Arrays/1.1 Arrays.pdf.pdf b/Free-Resources/C++/pdfs/Arrays/1.1 Arrays.pdf.pdf
new file mode 100644
index 00000000..7c8c7fcd
Binary files /dev/null and b/Free-Resources/C++/pdfs/Arrays/1.1 Arrays.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/Arrays/13.1 ArrayDecl.pdf.pdf b/Free-Resources/C++/pdfs/Arrays/13.1 ArrayDecl.pdf.pdf
new file mode 100644
index 00000000..766752df
Binary files /dev/null and b/Free-Resources/C++/pdfs/Arrays/13.1 ArrayDecl.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/Arrays/13.2 ArrayPrograms.pdf.pdf b/Free-Resources/C++/pdfs/Arrays/13.2 ArrayPrograms.pdf.pdf
new file mode 100644
index 00000000..c9b48be4
Binary files /dev/null and b/Free-Resources/C++/pdfs/Arrays/13.2 ArrayPrograms.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/Arrays/27.1 Matrices.pdf.pdf b/Free-Resources/C++/pdfs/Arrays/27.1 Matrices.pdf.pdf
new file mode 100644
index 00000000..03dc9403
Binary files /dev/null and b/Free-Resources/C++/pdfs/Arrays/27.1 Matrices.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/Arrays/28.1 6. Average of Numbers.pdf.pdf b/Free-Resources/C++/pdfs/Arrays/28.1 6. Average of Numbers.pdf.pdf
new file mode 100644
index 00000000..87fd27ff
Binary files /dev/null and b/Free-Resources/C++/pdfs/Arrays/28.1 6. Average of Numbers.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/Arrays/29.1 7. Matrix Multiplication.pdf.pdf b/Free-Resources/C++/pdfs/Arrays/29.1 7. Matrix Multiplication.pdf.pdf
new file mode 100644
index 00000000..35e13f68
Binary files /dev/null and b/Free-Resources/C++/pdfs/Arrays/29.1 7. Matrix Multiplication.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/IOstrream/5.1 WritingandReadingFile.pdf.pdf b/Free-Resources/C++/pdfs/IOstrream/5.1 WritingandReadingFile.pdf.pdf
new file mode 100644
index 00000000..fc20437f
Binary files /dev/null and b/Free-Resources/C++/pdfs/IOstrream/5.1 WritingandReadingFile.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/IOstrream/6.1 Serialization.pdf.pdf b/Free-Resources/C++/pdfs/IOstrream/6.1 Serialization.pdf.pdf
new file mode 100644
index 00000000..8bd52389
Binary files /dev/null and b/Free-Resources/C++/pdfs/IOstrream/6.1 Serialization.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/IOstrream/9.1 14. Storing Items.pdf.pdf b/Free-Resources/C++/pdfs/IOstrream/9.1 14. Storing Items.pdf.pdf
new file mode 100644
index 00000000..47b85043
Binary files /dev/null and b/Free-Resources/C++/pdfs/IOstrream/9.1 14. Storing Items.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/Introduction to oops/15.1 NotesForClasses.pdf.pdf b/Free-Resources/C++/pdfs/Introduction to oops/15.1 NotesForClasses.pdf.pdf
new file mode 100644
index 00000000..47c59d9c
Binary files /dev/null and b/Free-Resources/C++/pdfs/Introduction to oops/15.1 NotesForClasses.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/Introduction to oops/15.2 AllMethods.pdf.pdf b/Free-Resources/C++/pdfs/Introduction to oops/15.2 AllMethods.pdf.pdf
new file mode 100644
index 00000000..1648fc0c
Binary files /dev/null and b/Free-Resources/C++/pdfs/Introduction to oops/15.2 AllMethods.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/Introduction to oops/21.1 9. Student Class.pdf.pdf b/Free-Resources/C++/pdfs/Introduction to oops/21.1 9. Student Class.pdf.pdf
new file mode 100644
index 00000000..8b09bf41
Binary files /dev/null and b/Free-Resources/C++/pdfs/Introduction to oops/21.1 9. Student Class.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/Introduction to oops/3.1 OOps.pdf.pdf b/Free-Resources/C++/pdfs/Introduction to oops/3.1 OOps.pdf.pdf
new file mode 100644
index 00000000..28ae0244
Binary files /dev/null and b/Free-Resources/C++/pdfs/Introduction to oops/3.1 OOps.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/Introduction to oops/5.1 FirstClass.pdf.pdf b/Free-Resources/C++/pdfs/Introduction to oops/5.1 FirstClass.pdf.pdf
new file mode 100644
index 00000000..712fbab2
Binary files /dev/null and b/Free-Resources/C++/pdfs/Introduction to oops/5.1 FirstClass.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/Pointer/10.1 Reference.pdf.pdf b/Free-Resources/C++/pdfs/Pointer/10.1 Reference.pdf.pdf
new file mode 100644
index 00000000..e9afc13f
Binary files /dev/null and b/Free-Resources/C++/pdfs/Pointer/10.1 Reference.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/Pointer/2.1 Pointers.pdf.pdf b/Free-Resources/C++/pdfs/Pointer/2.1 Pointers.pdf.pdf
new file mode 100644
index 00000000..d1b13334
Binary files /dev/null and b/Free-Resources/C++/pdfs/Pointer/2.1 Pointers.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/Pointer/8.1 PointerArithmetic.pdf.pdf b/Free-Resources/C++/pdfs/Pointer/8.1 PointerArithmetic.pdf.pdf
new file mode 100644
index 00000000..af85dfb3
Binary files /dev/null and b/Free-Resources/C++/pdfs/Pointer/8.1 PointerArithmetic.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/STL/7.1 15. Items using Vector.pdf.pdf b/Free-Resources/C++/pdfs/STL/7.1 15. Items using Vector.pdf.pdf
new file mode 100644
index 00000000..c5ba27c4
Binary files /dev/null and b/Free-Resources/C++/pdfs/STL/7.1 15. Items using Vector.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/baseclasspointerderivedclassobject/4.1 BaseClassPointer.pdf.pdf b/Free-Resources/C++/pdfs/baseclasspointerderivedclassobject/4.1 BaseClassPointer.pdf.pdf
new file mode 100644
index 00000000..4c517e16
Binary files /dev/null and b/Free-Resources/C++/pdfs/baseclasspointerderivedclassobject/4.1 BaseClassPointer.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/c++ basics/15.1 Expression.pdf (1).pdf b/Free-Resources/C++/pdfs/c++ basics/15.1 Expression.pdf (1).pdf
new file mode 100644
index 00000000..a0992361
Binary files /dev/null and b/Free-Resources/C++/pdfs/c++ basics/15.1 Expression.pdf (1).pdf differ
diff --git a/Free-Resources/C++/pdfs/c++ basics/15.1 Expression.pdf.pdf b/Free-Resources/C++/pdfs/c++ basics/15.1 Expression.pdf.pdf
new file mode 100644
index 00000000..a0992361
Binary files /dev/null and b/Free-Resources/C++/pdfs/c++ basics/15.1 Expression.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/c++ basics/21.1 CompoundArithmetic.pdf.pdf b/Free-Resources/C++/pdfs/c++ basics/21.1 CompoundArithmetic.pdf.pdf
new file mode 100644
index 00000000..b32cb3f9
Binary files /dev/null and b/Free-Resources/C++/pdfs/c++ basics/21.1 CompoundArithmetic.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/c++ basics/23.1 IncDec.pdf.pdf b/Free-Resources/C++/pdfs/c++ basics/23.1 IncDec.pdf.pdf
new file mode 100644
index 00000000..0059c021
Binary files /dev/null and b/Free-Resources/C++/pdfs/c++ basics/23.1 IncDec.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/c++ basics/25.1 Overflow.pdf.pdf b/Free-Resources/C++/pdfs/c++ basics/25.1 Overflow.pdf.pdf
new file mode 100644
index 00000000..f91d43e9
Binary files /dev/null and b/Free-Resources/C++/pdfs/c++ basics/25.1 Overflow.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/c++ basics/27.1 Bitwise.pdf.pdf b/Free-Resources/C++/pdfs/c++ basics/27.1 Bitwise.pdf.pdf
new file mode 100644
index 00000000..d6c0c2cb
Binary files /dev/null and b/Free-Resources/C++/pdfs/c++ basics/27.1 Bitwise.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/c++ basics/3.1 First.pdf.pdf b/Free-Resources/C++/pdfs/c++ basics/3.1 First.pdf.pdf
new file mode 100644
index 00000000..f2aa7371
Binary files /dev/null and b/Free-Resources/C++/pdfs/c++ basics/3.1 First.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/c++ basics/30.1 1. Area of Circle.pdf.pdf b/Free-Resources/C++/pdfs/c++ basics/30.1 1. Area of Circle.pdf.pdf
new file mode 100644
index 00000000..fa4f7bc7
Binary files /dev/null and b/Free-Resources/C++/pdfs/c++ basics/30.1 1. Area of Circle.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/c++ basics/31.1 2. Net Salary.pdf.pdf b/Free-Resources/C++/pdfs/c++ basics/31.1 2. Net Salary.pdf.pdf
new file mode 100644
index 00000000..890adf8c
Binary files /dev/null and b/Free-Resources/C++/pdfs/c++ basics/31.1 2. Net Salary.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/c++11/9.1 Ellipsis.pdf.pdf b/Free-Resources/C++/pdfs/c++11/9.1 Ellipsis.pdf.pdf
new file mode 100644
index 00000000..f368a1f8
Binary files /dev/null and b/Free-Resources/C++/pdfs/c++11/9.1 Ellipsis.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/conditional statement/1.1 NotesConditional.pdf.pdf b/Free-Resources/C++/pdfs/conditional statement/1.1 NotesConditional.pdf.pdf
new file mode 100644
index 00000000..f32f6010
Binary files /dev/null and b/Free-Resources/C++/pdfs/conditional statement/1.1 NotesConditional.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/conditional statement/17.1 Maxof 3.pdf.pdf b/Free-Resources/C++/pdfs/conditional statement/17.1 Maxof 3.pdf.pdf
new file mode 100644
index 00000000..c0b4a9cf
Binary files /dev/null and b/Free-Resources/C++/pdfs/conditional statement/17.1 Maxof 3.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/conditional statement/27.1 elseifLadder.pdf.pdf b/Free-Resources/C++/pdfs/conditional statement/27.1 elseifLadder.pdf.pdf
new file mode 100644
index 00000000..476420e7
Binary files /dev/null and b/Free-Resources/C++/pdfs/conditional statement/27.1 elseifLadder.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/conditional statement/29.1 ShortCircuit.pdf.pdf b/Free-Resources/C++/pdfs/conditional statement/29.1 ShortCircuit.pdf.pdf
new file mode 100644
index 00000000..ff792208
Binary files /dev/null and b/Free-Resources/C++/pdfs/conditional statement/29.1 ShortCircuit.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/conditional statement/31.1 DynDecl.pdf.pdf b/Free-Resources/C++/pdfs/conditional statement/31.1 DynDecl.pdf.pdf
new file mode 100644
index 00000000..d26ef90d
Binary files /dev/null and b/Free-Resources/C++/pdfs/conditional statement/31.1 DynDecl.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/conditional statement/32.1 Switch.pdf.pdf b/Free-Resources/C++/pdfs/conditional statement/32.1 Switch.pdf.pdf
new file mode 100644
index 00000000..f787f358
Binary files /dev/null and b/Free-Resources/C++/pdfs/conditional statement/32.1 Switch.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/conditional statement/35.1 SwitchExample.pdf.pdf b/Free-Resources/C++/pdfs/conditional statement/35.1 SwitchExample.pdf.pdf
new file mode 100644
index 00000000..6d761be6
Binary files /dev/null and b/Free-Resources/C++/pdfs/conditional statement/35.1 SwitchExample.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/conditional statement/36.1 DayOfWeek.pdf.pdf b/Free-Resources/C++/pdfs/conditional statement/36.1 DayOfWeek.pdf.pdf
new file mode 100644
index 00000000..6c7a9830
Binary files /dev/null and b/Free-Resources/C++/pdfs/conditional statement/36.1 DayOfWeek.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/conditional statement/38.2 3. Bill Amount.pdf.pdf b/Free-Resources/C++/pdfs/conditional statement/38.2 3. Bill Amount.pdf.pdf
new file mode 100644
index 00000000..22696b3d
Binary files /dev/null and b/Free-Resources/C++/pdfs/conditional statement/38.2 3. Bill Amount.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/conditional statement/39.1 4. Leap Year.pdf.pdf b/Free-Resources/C++/pdfs/conditional statement/39.1 4. Leap Year.pdf.pdf
new file mode 100644
index 00000000..e08aa4b0
Binary files /dev/null and b/Free-Resources/C++/pdfs/conditional statement/39.1 4. Leap Year.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/conditional statement/6.1 SimpleCondition.pdf.pdf b/Free-Resources/C++/pdfs/conditional statement/6.1 SimpleCondition.pdf.pdf
new file mode 100644
index 00000000..39357895
Binary files /dev/null and b/Free-Resources/C++/pdfs/conditional statement/6.1 SimpleCondition.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/conditional statement/7.1 Validation.pdf.pdf b/Free-Resources/C++/pdfs/conditional statement/7.1 Validation.pdf.pdf
new file mode 100644
index 00000000..986a91c2
Binary files /dev/null and b/Free-Resources/C++/pdfs/conditional statement/7.1 Validation.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/conditional statement/9.1 CompoundCondition.pdf.pdf b/Free-Resources/C++/pdfs/conditional statement/9.1 CompoundCondition.pdf.pdf
new file mode 100644
index 00000000..67507eee
Binary files /dev/null and b/Free-Resources/C++/pdfs/conditional statement/9.1 CompoundCondition.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/constant,preprocessor,namespace/4.1 PreProcessor.pdf.pdf b/Free-Resources/C++/pdfs/constant,preprocessor,namespace/4.1 PreProcessor.pdf.pdf
new file mode 100644
index 00000000..822ec2a5
Binary files /dev/null and b/Free-Resources/C++/pdfs/constant,preprocessor,namespace/4.1 PreProcessor.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/exceptionhandling/10.1 13. User-Defined Exception.pdf.pdf b/Free-Resources/C++/pdfs/exceptionhandling/10.1 13. User-Defined Exception.pdf.pdf
new file mode 100644
index 00000000..2332685d
Binary files /dev/null and b/Free-Resources/C++/pdfs/exceptionhandling/10.1 13. User-Defined Exception.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/exceptionhandling/4.1 Exception.pdf.pdf b/Free-Resources/C++/pdfs/exceptionhandling/4.1 Exception.pdf.pdf
new file mode 100644
index 00000000..a86e42b2
Binary files /dev/null and b/Free-Resources/C++/pdfs/exceptionhandling/4.1 Exception.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/friendandstaticmemberinnerclass/2.1 FriendClass.pdf.pdf b/Free-Resources/C++/pdfs/friendandstaticmemberinnerclass/2.1 FriendClass.pdf.pdf
new file mode 100644
index 00000000..a6e06fcb
Binary files /dev/null and b/Free-Resources/C++/pdfs/friendandstaticmemberinnerclass/2.1 FriendClass.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/friendandstaticmemberinnerclass/4.1 StaticMembers.pdf.pdf b/Free-Resources/C++/pdfs/friendandstaticmemberinnerclass/4.1 StaticMembers.pdf.pdf
new file mode 100644
index 00000000..ed97473b
Binary files /dev/null and b/Free-Resources/C++/pdfs/friendandstaticmemberinnerclass/4.1 StaticMembers.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/friendandstaticmemberinnerclass/6.1 StaticExample.pdf.pdf b/Free-Resources/C++/pdfs/friendandstaticmemberinnerclass/6.1 StaticExample.pdf.pdf
new file mode 100644
index 00000000..4cb7a8e9
Binary files /dev/null and b/Free-Resources/C++/pdfs/friendandstaticmemberinnerclass/6.1 StaticExample.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/functions/1.1 Functions.pdf.pdf b/Free-Resources/C++/pdfs/functions/1.1 Functions.pdf.pdf
new file mode 100644
index 00000000..e0ff2cf0
Binary files /dev/null and b/Free-Resources/C++/pdfs/functions/1.1 Functions.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/functions/12.1 FunctionTemplate.pdf.pdf b/Free-Resources/C++/pdfs/functions/12.1 FunctionTemplate.pdf.pdf
new file mode 100644
index 00000000..072c668e
Binary files /dev/null and b/Free-Resources/C++/pdfs/functions/12.1 FunctionTemplate.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/functions/14.1 DefaultArguments.pdf.pdf b/Free-Resources/C++/pdfs/functions/14.1 DefaultArguments.pdf.pdf
new file mode 100644
index 00000000..83ea1fb3
Binary files /dev/null and b/Free-Resources/C++/pdfs/functions/14.1 DefaultArguments.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/functions/16.1 PassByValue.pdf.pdf b/Free-Resources/C++/pdfs/functions/16.1 PassByValue.pdf.pdf
new file mode 100644
index 00000000..2290785e
Binary files /dev/null and b/Free-Resources/C++/pdfs/functions/16.1 PassByValue.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/functions/19.1 PAssByAddress.pdf.pdf b/Free-Resources/C++/pdfs/functions/19.1 PAssByAddress.pdf.pdf
new file mode 100644
index 00000000..bca2d1c6
Binary files /dev/null and b/Free-Resources/C++/pdfs/functions/19.1 PAssByAddress.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/functions/19.2 PassByReference.pdf.pdf b/Free-Resources/C++/pdfs/functions/19.2 PassByReference.pdf.pdf
new file mode 100644
index 00000000..255628ab
Binary files /dev/null and b/Free-Resources/C++/pdfs/functions/19.2 PassByReference.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/functions/2.1 FunctionPrograms.pdf.pdf b/Free-Resources/C++/pdfs/functions/2.1 FunctionPrograms.pdf.pdf
new file mode 100644
index 00000000..64e134ef
Binary files /dev/null and b/Free-Resources/C++/pdfs/functions/2.1 FunctionPrograms.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/functions/21.1 ReturnByAddress.pdf.pdf b/Free-Resources/C++/pdfs/functions/21.1 ReturnByAddress.pdf.pdf
new file mode 100644
index 00000000..57b43a1c
Binary files /dev/null and b/Free-Resources/C++/pdfs/functions/21.1 ReturnByAddress.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/functions/22.1 ReturnByReference.pdf.pdf b/Free-Resources/C++/pdfs/functions/22.1 ReturnByReference.pdf.pdf
new file mode 100644
index 00000000..a5db6d17
Binary files /dev/null and b/Free-Resources/C++/pdfs/functions/22.1 ReturnByReference.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/functions/27.1 StaticVariables.pdf.pdf b/Free-Resources/C++/pdfs/functions/27.1 StaticVariables.pdf.pdf
new file mode 100644
index 00000000..6bd1f01b
Binary files /dev/null and b/Free-Resources/C++/pdfs/functions/27.1 StaticVariables.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/functions/29.1 Linear Search.pdf.pdf b/Free-Resources/C++/pdfs/functions/29.1 Linear Search.pdf.pdf
new file mode 100644
index 00000000..b9add1d5
Binary files /dev/null and b/Free-Resources/C++/pdfs/functions/29.1 Linear Search.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/functions/9.1 FucntionOverloading.pdf.pdf b/Free-Resources/C++/pdfs/functions/9.1 FucntionOverloading.pdf.pdf
new file mode 100644
index 00000000..b11b1da6
Binary files /dev/null and b/Free-Resources/C++/pdfs/functions/9.1 FucntionOverloading.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/inheritance/10.1 AccessSpecifiers.pdf.pdf b/Free-Resources/C++/pdfs/inheritance/10.1 AccessSpecifiers.pdf.pdf
new file mode 100644
index 00000000..30f4dd6a
Binary files /dev/null and b/Free-Resources/C++/pdfs/inheritance/10.1 AccessSpecifiers.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/inheritance/13.1 WaysOfInheritance.pdf.pdf b/Free-Resources/C++/pdfs/inheritance/13.1 WaysOfInheritance.pdf.pdf
new file mode 100644
index 00000000..4e618e8d
Binary files /dev/null and b/Free-Resources/C++/pdfs/inheritance/13.1 WaysOfInheritance.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/inheritance/15.1 11. Inheritance.pdf.pdf b/Free-Resources/C++/pdfs/inheritance/15.1 11. Inheritance.pdf.pdf
new file mode 100644
index 00000000..5bdcb0d0
Binary files /dev/null and b/Free-Resources/C++/pdfs/inheritance/15.1 11. Inheritance.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/inheritance/3.1 Inheritance.pdf.pdf b/Free-Resources/C++/pdfs/inheritance/3.1 Inheritance.pdf.pdf
new file mode 100644
index 00000000..f4597430
Binary files /dev/null and b/Free-Resources/C++/pdfs/inheritance/3.1 Inheritance.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/inheritance/4.1 ExampleOfInheritance.pdf.pdf b/Free-Resources/C++/pdfs/inheritance/4.1 ExampleOfInheritance.pdf.pdf
new file mode 100644
index 00000000..5e670baa
Binary files /dev/null and b/Free-Resources/C++/pdfs/inheritance/4.1 ExampleOfInheritance.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/inheritance/7.1 ConstructorInInheritance.pdf.pdf b/Free-Resources/C++/pdfs/inheritance/7.1 ConstructorInInheritance.pdf.pdf
new file mode 100644
index 00000000..8020bce0
Binary files /dev/null and b/Free-Resources/C++/pdfs/inheritance/7.1 ConstructorInInheritance.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/loops/1.1 Loops.pdf.pdf b/Free-Resources/C++/pdfs/loops/1.1 Loops.pdf.pdf
new file mode 100644
index 00000000..b5803a9e
Binary files /dev/null and b/Free-Resources/C++/pdfs/loops/1.1 Loops.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/loops/10.1 Prime.pdf.pdf b/Free-Resources/C++/pdfs/loops/10.1 Prime.pdf.pdf
new file mode 100644
index 00000000..c5c60f32
Binary files /dev/null and b/Free-Resources/C++/pdfs/loops/10.1 Prime.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/loops/17.1 DisplayDigits.pdf.pdf b/Free-Resources/C++/pdfs/loops/17.1 DisplayDigits.pdf.pdf
new file mode 100644
index 00000000..b33c126d
Binary files /dev/null and b/Free-Resources/C++/pdfs/loops/17.1 DisplayDigits.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/loops/18.1 SumofDigits.pdf.pdf b/Free-Resources/C++/pdfs/loops/18.1 SumofDigits.pdf.pdf
new file mode 100644
index 00000000..ae17274e
Binary files /dev/null and b/Free-Resources/C++/pdfs/loops/18.1 SumofDigits.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/loops/26.1 GCD.pdf.pdf b/Free-Resources/C++/pdfs/loops/26.1 GCD.pdf.pdf
new file mode 100644
index 00000000..b6bd84f1
Binary files /dev/null and b/Free-Resources/C++/pdfs/loops/26.1 GCD.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/loops/27.1 5. Reverse a Number.pdf.pdf b/Free-Resources/C++/pdfs/loops/27.1 5. Reverse a Number.pdf.pdf
new file mode 100644
index 00000000..95ca232b
Binary files /dev/null and b/Free-Resources/C++/pdfs/loops/27.1 5. Reverse a Number.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/loops/3.1 AllLoops.pdf.pdf b/Free-Resources/C++/pdfs/loops/3.1 AllLoops.pdf.pdf
new file mode 100644
index 00000000..7f843cbe
Binary files /dev/null and b/Free-Resources/C++/pdfs/loops/3.1 AllLoops.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/loops/4.1 infiniteloop.pdf.pdf b/Free-Resources/C++/pdfs/loops/4.1 infiniteloop.pdf.pdf
new file mode 100644
index 00000000..597d3a09
Binary files /dev/null and b/Free-Resources/C++/pdfs/loops/4.1 infiniteloop.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/loops/6.1 SummOfNnumbers.pdf.pdf b/Free-Resources/C++/pdfs/loops/6.1 SummOfNnumbers.pdf.pdf
new file mode 100644
index 00000000..10581ab9
Binary files /dev/null and b/Free-Resources/C++/pdfs/loops/6.1 SummOfNnumbers.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/loops/8.1 Factors.pdf.pdf b/Free-Resources/C++/pdfs/loops/8.1 Factors.pdf.pdf
new file mode 100644
index 00000000..6a4b5252
Binary files /dev/null and b/Free-Resources/C++/pdfs/loops/8.1 Factors.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/operator Overloading/2.1 OperatorOverloading.pdf.pdf b/Free-Resources/C++/pdfs/operator Overloading/2.1 OperatorOverloading.pdf.pdf
new file mode 100644
index 00000000..6021846e
Binary files /dev/null and b/Free-Resources/C++/pdfs/operator Overloading/2.1 OperatorOverloading.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/operator Overloading/4.1 OperatorUsingFriend.pdf.pdf b/Free-Resources/C++/pdfs/operator Overloading/4.1 OperatorUsingFriend.pdf.pdf
new file mode 100644
index 00000000..d4edad40
Binary files /dev/null and b/Free-Resources/C++/pdfs/operator Overloading/4.1 OperatorUsingFriend.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/operator Overloading/6.1 StreamOverloading.pdf.pdf b/Free-Resources/C++/pdfs/operator Overloading/6.1 StreamOverloading.pdf.pdf
new file mode 100644
index 00000000..abfb6cb3
Binary files /dev/null and b/Free-Resources/C++/pdfs/operator Overloading/6.1 StreamOverloading.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/operator Overloading/7.1 10. Retional Number.pdf.pdf b/Free-Resources/C++/pdfs/operator Overloading/7.1 10. Retional Number.pdf.pdf
new file mode 100644
index 00000000..955b8e0b
Binary files /dev/null and b/Free-Resources/C++/pdfs/operator Overloading/7.1 10. Retional Number.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/polymorphism/10.1 12. Polymorphism.pdf.pdf b/Free-Resources/C++/pdfs/polymorphism/10.1 12. Polymorphism.pdf.pdf
new file mode 100644
index 00000000..e511b0f8
Binary files /dev/null and b/Free-Resources/C++/pdfs/polymorphism/10.1 12. Polymorphism.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/polymorphism/2.1 FunctionOverriding.pdf.pdf b/Free-Resources/C++/pdfs/polymorphism/2.1 FunctionOverriding.pdf.pdf
new file mode 100644
index 00000000..50a3b2ea
Binary files /dev/null and b/Free-Resources/C++/pdfs/polymorphism/2.1 FunctionOverriding.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/polymorphism/4.1 VirtualFunctions.pdf.pdf b/Free-Resources/C++/pdfs/polymorphism/4.1 VirtualFunctions.pdf.pdf
new file mode 100644
index 00000000..f3845917
Binary files /dev/null and b/Free-Resources/C++/pdfs/polymorphism/4.1 VirtualFunctions.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/polymorphism/7.1 Polymorphism.pdf.pdf b/Free-Resources/C++/pdfs/polymorphism/7.1 Polymorphism.pdf.pdf
new file mode 100644
index 00000000..c8dfd7cb
Binary files /dev/null and b/Free-Resources/C++/pdfs/polymorphism/7.1 Polymorphism.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/polymorphism/9.1 AbstractClass.pdf.pdf b/Free-Resources/C++/pdfs/polymorphism/9.1 AbstractClass.pdf.pdf
new file mode 100644
index 00000000..67230f83
Binary files /dev/null and b/Free-Resources/C++/pdfs/polymorphism/9.1 AbstractClass.pdf.pdf differ
diff --git a/Free-Resources/C++/pdfs/test b/Free-Resources/C++/pdfs/test
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/Free-Resources/C++/pdfs/test
@@ -0,0 +1 @@
+
diff --git a/Free-Resources/README.md b/Free-Resources/README.md
new file mode 100644
index 00000000..37c3aa96
--- /dev/null
+++ b/Free-Resources/README.md
@@ -0,0 +1,9 @@
+## This folder contains some free resources to help beginners start their Programming Journey
+### Resources related to different programming languages
+
+**Folder will be arranged in this manner:**
+
+eg: (Folder Name) **C++**: Ebooks(folder), Docs(Folder), Videos(Folder)
+     Every contents will be arranged accordingly.
+         
+       
diff --git a/Java/AddTwoNumbers.java b/Java/AddTwoNumbers.java
new file mode 100644
index 00000000..5e38fc84
--- /dev/null
+++ b/Java/AddTwoNumbers.java
@@ -0,0 +1,43 @@
+/**
+ * You are given two non-empty linked lists representing two non-negative
+ * integers. The digits are stored in reverse order, and each of their nodes
+ * contains a single digit. Add the two numbers and return the sum as a linked
+ * list.
+ * 
+ * You may assume the two numbers do not contain any leading zero, except the
+ * number 0 itself.
+ */
+
+/**
+ * Definition for singly-linked list. public class ListNode { int val; ListNode
+ * next; ListNode() {} ListNode(int val) { this.val = val; } ListNode(int val,
+ * ListNode next) { this.val = val; this.next = next; } }
+ */
+class Solution {
+  public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
+    ListNode ans = new ListNode();
+    ListNode temp = ans;
+    int carry = 0;
+
+    while (l1 != null || l2 != null || carry != 0) {
+      int s = 0;
+      if (l1 != null) {
+        s += l1.val;
+        l1 = l1.next;
+      }
+      if (l2 != null) {
+        s += l2.val;
+        l2 = l2.next;
+      }
+
+      s += carry;
+      carry = s / 10;
+      ListNode n = new ListNode(s % 10);
+      temp.next = n;
+      temp = temp.next;
+    }
+
+    return ans.next;
+
+  }
+}
diff --git a/Java/Banking/.idea/.gitignore b/Java/Banking/.idea/.gitignore
new file mode 100644
index 00000000..26d33521
--- /dev/null
+++ b/Java/Banking/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/Java/Banking/.idea/description.html b/Java/Banking/.idea/description.html
new file mode 100644
index 00000000..db5f1295
--- /dev/null
+++ b/Java/Banking/.idea/description.html
@@ -0,0 +1 @@
+<html>Simple <b>Java</b> application that includes a class with <code>main()</code> method</html>
\ No newline at end of file
diff --git a/Java/Banking/.idea/encodings.xml b/Java/Banking/.idea/encodings.xml
new file mode 100644
index 00000000..97626ba4
--- /dev/null
+++ b/Java/Banking/.idea/encodings.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding">
+    <file url="PROJECT" charset="UTF-8" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/Java/Banking/.idea/misc.xml b/Java/Banking/.idea/misc.xml
new file mode 100644
index 00000000..bf392ff5
--- /dev/null
+++ b/Java/Banking/.idea/misc.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectKey">
+    <option name="state" value="project://e2804f05-5315-4fc6-a121-c522a6c26470" />
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/Java/Banking/.idea/modules.xml b/Java/Banking/.idea/modules.xml
new file mode 100644
index 00000000..365d32c2
--- /dev/null
+++ b/Java/Banking/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/Banking.iml" filepath="$PROJECT_DIR$/Banking.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/Java/Banking/.idea/project-template.xml b/Java/Banking/.idea/project-template.xml
new file mode 100644
index 00000000..1f08b887
--- /dev/null
+++ b/Java/Banking/.idea/project-template.xml
@@ -0,0 +1,3 @@
+<template>
+  <input-field default="com.company">IJ_BASE_PACKAGE</input-field>
+</template>
\ No newline at end of file
diff --git a/Java/Banking/.idea/vcs.xml b/Java/Banking/.idea/vcs.xml
new file mode 100644
index 00000000..94a25f7f
--- /dev/null
+++ b/Java/Banking/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/Java/Banking/Banking.iml b/Java/Banking/Banking.iml
new file mode 100644
index 00000000..d5c07432
--- /dev/null
+++ b/Java/Banking/Banking.iml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
+
diff --git a/Java/Banking/out/production/Banking/com/company/Bank.class b/Java/Banking/out/production/Banking/com/company/Bank.class
new file mode 100644
index 00000000..a789fec4
Binary files /dev/null and b/Java/Banking/out/production/Banking/com/company/Bank.class differ
diff --git a/Java/Banking/out/production/Banking/com/company/Branch.class b/Java/Banking/out/production/Banking/com/company/Branch.class
new file mode 100644
index 00000000..f64f7cf5
Binary files /dev/null and b/Java/Banking/out/production/Banking/com/company/Branch.class differ
diff --git a/Java/Banking/out/production/Banking/com/company/Customer.class b/Java/Banking/out/production/Banking/com/company/Customer.class
new file mode 100644
index 00000000..37294488
Binary files /dev/null and b/Java/Banking/out/production/Banking/com/company/Customer.class differ
diff --git a/Java/Banking/out/production/Banking/com/company/Main.class b/Java/Banking/out/production/Banking/com/company/Main.class
new file mode 100644
index 00000000..8db6cf50
Binary files /dev/null and b/Java/Banking/out/production/Banking/com/company/Main.class differ
diff --git a/Java/Banking/src/com/company/Bank.java b/Java/Banking/src/com/company/Bank.java
new file mode 100644
index 00000000..01a915a9
--- /dev/null
+++ b/Java/Banking/src/com/company/Bank.java
@@ -0,0 +1,89 @@
+package com.company;
+
+import java.util.ArrayList;
+
+public class Bank {
+    private String name;
+    private ArrayList<Branch> branches;
+
+    public Bank(String name){
+        this.name = name;
+        this.branches = new ArrayList<Branch>();
+    }
+
+    // find the name of the branch
+    private Branch findBranch(String branchName){
+        for (Branch branch : this.branches) {
+            String searchName = branch.getName();
+            if (branchName.equals(searchName)) {
+                return branch;
+            }
+        }
+        return null;
+    }
+
+    // add branch
+    public boolean addBranch(String branchName){
+        Branch existingBranch = findBranch(branchName);
+        if(existingBranch == null){
+            Branch newBranch = new Branch(branchName);
+            branches.add(newBranch);
+            System.out.println(branchName + " branch added successfully");
+            return true;
+        }else{
+            System.out.println("branch name already exists");
+
+        }
+        return  false;
+    }
+
+    // add customer
+    public boolean addCustomer(String customerName, String branchName, double initialTransaction){
+        Branch existingBranch = findBranch(branchName);
+        System.out.println("branch is " + branchName);
+
+        if(existingBranch != null){
+            existingBranch.newCustomer(customerName,initialTransaction);
+            System.out.println("customer -> " + customerName + " added successfully to " + branchName);
+            return true;
+        }else{
+            System.out.println("something went wrong");
+        }
+        return false;
+    }
+
+    // add customer transaction
+    public boolean addCustomerTransaction(String customerName, String branchName, double initialTransaction){
+        Branch existingBranch = findBranch(branchName);
+        if(existingBranch != null){
+            System.out.println("Customer " + customerName + " transaction ->" + initialTransaction);
+            existingBranch.addCustomerTransaction(customerName,initialTransaction);
+            return true;
+        }
+        return false;
+    }
+
+    public boolean listCustomer(String branchName, boolean printTransaction){
+        Branch existingBranch = findBranch(branchName);
+        if(existingBranch != null && printTransaction){
+            System.out.println("Customers for " + branchName);
+            for(int i=0; i<existingBranch.getCustomers().size(); i++){
+                System.out.println("Customer " + existingBranch.getCustomers().get(i).getName());
+                System.out.println("transactions ");
+                for(int j=0; j<existingBranch.getCustomers().get(i).getTransaction().size(); j++){
+                    System.out.println("[" + (j+1) + "]  Amount " +existingBranch.getCustomers().get(i).getTransaction().get(j));
+                }
+            }
+            return true;
+        }else if(existingBranch != null){
+            System.out.println("Customer details for branch " + existingBranch.getName());
+            for(int i=0; i<existingBranch.getCustomers().size(); i++) {
+                System.out.println("Customer: " + existingBranch.getCustomers().get(i).getName() + "[" + (i+1) + "]");
+            }
+            return true;
+        }
+        return false;
+    }
+
+
+}
diff --git a/Java/Banking/src/com/company/Branch.java b/Java/Banking/src/com/company/Branch.java
new file mode 100644
index 00000000..d7813d2d
--- /dev/null
+++ b/Java/Banking/src/com/company/Branch.java
@@ -0,0 +1,53 @@
+package com.company;
+
+import java.util.ArrayList;
+
+public class Branch {
+    private String name;
+    private ArrayList<Customer> customers;
+
+    public Branch(String name){
+        this.name = name;
+        this.customers = new ArrayList<Customer>();
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public ArrayList<Customer> getCustomers() {
+        return customers;
+    }
+
+    public boolean newCustomer(String name, double initialTransaction){
+        if(findCustomer(name) != null){
+            System.out.println("Customer name already exists");
+            return  false;
+        }else{
+            Customer addNewCustomer = new Customer(name,initialTransaction);
+            customers.add(addNewCustomer);
+            return true;
+        }
+
+    }
+
+    public boolean addCustomerTransaction(String name, double transaction){
+        Customer existingCustomer = findCustomer(name);
+        if(existingCustomer!= null){
+            existingCustomer.addTransaction(transaction);
+            return true;
+        }else{
+            return false;
+        }
+    }
+
+    public Customer findCustomer(String name){
+        int i=0;
+        for(i=0; i<this.customers.size();i++){
+            if(this.customers.get(i).getName().equals(name)){
+                return this.customers.get(i);
+            }
+        }
+        return null;
+    }
+}
diff --git a/Java/Banking/src/com/company/Customer.java b/Java/Banking/src/com/company/Customer.java
new file mode 100644
index 00000000..81686fb1
--- /dev/null
+++ b/Java/Banking/src/com/company/Customer.java
@@ -0,0 +1,26 @@
+package com.company;
+
+import java.util.ArrayList;
+
+public class Customer {
+    private String name;
+    private ArrayList<Double> transaction;
+
+    public Customer(String name, double initialTransaction){
+        this.name = name;
+        transaction = new ArrayList<Double>();
+        this.addTransaction(initialTransaction);
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public ArrayList<Double> getTransaction() {
+        return transaction;
+    }
+
+    public void addTransaction(double transaction){
+        this.transaction.add(transaction);
+    }
+}
diff --git a/Java/Banking/src/com/company/Main.java b/Java/Banking/src/com/company/Main.java
new file mode 100644
index 00000000..7d421a2c
--- /dev/null
+++ b/Java/Banking/src/com/company/Main.java
@@ -0,0 +1,93 @@
+/*
+Program to create banking system.
+Program to have bank acccount for customers that displays customer name and transactions in respective branch
+Add the branch name, bank, and customer details using arraylist.
+ */
+
+package com.company;
+
+import java.util.Scanner;
+
+public class Main {
+
+    private static Scanner sc = new Scanner(System.in);
+    private static Bank bank = new Bank("Axis bank");
+
+    public static void main(String[] args) {
+	// write your code here
+        boolean quit = false;
+        int ch;
+        printActions();
+        while(!quit){
+
+            System.out.println("enter your choice");
+            ch = sc.nextInt();
+            switch(ch){
+                case 1:
+                    addBranch();
+                    break;
+                case 2:
+                    addCustomer();
+                    break;
+                case 3:
+                    addCustomerTransaction();
+                    break;
+                case 4:
+                    printCustomer();
+                    break;
+                case 5:
+                    printActions();
+                    break;
+                case 6:
+                    quit = true;
+                    break;
+            }
+        }
+    }
+
+    private static void printActions(){
+        System.out.println(
+                "1. add branch \n" +
+                        "2. add customer \n" +
+                        "3. add customer transaction \n" +
+                        "4. print customer list \n" +
+                        "5. quit" );
+
+    }
+
+    private static void addBranch(){
+        String name;
+        System.out.println("enter branch name");
+        name = sc.next();
+        bank.addBranch(name);
+    }
+    private static void addCustomer(){
+        System.out.println("enter customer name");
+        String customerName = sc.next();
+        System.out.println("enter branch name");
+        String branchName = sc.next();
+        System.out.println("enter initial transaction");
+        double transaction = sc.nextDouble();
+        bank.addCustomer(customerName, branchName, transaction);
+
+    }
+
+    private static void addCustomerTransaction(){
+        System.out.println("enter customer name");
+        String customerName = sc.next();
+        System.out.println("enter branch name");
+        String branchName = sc.next();
+        System.out.println("enter transaction");
+        double transaction = sc.nextDouble();
+        bank.addCustomerTransaction(customerName, branchName, transaction);
+
+    }
+
+    private static void printCustomer(){
+        System.out.println("enter branch name");
+        String branchName = sc.next();
+        System.out.println("do you want to print transaction");
+        boolean print = sc.nextBoolean();
+        bank.listCustomer(branchName, print);
+    }
+}
diff --git a/Java/Boolean Number.java b/Java/Boolean Number.java
new file mode 100644
index 00000000..ccb442b7
--- /dev/null
+++ b/Java/Boolean Number.java	
@@ -0,0 +1,17 @@
+package test_project;
+
+public class Testproject {
+
+	public static void main(String[] args) {
+		// TODO Auto-generated method stub
+      boolean  a = true; 
+      boolean b = false;
+    	
+    	System.out.println(a||b);  
+    
+    
+    
+		 }
+	}
+
+
diff --git a/Java/GCD.java b/Java/GCD.java
new file mode 100644
index 00000000..48ffebf7
--- /dev/null
+++ b/Java/GCD.java
@@ -0,0 +1,29 @@
+/*
+ *The program calculates GCD of two numbers 
+ *also known as HCF of two numbers
+ *for example 25,45
+ *have a GCD of 5
+ */
+
+
+package kshitizjava;
+import java.util.*;
+public class GCD {
+
+	public static void main(String[] args) {
+		Scanner in=new Scanner(System.in);
+		int a,b,i,p,gcd=0;
+		System.out.println("enter two numbers");
+		a=in.nextInt();
+		b=in.nextInt();
+		p=a*b;
+		for(i=1;i<p;i++)
+		{
+			if(a%i==0 && b%i==0)
+				gcd=i;
+		}
+		System.out.println("The GCD Is "+gcd);
+
+	}
+
+}
diff --git a/Java/LeftRotateArray.java b/Java/LeftRotateArray.java
new file mode 100644
index 00000000..76dee3ba
--- /dev/null
+++ b/Java/LeftRotateArray.java
@@ -0,0 +1,21 @@
+import java.util.*;
+
+class LeftRotate {
+	public static void main (String[] args) {
+		Scanner sc=new Scanner(System.in);
+		int a[]={7,8,9,1,2,3};//can be replaced by the arry as input
+		int n=sc.nextInt();//Number of left rotations
+		reverse(a,0,n-1);
+		reverse(a,n,a.length-1);
+		reverse(a,0,a.length-1);
+        //Printing the updated array
+		for(int i=0;i<a.length;i++)
+		System.out.print(a[i]+" ");
+	}
+	static void reverse(int a[],int l,int r){
+	    while(l<r){
+	        int t=a[l];a[l]=a[r];a[r]=t;
+	        l++;r--;
+	    }
+	}
+}
\ No newline at end of file
diff --git a/Java/Niven.java b/Java/Niven.java
new file mode 100644
index 00000000..deb89aac
--- /dev/null
+++ b/Java/Niven.java
@@ -0,0 +1,34 @@
+/*The program below checks if a number is Niven or not
+  A number is said to be Niven if it is divisible by the
+  sum of it's digits
+  Example: 126
+  sum of its digits=1+2+6 = 9 
+  and 126 is divisble by 9
+  hence its Niven
+ */
+
+
+package kshitizjava;
+import java.util.*;
+public class Niven {
+
+	public static void main(String[] args) {
+		Scanner in=new Scanner(System.in);
+		int num,sum=0,d,p;
+		System.out.println("Enter A Number");
+		num=in.nextInt();
+		p=num;
+		while(p!=0)
+		{
+			d=p%10;
+			sum+=d;
+			p/=10;
+		}
+		if(num%sum==0)
+			System.out.println("Its Niven Number");
+		else
+			System.out.println("Its Not Niven Number");
+
+	}
+
+}
diff --git a/Java/Pattern/Pascal's Triangle.java b/Java/Pattern/Pascal's Triangle.java
new file mode 100644
index 00000000..b9d01f4e
--- /dev/null
+++ b/Java/Pattern/Pascal's Triangle.java	
@@ -0,0 +1,39 @@
+/*Example
+n = 5
+            1
+          1     1
+        1    2    1
+      1    3   3     1
+   1    4     6    4    1
+1   5   10     10    5    1 
+*/
+public class PascalTriangle {
+    static int factorial(int n) {// Function to calculate factorial of n
+        int f;
+
+        for (f = 1; n > 1; n--) {
+            f *= n;
+        }
+        return f;
+    }
+
+    static int ncr(int n, int r) {// Calculating nCr
+        return factorial(n) / (factorial(n - r) * factorial(r));
+    }
+
+    public static void main(String args[]) {
+        System.out.println();
+        int n, i, j;
+        n = 5;
+
+        for (i = 0; i <= n; i++) {
+            for (j = 0; j <= n - i; j++) {
+                System.out.print(" ");
+            }
+            for (j = 0; j <= i; j++) {
+                System.out.print(" " + ncr(i, j));
+            }
+            System.out.println();
+        }
+    }
+}
\ No newline at end of file
diff --git a/Java/Pattern/README.md b/Java/Pattern/README.md
new file mode 100644
index 00000000..954616fb
--- /dev/null
+++ b/Java/Pattern/README.md
@@ -0,0 +1,21 @@
+## 🧐 What are Pattern Programs?
+
+Pattern programs are nothing just patterns which consists of numbers, alphabets, symbols which are printed in a particular form. The solutions to these kind of programs are listed out using conditional loops.
+
+## 📕 Why to study Pattern Programs?
+
+* Pattern programs best means to study the working of looping structures in general purpose programming languages.
+
+* It helps beginners to visualise how every iteration in a loop works.
+
+* Also popularly asked in campus placements & job interviews.
+
+## Links to find Java Pattern Programs 
+
+* [Star Pattern](https://www.javainterviewpoint.com/star-pattern-programs-in-java/)
+
+* [Number Pattern](https://www.javainterviewpoint.com/number-pattern-programs-in-java/)
+
+* [Alphabet Pattern](https://www.javainterviewpoint.com/alphabet-pattern-program/)
+
+* [Video](https://www.youtube.com/watch?v=lsOOs5J8ycw)
diff --git a/Java/Pattern/pattern.java b/Java/Pattern/pattern.java
new file mode 100644
index 00000000..1e1034fc
--- /dev/null
+++ b/Java/Pattern/pattern.java
@@ -0,0 +1,29 @@
+// mirror image number pattern, example n=4
+//    1
+//   12
+//  123
+// 1234
+import java.util.Scanner;
+public class pattern {
+
+
+	public static void main(String[] args) {
+		
+		//read input from Scanner()//
+		Scanner s=new Scanner(System.in);
+        int n=s.nextInt();
+        //print pattern//
+        for(int i=0;i<n;i++){
+            for(int j=n-i-1;j>0;j--){
+                System.out.print(' ');
+            }
+            for (int k=1;k<i+2;k++){
+                System.out.print(k);
+            }
+            System.out.println();
+        }
+		
+	}
+
+}
+
diff --git a/Java/Phone-contacts-project/.idea/.gitignore b/Java/Phone-contacts-project/.idea/.gitignore
new file mode 100644
index 00000000..26d33521
--- /dev/null
+++ b/Java/Phone-contacts-project/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/Java/Phone-contacts-project/.idea/description.html b/Java/Phone-contacts-project/.idea/description.html
new file mode 100644
index 00000000..db5f1295
--- /dev/null
+++ b/Java/Phone-contacts-project/.idea/description.html
@@ -0,0 +1 @@
+<html>Simple <b>Java</b> application that includes a class with <code>main()</code> method</html>
\ No newline at end of file
diff --git a/Java/Phone-contacts-project/.idea/encodings.xml b/Java/Phone-contacts-project/.idea/encodings.xml
new file mode 100644
index 00000000..97626ba4
--- /dev/null
+++ b/Java/Phone-contacts-project/.idea/encodings.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding">
+    <file url="PROJECT" charset="UTF-8" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/Java/Phone-contacts-project/.idea/misc.xml b/Java/Phone-contacts-project/.idea/misc.xml
new file mode 100644
index 00000000..3afb4eec
--- /dev/null
+++ b/Java/Phone-contacts-project/.idea/misc.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="EntryPointsManager">
+    <entry_points version="2.0" />
+  </component>
+  <component name="ProjectKey">
+    <option name="state" value="project://e2804f05-5315-4fc6-a121-c522a6c26470" />
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/Java/Phone-contacts-project/.idea/modules.xml b/Java/Phone-contacts-project/.idea/modules.xml
new file mode 100644
index 00000000..61e91e57
--- /dev/null
+++ b/Java/Phone-contacts-project/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/Mobile_phone_arrayList.iml" filepath="$PROJECT_DIR$/Mobile_phone_arrayList.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/Java/Phone-contacts-project/.idea/project-template.xml b/Java/Phone-contacts-project/.idea/project-template.xml
new file mode 100644
index 00000000..1f08b887
--- /dev/null
+++ b/Java/Phone-contacts-project/.idea/project-template.xml
@@ -0,0 +1,3 @@
+<template>
+  <input-field default="com.company">IJ_BASE_PACKAGE</input-field>
+</template>
\ No newline at end of file
diff --git a/Java/Phone-contacts-project/Mobile_phone_arrayList.iml b/Java/Phone-contacts-project/Mobile_phone_arrayList.iml
new file mode 100644
index 00000000..d5c07432
--- /dev/null
+++ b/Java/Phone-contacts-project/Mobile_phone_arrayList.iml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
+
diff --git a/Java/Phone-contacts-project/out/production/Mobile_phone_arrayList/com/company/Contact.class b/Java/Phone-contacts-project/out/production/Mobile_phone_arrayList/com/company/Contact.class
new file mode 100644
index 00000000..1588acd0
Binary files /dev/null and b/Java/Phone-contacts-project/out/production/Mobile_phone_arrayList/com/company/Contact.class differ
diff --git a/Java/Phone-contacts-project/out/production/Mobile_phone_arrayList/com/company/Main.class b/Java/Phone-contacts-project/out/production/Mobile_phone_arrayList/com/company/Main.class
new file mode 100644
index 00000000..8c46aceb
Binary files /dev/null and b/Java/Phone-contacts-project/out/production/Mobile_phone_arrayList/com/company/Main.class differ
diff --git a/Java/Phone-contacts-project/out/production/Mobile_phone_arrayList/com/company/MobilePhone.class b/Java/Phone-contacts-project/out/production/Mobile_phone_arrayList/com/company/MobilePhone.class
new file mode 100644
index 00000000..4dae6921
Binary files /dev/null and b/Java/Phone-contacts-project/out/production/Mobile_phone_arrayList/com/company/MobilePhone.class differ
diff --git a/Java/Phone-contacts-project/src/com/company/Contact.java b/Java/Phone-contacts-project/src/com/company/Contact.java
new file mode 100644
index 00000000..f08c7106
--- /dev/null
+++ b/Java/Phone-contacts-project/src/com/company/Contact.java
@@ -0,0 +1,23 @@
+package com.company;
+import java.util.*;
+public class Contact {
+    private String name;
+    private String phoneNumber;
+
+    public Contact(String name, String phoneNumber){
+        this.name = name;
+        this.phoneNumber = phoneNumber;
+    }
+
+    public  java.lang.String getName(){
+        return this.name;
+    }
+
+    public String getPhoneNumber(){
+        return this.phoneNumber;
+    }
+
+    public static Contact createContact(String name, String phoneNumber){
+        return new Contact(name, phoneNumber);
+    }
+}
diff --git a/Java/Phone-contacts-project/src/com/company/Main.java b/Java/Phone-contacts-project/src/com/company/Main.java
new file mode 100644
index 00000000..59b65889
--- /dev/null
+++ b/Java/Phone-contacts-project/src/com/company/Main.java
@@ -0,0 +1,133 @@
+/*
+    Program to create phone contacts using arraylist, the program should do following operations
+    -> Add new contact
+    -> Update the existing contact
+    -> Remove the contact
+    -> print the contact list
+    -> query the contact
+
+ */
+
+
+
+package com.company;
+
+import java.util.Scanner;
+
+public class Main {
+    private static Scanner sc = new Scanner(System.in);
+    private static MobilePhone mobilePhone = new MobilePhone("0039 330 4404");
+
+    public static void main(String[] args) {
+        // write your code here
+            boolean quit = false;
+            int choice;
+            System.out.println("Phone is turned on");
+            printActions();
+            while (!quit) {
+                System.out.println("select option");
+                choice = sc.nextInt();
+                sc.nextLine();
+                switch (choice) {
+                    case 1:
+                        addContact();
+                        break;
+                    case 2:
+                        setContact();
+                        break;
+                    case 3:
+                        removeContact();
+                        break;
+                    case 4:
+                        queryContact();
+                        break;
+                    case 5:
+                        mobilePhone.printContact();
+                        break;
+                    case 6:
+                        printActions();
+                        break;
+                    case 7:
+                        quit = true;
+                        break;
+            }
+
+
+
+
+        }
+
+}
+
+
+    // add new contact
+    private static void addContact () {
+        String name, number;
+        System.out.println("enter name");
+        name = sc.nextLine();
+        System.out.println("enter number");
+        number = sc.nextLine();
+        Contact contact = Contact.createContact(name, number);
+        mobilePhone.addNewContact(contact);
+
+    }
+
+    // update contact
+    private static void setContact(){
+        System.out.println("Enter existing contact name: ");
+        String name = sc.nextLine();
+        Contact existingContactRecord = mobilePhone.queryContact(name);
+        if(existingContactRecord == null) {
+            System.out.println("Contact not found.");
+            return;
+        }
+
+        System.out.println("enter new contact name");
+        String newName = sc.nextLine();
+        System.out.print("Enter new contact phone number: ");
+        String newNumber = sc.nextLine();
+        Contact newContact = Contact.createContact(newName, newNumber);
+        mobilePhone.updateContact(existingContactRecord, newContact);
+
+    }
+
+    // remove contact
+    private static void removeContact(){
+        System.out.println("enter existing contact name");
+        String name = sc.nextLine();
+        Contact existingContactRecord = mobilePhone.queryContact(name);
+        if(existingContactRecord != null){
+            mobilePhone.removeContact(existingContactRecord);
+            System.out.println("contact removed");
+        }else{
+            System.out.println("contact not found");
+        }
+    }
+
+    // query contact
+    private static void queryContact(){
+        System.out.println("Enter existing contact name: ");
+        String name = sc.nextLine();
+        Contact existingContactRecord = mobilePhone.queryContact(name);
+        if(existingContactRecord == null){
+            System.out.println("contact not found");
+        }else{
+            System.out.println("contact name = " + existingContactRecord.getName() + " number = " + existingContactRecord.getPhoneNumber());
+        }
+    }
+    // print actions
+    private static void printActions(){
+        System.out.println("\nAvailable actions:\npress");
+        System.out.println(
+                "1  - to add a new contact \n" +
+                "2  - to update an existing contact\n" +
+                "3  - to remove an existing contact\n" +
+                "4  - query if an existing contact exists\n" +
+                "5  - to print a list of contacts.\n" +
+                "6  - to print actions\n" +
+                "7  - to quit");
+
+        System.out.println("Choose your action: ");
+    }
+}
+
diff --git a/Java/Phone-contacts-project/src/com/company/MobilePhone.java b/Java/Phone-contacts-project/src/com/company/MobilePhone.java
new file mode 100644
index 00000000..831c02a7
--- /dev/null
+++ b/Java/Phone-contacts-project/src/com/company/MobilePhone.java
@@ -0,0 +1,103 @@
+package com.company;
+
+import java.util.ArrayList;
+
+public class MobilePhone {
+    private String myNumber;
+    ArrayList<Contact> myContacts;
+
+    public MobilePhone(String myNumber){
+        this.myNumber = myNumber;
+        this.myContacts =  new ArrayList<Contact>();
+    }
+
+
+    // add new contact to contacts arraylist
+    public boolean addNewContact(Contact contact){
+            if(findContact(contact) < 0){
+                myContacts.add(contact);
+                System.out.println(contact.getName() + " has been added");
+                return true;
+            }else{
+                System.out.println("contact with " + contact.getName() + " already exists");
+                return false;
+            }
+    }
+
+    // update contact
+    public boolean updateContact(Contact oldContact, Contact newContact){
+        int position = findContact(oldContact);
+        if(position >= 0){
+                myContacts.set(position,newContact);
+                System.out.println("new contact successfully updated");
+                return true;
+        }
+        System.out.println(oldContact.getName() + " contact doesn't exist");
+        return  false;
+    }
+
+    // remove contact
+    public boolean removeContact(Contact contact){
+        int position = findContact(contact);
+        if(position >= 0){
+            myContacts.remove(contact);
+            System.out.println(contact.getName() + " contact is removed");
+            return true;
+        }else{
+            System.out.println(contact.getName() + " contact doesn't exist");
+            return false;
+        }
+    }
+
+
+    // find contact returns the contact
+    private int findContact(Contact contact){
+        return findContact(contact.getName());
+    }
+
+    // find contact with contact name
+    private int findContact(String contactName){
+        for(int i=0; i< myContacts.size(); i++){
+            if(myContacts.get(i).getName().equals(contactName)){
+                return i;
+            }
+        }
+        return -1;
+    }
+
+
+    // query contact returns contact
+    public String queryContact(Contact contact) {
+        if(findContact(contact) >=0) {
+            return contact.getName();
+        }
+        return null;
+    }
+
+    // query contact with contact name
+    public Contact queryContact(String name) {
+        int position = findContact(name);
+        if(position >=0) {
+            return this.myContacts.get(position);
+        }
+
+        return null;
+    }
+
+    // print contact list
+    public void printContact(){
+        System.out.println("Contact List: ");
+
+        for(int i = 0; i  < this.myContacts.size();i++){
+            if(this.myContacts.get(i) != null){
+
+                System.out.println((i+1)+". "+ this.myContacts.get(i).getName() + " -> "+ this.myContacts.get(i).getPhoneNumber());
+            }else{
+                System.out.println("Contact List is empty");
+
+            }
+        }
+
+    }
+
+}
diff --git a/Java/PigLatin.java b/Java/PigLatin.java
new file mode 100644
index 00000000..4ff63650
--- /dev/null
+++ b/Java/PigLatin.java
@@ -0,0 +1,24 @@
+import java.util.*;
+public class PigLatin
+{
+    public static void main(String args[])
+    {
+        Scanner sc=new Scanner(System.in);
+        System.out.println("Enter the word");
+        String s=sc.nextLine();
+        String str=s.toUpperCase();
+        int x=str.length();
+        int y;
+        char b=0;
+        System.out.println("The Pig latin of the given word is ");
+        for(y=0;y<x;y++)
+        {
+            b=(str.charAt(y));
+            if((b=='A')||(b=='E')||(b=='I')||(b=='O')||(b=='U'))
+            break;
+        }
+        String str1=str.substring(y,x);
+        String str2=str.substring(0,y);
+        System.out.println(str1+str2+"AY");
+    }
+}
\ No newline at end of file
diff --git a/Java/Projects/Calculator GUI in Java/18103076.jar b/Java/Projects/Calculator GUI in Java/18103076.jar
new file mode 100644
index 00000000..34d5995e
Binary files /dev/null and b/Java/Projects/Calculator GUI in Java/18103076.jar differ
diff --git a/Java/Projects/Calculator GUI in Java/Calculator.class b/Java/Projects/Calculator GUI in Java/Calculator.class
new file mode 100644
index 00000000..8a7cc50e
Binary files /dev/null and b/Java/Projects/Calculator GUI in Java/Calculator.class differ
diff --git a/Java/Projects/Calculator GUI in Java/Calculator.java b/Java/Projects/Calculator GUI in Java/Calculator.java
new file mode 100644
index 00000000..ef378954
--- /dev/null
+++ b/Java/Projects/Calculator GUI in Java/Calculator.java	
@@ -0,0 +1,371 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+//package Calculator;
+import java.awt.*;
+import java.awt.event.*;
+ 
+class Calculator extends WindowAdapter implements ActionListener
+{
+	//Declaring Objects
+	Frame f=new Frame();
+	Label l1=new Label("First Number, x");
+	Label l2=new Label("Second Number, y");
+	Label l3=new Label("Result");
+	Label credit=new Label();
+	
+	TextField t1=new TextField("0");
+	TextField t2=new TextField("0");
+	TextField t3=new TextField();
+	
+	Button b1=new Button("+");
+	Button b2=new Button("-");
+	Button b3=new Button("*");
+	Button b4=new Button("/");
+	Button b5=new Button("sin x");
+    Button b6=new Button("cos x");
+    Button b7=new Button("tan x");
+    Button b8=new Button("Sqrt");
+    Button b9=new Button("sinh x");
+    Button b10=new Button("cosh");
+    Button b11=new Button("tanh x");
+    Button b12=new Button("x^y");
+	Button b13=new Button("x^2");
+    Button b14=new Button("x^3");
+    Button b15=new Button("1/x");
+    Button b16=new Button("log10(x)");
+    Button b17=new Button("ln(x)");
+    Button b18=new Button("x!");
+    Button b19=new Button("%");
+    Button b20=new Button("AC");
+	
+	public void windowClosing(WindowEvent e) 
+	{  
+		f.dispose();  
+	}  
+	
+	Calculator()
+	{
+		//Giving Coordinates
+        f.addWindowListener(this);
+            
+        credit.setBounds(150,50,300,40);
+		//cred.set;
+        credit.setText("Developed by - 18103076 | Rajan Kataria");
+        f.add(credit);
+		
+		l1.setBounds(100,100,100,25);
+		l2.setBounds(100,140,100,25);
+		l3.setBounds(100,180,100,25);
+		
+		t1.setBounds(250,100,150,30);
+		t2.setBounds(250,140,150,30);
+		t3.setBounds(250,180,150,30);
+		t3.setEditable(false);
+		
+		b1.setBounds(100,280,50,20);
+		b2.setBounds(170,280,50,20);
+		b3.setBounds(240,280,50,20);
+		b4.setBounds(310,280,50,20);
+        b5.setBounds(100,310,50,20);
+		b6.setBounds(170,310,50,20);
+        b7.setBounds(240,310,50,20);
+        b8.setBounds(310,310,50,20);
+        b9.setBounds(100,340,50,20);
+		b10.setBounds(170,340,50,20);
+        b11.setBounds(240,340,50,20);
+        b12.setBounds(310,340,50,20);
+        b13.setBounds(100,370,50,20);
+		b14.setBounds(170,370,50,20);
+        b15.setBounds(240,370,50,20);
+        b16.setBounds(310,370,50,20);
+		b17.setBounds(100,400,50,20);
+		b18.setBounds(170,400,50,20);
+		b19.setBounds(240,400,50,20);
+		b20.setBounds(310,400,50,20);
+		
+		//Adding components to the frame
+                
+		f.add(l1);
+		f.add(l2);
+		f.add(l3);
+		
+		f.add(t1);
+		f.add(t2);
+		f.add(t3);
+		
+		f.add(b1);
+		f.add(b2);
+		f.add(b3);
+		f.add(b4);
+		f.add(b5);
+		f.add(b6);
+		f.add(b7);
+        f.add(b8);
+		f.add(b9);
+        f.add(b10);
+        f.add(b11);
+        f.add(b12);
+        f.add(b13);
+        f.add(b14);
+        f.add(b15);
+        f.add(b16);
+		f.add(b17);
+		f.add(b18);
+		f.add(b19);
+		f.add(b20);
+                
+		b1.addActionListener(this);
+		b2.addActionListener(this);
+		b3.addActionListener(this);
+		b4.addActionListener(this);
+		b5.addActionListener(this);
+		b6.addActionListener(this);
+		b7.addActionListener(this);
+        b8.addActionListener(this);
+        b9.addActionListener(this);
+		b10.addActionListener(this);
+		b11.addActionListener(this);
+		b12.addActionListener(this);
+		b13.addActionListener(this);
+		b14.addActionListener(this);
+		b15.addActionListener(this);
+        b16.addActionListener(this);
+		b17.addActionListener(this);
+		b18.addActionListener(this);
+		b19.addActionListener(this);
+		b20.addActionListener(this);
+		
+		f.setLayout(null);
+		f.setVisible(true);
+		f.setSize(500,500);
+		f.setTitle("Scientific Calculator");
+	}
+	
+	public void actionPerformed(ActionEvent e)
+	{
+		double n1=Double.parseDouble(t1.getText());
+        double n2=0;
+        if(!t2.getText().equals(""))
+            n2=Double.parseDouble(t2.getText());
+		
+		if(e.getSource()==b1)
+		{
+			t3.setText(String.valueOf(n1+n2));
+		}
+			
+		if(e.getSource()==b2)
+		{
+			t3.setText(String.valueOf(n1-n2));
+		}
+		
+		if(e.getSource()==b3)
+		{
+			t3.setText(String.valueOf(n1*n2));
+		}
+		
+		if(e.getSource()==b4)
+		{
+			t3.setText(String.valueOf((double)n1/(double)n2));
+		}
+		
+		if(e.getSource()==b5)
+		{
+			t3.setText(String.valueOf(Math.sin(Math.toRadians(n1))));
+		}
+        
+		if(e.getSource()==b6)
+		{
+			t3.setText(String.valueOf(Math.cos(Math.toRadians(n1))));
+		}
+                
+        if(e.getSource()==b7)
+		{
+			t3.setText(String.valueOf(Math.tan(Math.toRadians(n1))));
+		}
+                
+        if(e.getSource()==b8)
+		{
+			t3.setText(String.valueOf(Math.sqrt(n1)));
+		}
+		
+		if(e.getSource()==b9)
+		{
+			t3.setText(String.valueOf(Math.sinh(Math.toRadians(n1))));
+		}
+		
+		if(e.getSource()==b10)
+		{
+			t3.setText(String.valueOf(Math.cosh(Math.toRadians(n1))));
+		}
+		
+		if(e.getSource()==b11)
+		{
+			t3.setText(String.valueOf(Math.tanh(Math.toRadians(n1))));
+		}
+                
+        if(e.getSource()==b12)
+		{
+			t3.setText(String.valueOf(Math.pow(n1,n2)));
+		}
+                
+        if(e.getSource()==b13)
+		{
+			t3.setText(String.valueOf(Math.pow(n1,2)));
+		}
+                
+		if(e.getSource()==b14)
+		{
+			t3.setText(String.valueOf(Math.pow(n1,3)));
+		}
+                
+        if(e.getSource()==b15)
+		{
+			t3.setText(String.valueOf(Math.pow(n1,-1)));
+        }
+        
+        if(e.getSource()==b16)
+		{
+			t3.setText(String.valueOf(Math.log10(n1)));
+		}
+                
+        if(e.getSource()==b17)
+		{
+			t3.setText(String.valueOf(Math.log(n1)));
+		}
+                
+		if(e.getSource()==b18)
+		{
+			t3.setText(String.valueOf(getfact(n1)));
+		}
+                
+        if(e.getSource()==b19)
+		{
+			t3.setText(String.valueOf(n1%n2));
+		}
+		
+		if(e.getSource()==b20)
+		{
+			t1.setText("0");
+			t2.setText("0");
+			t3.setText("");
+		}
+                
+	}
+	
+	public static double getfact(double b)
+    {
+         if(b==0||b==1)
+             return b;
+         return b*getfact(b-1);
+    }
+	
+	public static void main(String[] args)
+	{
+		new Calculator();
+	}
+}
+
+/*import java.awt.*;
+import java.awt.event.*;
+ 
+class Calculator implements ActionListener
+{
+	//Declaring Objects
+	Frame f=new Frame();
+	Label l1=new Label("First Number");
+	Label l2=new Label("Second Number");
+	Label l3=new Label("Result");
+	
+	TextField t1=new TextField();
+	TextField t2=new TextField();
+	TextField t3=new TextField();
+	
+	Button b1=new Button("Add");
+	Button b2=new Button("Sub");
+	Button b3=new Button("Mul");
+	Button b4=new Button("Div");
+	Button b5=new Button("Cancel");
+	
+	Calculator()
+	{
+		//Giving Coordinates
+		l1.setBounds(50,100,100,20);
+		l2.setBounds(50,140,100,20);
+		l3.setBounds(50,180,100,20);
+		
+		t1.setBounds(200,100,100,20);
+		t2.setBounds(200,140,100,20);
+		t3.setBounds(200,180,100,20);
+		
+		b1.setBounds(50,250,50,20);
+		b2.setBounds(110,250,50,20);
+		b3.setBounds(170,250,50,20);
+		b4.setBounds(230,250,50,20);
+		b5.setBounds(290,250,50,20);
+		
+		//Adding components to the frame
+		f.add(l1);
+		f.add(l2);
+		f.add(l3);
+		
+		f.add(t1);
+		f.add(t2);
+		f.add(t3);
+		
+		f.add(b1);
+		f.add(b2);
+		f.add(b3);
+		f.add(b4);
+		f.add(b5);
+		
+		b1.addActionListener(this);
+		b2.addActionListener(this);
+		b3.addActionListener(this);
+		b4.addActionListener(this);
+		b5.addActionListener(this);
+		
+		f.setLayout(null);
+		f.setVisible(true);
+		f.setSize(400,350);
+	}
+	
+	public void actionPerformed(ActionEvent e)
+	{
+		int n1=Integer.parseInt(t1.getText());
+		int n2=Integer.parseInt(t2.getText());
+		
+		if(e.getSource()==b1)
+		{
+			t3.setText(String.valueOf(n1+n2));
+		}
+			
+		if(e.getSource()==b2)
+		{
+			t3.setText(String.valueOf(n1-n2));
+		}
+		
+		if(e.getSource()==b3)
+		{
+			t3.setText(String.valueOf(n1*n2));
+		}
+		
+		if(e.getSource()==b4)
+		{
+			t3.setText(String.valueOf(n1/n2));
+		}
+		
+		if(e.getSource()==b5)
+		{
+			System.exit(0);
+		}
+	}
+	
+	public static void main(String...s)
+	{
+		new Calculator();
+	}
+}*/
\ No newline at end of file
diff --git a/Java/Projects/Calculator GUI in Java/calculator.png b/Java/Projects/Calculator GUI in Java/calculator.png
new file mode 100644
index 00000000..53188cbc
Binary files /dev/null and b/Java/Projects/Calculator GUI in Java/calculator.png differ
diff --git a/Java/Projects/Calculator GUI in Java/readme.md b/Java/Projects/Calculator GUI in Java/readme.md
new file mode 100644
index 00000000..cc5c4e8a
--- /dev/null
+++ b/Java/Projects/Calculator GUI in Java/readme.md	
@@ -0,0 +1,2 @@
+It is a calculator GUI made in Java.
+To run double click on 18103076.jar
diff --git a/Java/README.md b/Java/README.md
new file mode 100644
index 00000000..53b00585
--- /dev/null
+++ b/Java/README.md
@@ -0,0 +1,2 @@
+## Put Simple Java Questions along with Code in this folder
+### Don't put DSA codes here
diff --git a/Java/Simple Games/Color Game/.idea/.gitignore b/Java/Simple Games/Color Game/.idea/.gitignore
new file mode 100644
index 00000000..26d33521
--- /dev/null
+++ b/Java/Simple Games/Color Game/.idea/.gitignore	
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/Java/Simple Games/Color Game/.idea/ant.xml b/Java/Simple Games/Color Game/.idea/ant.xml
new file mode 100644
index 00000000..a2a47698
--- /dev/null
+++ b/Java/Simple Games/Color Game/.idea/ant.xml	
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="AntConfiguration">
+    <buildFile url="file://$PROJECT_DIR$/build.xml" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/Java/Simple Games/Color Game/.idea/libraries/lib.xml b/Java/Simple Games/Color Game/.idea/libraries/lib.xml
new file mode 100644
index 00000000..15482f41
--- /dev/null
+++ b/Java/Simple Games/Color Game/.idea/libraries/lib.xml	
@@ -0,0 +1,10 @@
+<component name="libraryTable">
+  <library name="lib">
+    <CLASSES>
+      <root url="file://$PROJECT_DIR$/../../openjfx-17.0.0.1_windows-x86_bin-sdk/javafx-sdk-17.0.0.1/lib" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+    <jarDirectory url="file://$PROJECT_DIR$/../../openjfx-17.0.0.1_windows-x86_bin-sdk/javafx-sdk-17.0.0.1/lib" recursive="false" />
+  </library>
+</component>
\ No newline at end of file
diff --git a/Java/Simple Games/Color Game/.idea/misc.xml b/Java/Simple Games/Color Game/.idea/misc.xml
new file mode 100644
index 00000000..e208459b
--- /dev/null
+++ b/Java/Simple Games/Color Game/.idea/misc.xml	
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/Java/Simple Games/Color Game/.idea/modules.xml b/Java/Simple Games/Color Game/.idea/modules.xml
new file mode 100644
index 00000000..780be430
--- /dev/null
+++ b/Java/Simple Games/Color Game/.idea/modules.xml	
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/ColorTrapGame-master.iml" filepath="$PROJECT_DIR$/ColorTrapGame-master.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/Java/Simple Games/Color Game/ColorTrapGame-master.iml b/Java/Simple Games/Color Game/ColorTrapGame-master.iml
new file mode 100644
index 00000000..fb8e8667
--- /dev/null
+++ b/Java/Simple Games/Color Game/ColorTrapGame-master.iml	
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="lib" level="project" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/Java/Simple Games/Color Game/adding javafx library.PNG b/Java/Simple Games/Color Game/adding javafx library.PNG
new file mode 100644
index 00000000..9f5de6c0
Binary files /dev/null and b/Java/Simple Games/Color Game/adding javafx library.PNG differ
diff --git a/Java/Simple Games/Color Game/build.xml b/Java/Simple Games/Color Game/build.xml
new file mode 100644
index 00000000..08679cbe
--- /dev/null
+++ b/Java/Simple Games/Color Game/build.xml	
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?><!-- You may freely edit this file. See commented blocks below for --><!-- some examples of how to customize the build. --><!-- (If you delete it and reopen the project it will be recreated.) --><!-- By default, only the Clean and Build commands use this build script. --><project name="WordColorGame" default="default" basedir="." xmlns:fx="javafx:com.sun.javafx.tools.ant">
+    <description>Builds, tests, and runs the project WordColorGame.</description>
+    <import file="nbproject/build-impl.xml"/>
+    <!--
+
+    There exist several targets which are by default empty and which can be 
+    used for execution of your tasks. These targets are usually executed 
+    before and after some main targets. Those of them relevant for JavaFX project are: 
+
+      -pre-init:                 called before initialization of project properties
+      -post-init:                called after initialization of project properties
+      -pre-compile:              called before javac compilation
+      -post-compile:             called after javac compilation
+      -pre-compile-test:         called before javac compilation of JUnit tests
+      -post-compile-test:        called after javac compilation of JUnit tests
+      -pre-jfx-jar:              called before FX SDK specific <fx:jar> task
+      -post-jfx-jar:             called after FX SDK specific <fx:jar> task
+      -pre-jfx-deploy:           called before FX SDK specific <fx:deploy> task
+      -post-jfx-deploy:          called after FX SDK specific <fx:deploy> task
+      -pre-jfx-native:           called just after -pre-jfx-deploy if <fx:deploy> runs in native packaging mode
+      -post-jfx-native:          called just after -post-jfx-deploy if <fx:deploy> runs in native packaging mode
+      -post-clean:               called after cleaning build products
+
+    (Targets beginning with '-' are not intended to be called on their own.)
+
+    Example of inserting a HTML postprocessor after javaFX SDK deployment:
+
+        <target name="-post-jfx-deploy">
+            <basename property="jfx.deployment.base" file="${jfx.deployment.jar}" suffix=".jar"/>
+            <property name="jfx.deployment.html" location="${jfx.deployment.dir}${file.separator}${jfx.deployment.base}.html"/>
+            <custompostprocess>
+                <fileset dir="${jfx.deployment.html}"/>
+            </custompostprocess>
+        </target>
+
+    Example of calling an Ant task from JavaFX SDK. Note that access to JavaFX SDK Ant tasks must be
+    initialized; to ensure this is done add the dependence on -check-jfx-sdk-version target:
+
+        <target name="-post-jfx-jar" depends="-check-jfx-sdk-version">
+            <echo message="Calling jar task from JavaFX SDK"/>
+            <fx:jar ...>
+                ...
+            </fx:jar>
+        </target>
+
+    For more details about JavaFX SDK Ant tasks go to
+    http://docs.oracle.com/javafx/2/deployment/jfxpub-deployment.htm
+
+    For list of available properties check the files
+    nbproject/build-impl.xml and nbproject/jfx-impl.xml.
+
+    -->
+</project>
diff --git a/Java/Simple Games/Color Game/manifest.mf b/Java/Simple Games/Color Game/manifest.mf
new file mode 100644
index 00000000..328e8e5b
--- /dev/null
+++ b/Java/Simple Games/Color Game/manifest.mf	
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+X-COMMENT: Main-Class will be added automatically by build
+
diff --git a/Java/Simple Games/Color Game/nbproject/build-impl.xml b/Java/Simple Games/Color Game/nbproject/build-impl.xml
new file mode 100644
index 00000000..618c1d00
--- /dev/null
+++ b/Java/Simple Games/Color Game/nbproject/build-impl.xml	
@@ -0,0 +1,1421 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+*** GENERATED FROM project.xml - DO NOT EDIT  ***
+***         EDIT ../build.xml INSTEAD         ***
+
+For the purpose of easier reading the script
+is divided into following sections:
+
+  - initialization
+  - compilation
+  - jar
+  - execution
+  - debugging
+  - javadoc
+  - test compilation
+  - test execution
+  - test debugging
+  - applet
+  - cleanup
+
+        -->
+<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="WordColorGame-impl">
+    <import file="jfx-impl.xml"/>
+    <fail message="Please build using Ant 1.8.0 or higher.">
+        <condition>
+            <not>
+                <antversion atleast="1.8.0"/>
+            </not>
+        </condition>
+    </fail>
+    <target depends="test,jar,javadoc" description="Build and test whole project." name="default"/>
+    <!-- 
+                ======================
+                INITIALIZATION SECTION 
+                ======================
+            -->
+    <target name="-pre-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="-pre-init" name="-init-private">
+        <property file="nbproject/private/config.properties"/>
+        <property file="nbproject/private/configs/${config}.properties"/>
+        <property file="nbproject/private/private.properties"/>
+    </target>
+    <target depends="-pre-init,-init-private" name="-init-user">
+        <property file="${user.properties.file}"/>
+        <!-- The two properties below are usually overridden -->
+        <!-- by the active platform. Just a fallback. -->
+        <property name="default.javac.source" value="1.6"/>
+        <property name="default.javac.target" value="1.6"/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user" name="-init-project">
+        <property file="nbproject/configs/${config}.properties"/>
+        <property file="nbproject/project.properties"/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init">
+        <property name="platform.java" value="${java.home}/bin/java"/>
+        <available file="${manifest.file}" property="manifest.available"/>
+        <condition property="splashscreen.available">
+            <and>
+                <not>
+                    <equals arg1="${application.splash}" arg2="" trim="true"/>
+                </not>
+                <available file="${application.splash}"/>
+            </and>
+        </condition>
+        <condition property="main.class.available">
+            <and>
+                <isset property="main.class"/>
+                <not>
+                    <equals arg1="${main.class}" arg2="" trim="true"/>
+                </not>
+            </and>
+        </condition>
+        <condition property="profile.available">
+            <and>
+                <isset property="javac.profile"/>
+                <length length="0" string="${javac.profile}" when="greater"/>
+                <matches pattern="((1\.[89])|9)(\..*)?" string="${javac.source}"/>
+            </and>
+        </condition>
+        <condition property="do.archive">
+            <or>
+                <not>
+                    <istrue value="${jar.archive.disabled}"/>
+                </not>
+                <istrue value="${not.archive.disabled}"/>
+            </or>
+        </condition>
+        <condition property="do.mkdist">
+            <and>
+                <isset property="do.archive"/>
+                <isset property="libs.CopyLibs.classpath"/>
+                <not>
+                    <istrue value="${mkdist.disabled}"/>
+                </not>
+            </and>
+        </condition>
+        <condition property="do.archive+manifest.available">
+            <and>
+                <isset property="manifest.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="do.archive+main.class.available">
+            <and>
+                <isset property="main.class.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="do.archive+splashscreen.available">
+            <and>
+                <isset property="splashscreen.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="do.archive+profile.available">
+            <and>
+                <isset property="profile.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="have.tests">
+            <or>
+                <available file="${test.src.dir}"/>
+            </or>
+        </condition>
+        <condition property="have.sources">
+            <or>
+                <available file="${src.dir}"/>
+            </or>
+        </condition>
+        <condition property="netbeans.home+have.tests">
+            <and>
+                <isset property="netbeans.home"/>
+                <isset property="have.tests"/>
+            </and>
+        </condition>
+        <condition property="no.javadoc.preview">
+            <and>
+                <isset property="javadoc.preview"/>
+                <isfalse value="${javadoc.preview}"/>
+            </and>
+        </condition>
+        <property name="run.jvmargs" value=""/>
+        <property name="run.jvmargs.ide" value=""/>
+        <property name="javac.compilerargs" value=""/>
+        <property name="work.dir" value="${basedir}"/>
+        <condition property="no.deps">
+            <and>
+                <istrue value="${no.dependencies}"/>
+            </and>
+        </condition>
+        <property name="javac.debug" value="true"/>
+        <property name="javadoc.preview" value="true"/>
+        <property name="application.args" value=""/>
+        <property name="source.encoding" value="${file.encoding}"/>
+        <property name="runtime.encoding" value="${source.encoding}"/>
+        <property name="manifest.encoding" value="${source.encoding}"/>
+        <condition property="javadoc.encoding.used" value="${javadoc.encoding}">
+            <and>
+                <isset property="javadoc.encoding"/>
+                <not>
+                    <equals arg1="${javadoc.encoding}" arg2=""/>
+                </not>
+            </and>
+        </condition>
+        <property name="javadoc.encoding.used" value="${source.encoding}"/>
+        <property name="includes" value="**"/>
+        <property name="excludes" value=""/>
+        <property name="do.depend" value="false"/>
+        <condition property="do.depend.true">
+            <istrue value="${do.depend}"/>
+        </condition>
+        <path id="endorsed.classpath.path" path="${endorsed.classpath}"/>
+        <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'">
+            <and>
+                <isset property="endorsed.classpath"/>
+                <not>
+                    <equals arg1="${endorsed.classpath}" arg2="" trim="true"/>
+                </not>
+            </and>
+        </condition>
+        <condition else="" property="javac.profile.cmd.line.arg" value="-profile ${javac.profile}">
+            <isset property="profile.available"/>
+        </condition>
+        <condition else="false" property="jdkBug6558476">
+            <and>
+                <matches pattern="1\.[56]" string="${java.specification.version}"/>
+                <not>
+                    <os family="unix"/>
+                </not>
+            </and>
+        </condition>
+        <condition else="false" property="javac.fork">
+            <or>
+                <istrue value="${jdkBug6558476}"/>
+                <istrue value="${javac.external.vm}"/>
+            </or>
+        </condition>
+        <property name="jar.index" value="false"/>
+        <property name="jar.index.metainf" value="${jar.index}"/>
+        <property name="copylibs.rebase" value="true"/>
+        <available file="${meta.inf.dir}/persistence.xml" property="has.persistence.xml"/>
+        <condition property="junit.available">
+            <or>
+                <available classname="org.junit.Test" classpath="${run.test.classpath}"/>
+                <available classname="junit.framework.Test" classpath="${run.test.classpath}"/>
+            </or>
+        </condition>
+        <condition property="testng.available">
+            <available classname="org.testng.annotations.Test" classpath="${run.test.classpath}"/>
+        </condition>
+        <condition property="junit+testng.available">
+            <and>
+                <istrue value="${junit.available}"/>
+                <istrue value="${testng.available}"/>
+            </and>
+        </condition>
+        <condition else="testng" property="testng.mode" value="mixed">
+            <istrue value="${junit+testng.available}"/>
+        </condition>
+        <condition else="" property="testng.debug.mode" value="-mixed">
+            <istrue value="${junit+testng.available}"/>
+        </condition>
+        <property name="java.failonerror" value="true"/>
+    </target>
+    <target name="-post-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check">
+        <fail unless="src.dir">Must set src.dir</fail>
+        <fail unless="test.src.dir">Must set test.src.dir</fail>
+        <fail unless="build.dir">Must set build.dir</fail>
+        <fail unless="dist.dir">Must set dist.dir</fail>
+        <fail unless="build.classes.dir">Must set build.classes.dir</fail>
+        <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>
+        <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>
+        <fail unless="build.test.results.dir">Must set build.test.results.dir</fail>
+        <fail unless="build.classes.excludes">Must set build.classes.excludes</fail>
+        <fail unless="dist.jar">Must set dist.jar</fail>
+    </target>
+    <target name="-init-macrodef-property">
+        <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <attribute name="name"/>
+            <attribute name="value"/>
+            <sequential>
+                <property name="@{name}" value="${@{value}}"/>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors">
+        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}" name="classpath"/>
+            <attribute default="${javac.processorpath}" name="processorpath"/>
+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="${javac.debug}" name="debug"/>
+            <attribute default="${empty.dir}" name="sourcepath"/>
+            <attribute default="${empty.dir}" name="gensrcdir"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.dir}/empty" name="empty.dir"/>
+                <mkdir dir="${empty.dir}"/>
+                <mkdir dir="@{apgeneratedsrcdir}"/>
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+                    <src>
+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                            <include name="*"/>
+                        </dirset>
+                    </src>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <compilerarg line="${javac.profile.cmd.line.arg}"/>
+                    <compilerarg line="${javac.compilerargs}"/>
+                    <compilerarg value="-processorpath"/>
+                    <compilerarg path="@{processorpath}:${empty.dir}"/>
+                    <compilerarg line="${ap.processors.internal}"/>
+                    <compilerarg line="${annotation.processing.processor.options}"/>
+                    <compilerarg value="-s"/>
+                    <compilerarg path="@{apgeneratedsrcdir}"/>
+                    <compilerarg line="${ap.proc.none.internal}"/>
+                    <customize/>
+                </javac>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-ap-cmdline-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">
+        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}" name="classpath"/>
+            <attribute default="${javac.processorpath}" name="processorpath"/>
+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="${javac.debug}" name="debug"/>
+            <attribute default="${empty.dir}" name="sourcepath"/>
+            <attribute default="${empty.dir}" name="gensrcdir"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.dir}/empty" name="empty.dir"/>
+                <mkdir dir="${empty.dir}"/>
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+                    <src>
+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                            <include name="*"/>
+                        </dirset>
+                    </src>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <compilerarg line="${javac.profile.cmd.line.arg}"/>
+                    <compilerarg line="${javac.compilerargs}"/>
+                    <customize/>
+                </javac>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">
+        <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}" name="classpath"/>
+            <sequential>
+                <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}">
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                </depend>
+            </sequential>
+        </macrodef>
+        <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <sequential>
+                <fail unless="javac.includes">Must set javac.includes</fail>
+                <pathconvert pathsep="${line.separator}" property="javac.includes.binary">
+                    <path>
+                        <filelist dir="@{destdir}" files="${javac.includes}"/>
+                    </path>
+                    <globmapper from="*.java" to="*.class"/>
+                </pathconvert>
+                <tempfile deleteonexit="true" property="javac.includesfile.binary"/>
+                <echo file="${javac.includesfile.binary}" message="${javac.includes.binary}"/>
+                <delete>
+                    <files includesfile="${javac.includesfile.binary}"/>
+                </delete>
+                <delete>
+                    <fileset file="${javac.includesfile.binary}"/>
+                </delete>
+            </sequential>
+        </macrodef>
+    </target>
+    <target if="${junit.available}" name="-init-macrodef-junit-init">
+        <condition else="false" property="nb.junit.batch" value="true">
+            <and>
+                <istrue value="${junit.available}"/>
+                <not>
+                    <isset property="test.method"/>
+                </not>
+            </and>
+        </condition>
+        <condition else="false" property="nb.junit.single" value="true">
+            <and>
+                <istrue value="${junit.available}"/>
+                <isset property="test.method"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-init-test-properties">
+        <property name="test.binaryincludes" value="&lt;nothing&gt;"/>
+        <property name="test.binarytestincludes" value=""/>
+        <property name="test.binaryexcludes" value=""/>
+    </target>
+    <target if="${nb.junit.single}" name="-init-macrodef-junit-single" unless="${nb.junit.batch}">
+        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="junit.forkmode" value="perTest"/>
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-batch" unless="${nb.junit.single}">
+        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="junit.forkmode" value="perTest"/>
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+                    <batchtest todir="${build.test.results.dir}">
+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                            <filename name="@{testincludes}"/>
+                        </fileset>
+                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">
+                            <filename name="${test.binarytestincludes}"/>
+                        </fileset>
+                    </batchtest>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit-init,-init-macrodef-junit-single, -init-macrodef-junit-batch" if="${junit.available}" name="-init-macrodef-junit"/>
+    <target if="${testng.available}" name="-init-macrodef-testng">
+        <macrodef name="testng" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <condition else="" property="testng.methods.arg" value="@{testincludes}.@{testmethods}">
+                    <isset property="test.method"/>
+                </condition>
+                <union id="test.set">
+                    <fileset dir="${test.src.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                        <filename name="@{testincludes}"/>
+                    </fileset>
+                </union>
+                <taskdef classname="org.testng.TestNGAntTask" classpath="${run.test.classpath}" name="testng"/>
+                <testng classfilesetref="test.set" failureProperty="tests.failed" listeners="org.testng.reporters.VerboseReporter" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="WordColorGame" testname="TestNG tests" workingDir="${work.dir}">
+                    <xmlfileset dir="${build.test.classes.dir}" includes="@{testincludes}"/>
+                    <propertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </propertyset>
+                    <customize/>
+                </testng>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-test-impl">
+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <echo>No tests executed.</echo>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit" if="${junit.available}" name="-init-macrodef-junit-impl">
+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <j2seproject3:junit excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize/>
+                </j2seproject3:junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-testng" if="${testng.available}" name="-init-macrodef-testng-impl">
+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <j2seproject3:testng excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize/>
+                </j2seproject3:testng>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-test-impl,-init-macrodef-junit-impl,-init-macrodef-testng-impl" name="-init-macrodef-test">
+        <macrodef name="test" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <sequential>
+                <j2seproject3:test-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize>
+                        <classpath>
+                            <path path="${run.test.classpath}"/>
+                        </classpath>
+                        <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                        <jvmarg line="${run.jvmargs}"/>
+                        <jvmarg line="${run.jvmargs.ide}"/>
+                    </customize>
+                </j2seproject3:test-impl>
+            </sequential>
+        </macrodef>
+    </target>
+    <target if="${junit.available}" name="-init-macrodef-junit-debug" unless="${nb.junit.batch}">
+        <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="junit.forkmode" value="perTest"/>
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <jvmarg line="${debug-args-line}"/>
+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-debug-batch">
+        <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="junit.forkmode" value="perTest"/>
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+                    <batchtest todir="${build.test.results.dir}">
+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                            <filename name="@{testincludes}"/>
+                        </fileset>
+                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">
+                            <filename name="${test.binarytestincludes}"/>
+                        </fileset>
+                    </batchtest>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <jvmarg line="${debug-args-line}"/>
+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit-debug,-init-macrodef-junit-debug-batch" if="${junit.available}" name="-init-macrodef-junit-debug-impl">
+        <macrodef name="test-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <j2seproject3:junit-debug excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize/>
+                </j2seproject3:junit-debug>
+            </sequential>
+        </macrodef>
+    </target>
+    <target if="${testng.available}" name="-init-macrodef-testng-debug">
+        <macrodef name="testng-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <element name="customize2" optional="true"/>
+            <sequential>
+                <condition else="-testclass @{testClass}" property="test.class.or.method" value="-methods @{testClass}.@{testMethod}">
+                    <isset property="test.method"/>
+                </condition>
+                <condition else="-suitename WordColorGame -testname @{testClass} ${test.class.or.method}" property="testng.cmd.args" value="@{testClass}">
+                    <matches pattern=".*\.xml" string="@{testClass}"/>
+                </condition>
+                <delete dir="${build.test.results.dir}" quiet="true"/>
+                <mkdir dir="${build.test.results.dir}"/>
+                <j2seproject3:debug classname="org.testng.TestNG" classpath="${debug.test.classpath}">
+                    <customize>
+                        <customize2/>
+                        <jvmarg value="-ea"/>
+                        <arg line="${testng.debug.mode}"/>
+                        <arg line="-d ${build.test.results.dir}"/>
+                        <arg line="-listener org.testng.reporters.VerboseReporter"/>
+                        <arg line="${testng.cmd.args}"/>
+                    </customize>
+                </j2seproject3:debug>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-testng-debug" if="${testng.available}" name="-init-macrodef-testng-debug-impl">
+        <macrodef name="testng-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <element implicit="true" name="customize2" optional="true"/>
+            <sequential>
+                <j2seproject3:testng-debug testClass="@{testClass}" testMethod="@{testMethod}">
+                    <customize2/>
+                </j2seproject3:testng-debug>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit-debug-impl" if="${junit.available}" name="-init-macrodef-test-debug-junit">
+        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <sequential>
+                <j2seproject3:test-debug-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize>
+                        <classpath>
+                            <path path="${run.test.classpath}"/>
+                        </classpath>
+                        <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                        <jvmarg line="${run.jvmargs}"/>
+                        <jvmarg line="${run.jvmargs.ide}"/>
+                    </customize>
+                </j2seproject3:test-debug-impl>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-testng-debug-impl" if="${testng.available}" name="-init-macrodef-test-debug-testng">
+        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <sequential>
+                <j2seproject3:testng-debug-impl testClass="@{testClass}" testMethod="@{testMethod}">
+                    <customize2>
+                        <syspropertyset>
+                            <propertyref prefix="test-sys-prop."/>
+                            <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                        </syspropertyset>
+                    </customize2>
+                </j2seproject3:testng-debug-impl>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-test-debug-junit,-init-macrodef-test-debug-testng" name="-init-macrodef-test-debug"/>
+    <!--
+                pre NB7.2 profiling section; consider it deprecated
+            -->
+    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile, -profile-init-check" if="profiler.info.jvmargs.agent" name="profile-init"/>
+    <target if="profiler.info.jvmargs.agent" name="-profile-pre-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="profiler.info.jvmargs.agent" name="-profile-post-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="profiler.info.jvmargs.agent" name="-profile-init-macrodef-profile">
+        <macrodef name="resolve">
+            <attribute name="name"/>
+            <attribute name="value"/>
+            <sequential>
+                <property name="@{name}" value="${env.@{value}}"/>
+            </sequential>
+        </macrodef>
+        <macrodef name="profile">
+            <attribute default="${main.class}" name="classname"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property environment="env"/>
+                <resolve name="profiler.current.path" value="${profiler.info.pathvar}"/>
+                <java classname="@{classname}" dir="${profiler.info.dir}" failonerror="${java.failonerror}" fork="true" jvm="${profiler.info.jvm}">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg value="${profiler.info.jvmargs.agent}"/>
+                    <jvmarg line="${profiler.info.jvmargs}"/>
+                    <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
+                    <arg line="${application.args}"/>
+                    <classpath>
+                        <path path="${run.classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile" if="profiler.info.jvmargs.agent" name="-profile-init-check">
+        <fail unless="profiler.info.jvm">Must set JVM to use for profiling in profiler.info.jvm</fail>
+        <fail unless="profiler.info.jvmargs.agent">Must set profiler agent JVM arguments in profiler.info.jvmargs.agent</fail>
+    </target>
+    <!--
+                end of pre NB7.2 profiling section
+            -->
+    <target depends="-init-debug-args" name="-init-macrodef-nbjpda">
+        <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <attribute default="${main.class}" name="name"/>
+            <attribute default="${debug.classpath}" name="classpath"/>
+            <attribute default="" name="stopclassname"/>
+            <sequential>
+                <nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="${debug-transport}">
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                </nbjpdastart>
+            </sequential>
+        </macrodef>
+        <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <attribute default="${build.classes.dir}" name="dir"/>
+            <sequential>
+                <nbjpdareload>
+                    <fileset dir="@{dir}" includes="${fix.classes}">
+                        <include name="${fix.includes}*.class"/>
+                    </fileset>
+                </nbjpdareload>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-debug-args">
+        <property name="version-output" value="java version &quot;${ant.java.version}"/>
+        <condition property="have-jdk-older-than-1.4">
+            <or>
+                <contains string="${version-output}" substring="java version &quot;1.0"/>
+                <contains string="${version-output}" substring="java version &quot;1.1"/>
+                <contains string="${version-output}" substring="java version &quot;1.2"/>
+                <contains string="${version-output}" substring="java version &quot;1.3"/>
+            </or>
+        </condition>
+        <condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">
+            <istrue value="${have-jdk-older-than-1.4}"/>
+        </condition>
+        <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">
+            <os family="windows"/>
+        </condition>
+        <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">
+            <isset property="debug.transport"/>
+        </condition>
+    </target>
+    <target depends="-init-debug-args" name="-init-macrodef-debug">
+        <macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${main.class}" name="classname"/>
+            <attribute default="${debug.classpath}" name="classpath"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <java classname="@{classname}" dir="${work.dir}" failonerror="${java.failonerror}" fork="true">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg line="${debug-args-line}"/>
+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
+                    <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
+                    <jvmarg line="${run.jvmargs}"/>
+                    <jvmarg line="${run.jvmargs.ide}"/>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-java">
+        <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <attribute default="${main.class}" name="classname"/>
+            <attribute default="${run.classpath}" name="classpath"/>
+            <attribute default="jvm" name="jvm"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <java classname="@{classname}" dir="${work.dir}" failonerror="${java.failonerror}" fork="true">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
+                    <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
+                    <jvmarg line="${run.jvmargs}"/>
+                    <jvmarg line="${run.jvmargs.ide}"/>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-copylibs">
+        <macrodef name="copylibs" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${manifest.file}" name="manifest"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
+                <pathconvert property="run.classpath.without.build.classes.dir">
+                    <path path="${run.classpath}"/>
+                    <map from="${build.classes.dir.resolved}" to=""/>
+                </pathconvert>
+                <pathconvert pathsep=" " property="jar.classpath">
+                    <path path="${run.classpath.without.build.classes.dir}"/>
+                    <chainedmapper>
+                        <flattenmapper/>
+                        <filtermapper>
+                            <replacestring from=" " to="%20"/>
+                        </filtermapper>
+                        <globmapper from="*" to="lib/*"/>
+                    </chainedmapper>
+                </pathconvert>
+                <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
+                <copylibs compress="${jar.compress}" excludeFromCopy="${copylibs.excludes}" index="${jar.index}" indexMetaInf="${jar.index.metainf}" jarfile="${dist.jar}" manifest="@{manifest}" manifestencoding="UTF-8" rebase="${copylibs.rebase}" runtimeclasspath="${run.classpath.without.build.classes.dir}">
+                    <fileset dir="${build.classes.dir}" excludes="${dist.archive.excludes}"/>
+                    <manifest>
+                        <attribute name="Class-Path" value="${jar.classpath}"/>
+                        <customize/>
+                    </manifest>
+                </copylibs>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-presetdef-jar">
+        <presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <jar compress="${jar.compress}" index="${jar.index}" jarfile="${dist.jar}" manifestencoding="UTF-8">
+                <j2seproject1:fileset dir="${build.classes.dir}" excludes="${dist.archive.excludes}"/>
+            </jar>
+        </presetdef>
+    </target>
+    <target name="-init-ap-cmdline-properties">
+        <property name="annotation.processing.enabled" value="true"/>
+        <property name="annotation.processing.processors.list" value=""/>
+        <property name="annotation.processing.processor.options" value=""/>
+        <property name="annotation.processing.run.all.processors" value="true"/>
+        <property name="javac.processorpath" value="${javac.classpath}"/>
+        <property name="javac.test.processorpath" value="${javac.test.classpath}"/>
+        <condition property="ap.supported.internal" value="true">
+            <not>
+                <matches pattern="1\.[0-5](\..*)?" string="${javac.source}"/>
+            </not>
+        </condition>
+    </target>
+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-ap-cmdline-supported">
+        <condition else="" property="ap.processors.internal" value="-processor ${annotation.processing.processors.list}">
+            <isfalse value="${annotation.processing.run.all.processors}"/>
+        </condition>
+        <condition else="" property="ap.proc.none.internal" value="-proc:none">
+            <isfalse value="${annotation.processing.enabled}"/>
+        </condition>
+    </target>
+    <target depends="-init-ap-cmdline-properties,-init-ap-cmdline-supported" name="-init-ap-cmdline">
+        <property name="ap.cmd.line.internal" value=""/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-test,-init-macrodef-test-debug,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar,-init-ap-cmdline" name="init"/>
+    <!--
+                ===================
+                COMPILATION SECTION
+                ===================
+            -->
+    <target name="-deps-jar-init" unless="built-jar.properties">
+        <property location="${build.dir}/built-jar.properties" name="built-jar.properties"/>
+        <delete file="${built-jar.properties}" quiet="true"/>
+    </target>
+    <target if="already.built.jar.${basedir}" name="-warn-already-built-jar">
+        <echo level="warn" message="Cycle detected: WordColorGame was already built"/>
+    </target>
+    <target depends="init,-deps-jar-init" name="deps-jar" unless="no.deps">
+        <mkdir dir="${build.dir}"/>
+        <touch file="${built-jar.properties}" verbose="false"/>
+        <property file="${built-jar.properties}" prefix="already.built.jar."/>
+        <antcall target="-warn-already-built-jar"/>
+        <propertyfile file="${built-jar.properties}">
+            <entry key="${basedir}" value=""/>
+        </propertyfile>
+    </target>
+    <target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>
+    <target depends="init" name="-check-automatic-build">
+        <available file="${build.classes.dir}/.netbeans_automatic_build" property="netbeans.automatic.build"/>
+    </target>
+    <target depends="init" if="netbeans.automatic.build" name="-clean-after-automatic-build">
+        <antcall target="clean"/>
+    </target>
+    <target depends="init,deps-jar" name="-pre-pre-compile">
+        <mkdir dir="${build.classes.dir}"/>
+    </target>
+    <target name="-pre-compile">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="do.depend.true" name="-compile-depend">
+        <pathconvert property="build.generated.subdirs">
+            <dirset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                <include name="*"/>
+            </dirset>
+        </pathconvert>
+        <j2seproject3:depend srcdir="${src.dir}:${build.generated.subdirs}"/>
+    </target>
+    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile, -copy-persistence-xml,-compile-depend" if="have.sources" name="-do-compile">
+        <j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/>
+        <copy todir="${build.classes.dir}">
+            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target if="has.persistence.xml" name="-copy-persistence-xml">
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <copy todir="${build.classes.dir}/META-INF">
+            <fileset dir="${meta.inf.dir}" includes="persistence.xml orm.xml"/>
+        </copy>
+    </target>
+    <target name="-post-compile">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>
+    <target name="-pre-compile-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">
+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
+        <j2seproject3:force-recompile/>
+        <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" sourcepath="${src.dir}"/>
+    </target>
+    <target name="-post-compile-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>
+    <!--
+                ====================
+                JAR BUILDING SECTION
+                ====================
+            -->
+    <target depends="init" name="-pre-pre-jar">
+        <dirname file="${dist.jar}" property="dist.jar.dir"/>
+        <mkdir dir="${dist.jar.dir}"/>
+    </target>
+    <target name="-pre-jar">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init" if="do.archive" name="-do-jar-create-manifest" unless="manifest.available">
+        <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
+        <touch file="${tmp.manifest.file}" verbose="false"/>
+    </target>
+    <target depends="init" if="do.archive+manifest.available" name="-do-jar-copy-manifest">
+        <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
+        <copy encoding="${manifest.encoding}" file="${manifest.file}" outputencoding="UTF-8" tofile="${tmp.manifest.file}"/>
+    </target>
+    <target depends="init,-do-jar-create-manifest,-do-jar-copy-manifest" if="do.archive+main.class.available" name="-do-jar-set-mainclass">
+        <manifest encoding="UTF-8" file="${tmp.manifest.file}" mode="update">
+            <attribute name="Main-Class" value="${main.class}"/>
+        </manifest>
+    </target>
+    <target depends="init,-do-jar-create-manifest,-do-jar-copy-manifest" if="do.archive+profile.available" name="-do-jar-set-profile">
+        <manifest encoding="UTF-8" file="${tmp.manifest.file}" mode="update">
+            <attribute name="Profile" value="${javac.profile}"/>
+        </manifest>
+    </target>
+    <target depends="init,-do-jar-create-manifest,-do-jar-copy-manifest" if="do.archive+splashscreen.available" name="-do-jar-set-splashscreen">
+        <basename file="${application.splash}" property="splashscreen.basename"/>
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <copy failonerror="false" file="${application.splash}" todir="${build.classes.dir}/META-INF"/>
+        <manifest encoding="UTF-8" file="${tmp.manifest.file}" mode="update">
+            <attribute name="SplashScreen-Image" value="META-INF/${splashscreen.basename}"/>
+        </manifest>
+    </target>
+    <target depends="init,-init-macrodef-copylibs,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen" if="do.mkdist" name="-do-jar-copylibs">
+        <j2seproject3:copylibs manifest="${tmp.manifest.file}"/>
+        <echo level="info">To run this application from the command line without Ant, try:</echo>
+        <property location="${dist.jar}" name="dist.jar.resolved"/>
+        <echo level="info">java -jar "${dist.jar.resolved}"</echo>
+    </target>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen" if="do.archive" name="-do-jar-jar" unless="do.mkdist">
+        <j2seproject1:jar manifest="${tmp.manifest.file}"/>
+        <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
+        <property location="${dist.jar}" name="dist.jar.resolved"/>
+        <pathconvert property="run.classpath.with.dist.jar">
+            <path path="${run.classpath}"/>
+            <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/>
+        </pathconvert>
+        <condition else="" property="jar.usage.message" value="To run this application from the command line without Ant, try:${line.separator}${platform.java} -cp ${run.classpath.with.dist.jar} ${main.class}">
+            <isset property="main.class.available"/>
+        </condition>
+        <condition else="debug" property="jar.usage.level" value="info">
+            <isset property="main.class.available"/>
+        </condition>
+        <echo level="${jar.usage.level}" message="${jar.usage.message}"/>
+    </target>
+    <target depends="-do-jar-copylibs" if="do.archive" name="-do-jar-delete-manifest">
+        <delete>
+            <fileset file="${tmp.manifest.file}"/>
+        </delete>
+    </target>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-do-jar-jar,-do-jar-delete-manifest" name="-do-jar-without-libraries"/>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-do-jar-copylibs,-do-jar-delete-manifest" name="-do-jar-with-libraries"/>
+    <target depends="-jfx-copylibs,-rebase-libs,jfx-deployment" name="-post-jar">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-jar,-do-jar-without-libraries,-do-jar-with-libraries,-post-jar" name="-do-jar"/>
+    <target depends="init,compile,-pre-jar,-do-jar,-post-jar" description="Build JAR." name="jar"/>
+    <!--
+                =================
+                EXECUTION SECTION
+                =================
+            -->
+    <target depends="init,compile,jar" description="Run a main class." name="run">
+        <j2seproject1:java>
+            <customize>
+                <arg line="${application.args}"/>
+            </customize>
+        </j2seproject1:java>
+    </target>
+    <target name="-do-not-recompile">
+        <property name="javac.includes.binary" value=""/>
+    </target>
+    <target depends="init,compile-single" name="run-single">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <j2seproject1:java classname="${run.class}"/>
+    </target>
+    <target depends="init,compile-test-single" name="run-test-with-main">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <j2seproject1:java classname="${run.class}" classpath="${run.test.classpath}"/>
+    </target>
+    <!--
+                =================
+                DEBUGGING SECTION
+                =================
+            -->
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger">
+        <j2seproject1:nbjpdastart name="${debug.class}"/>
+    </target>
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-main-test">
+        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${debug.class}"/>
+    </target>
+    <target depends="init,compile" name="-debug-start-debuggee">
+        <j2seproject3:debug>
+            <customize>
+                <arg line="${application.args}"/>
+            </customize>
+        </j2seproject3:debug>
+    </target>
+    <target depends="init,compile,-debug-start-debugger,-debug-start-debuggee,jar" description="Debug project in IDE." if="netbeans.home" name="debug"/>
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-stepinto">
+        <j2seproject1:nbjpdastart stopclassname="${main.class}"/>
+    </target>
+    <target depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee" if="netbeans.home" name="debug-stepinto"/>
+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single">
+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
+        <j2seproject3:debug classname="${debug.class}"/>
+    </target>
+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single"/>
+    <target depends="init,compile-test-single" if="netbeans.home" name="-debug-start-debuggee-main-test">
+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
+        <j2seproject3:debug classname="${debug.class}" classpath="${debug.test.classpath}"/>
+    </target>
+    <target depends="init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test" if="netbeans.home" name="debug-test-with-main"/>
+    <target depends="init" name="-pre-debug-fix">
+        <fail unless="fix.includes">Must set fix.includes</fail>
+        <property name="javac.includes" value="${fix.includes}.java"/>
+    </target>
+    <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix">
+        <j2seproject1:nbjpdareload/>
+    </target>
+    <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/>
+    <!--
+                =================
+                PROFILING SECTION
+                =================
+            -->
+    <!--
+                pre NB7.2 profiler integration
+            -->
+    <target depends="profile-init,compile" description="Profile a project in the IDE." if="profiler.info.jvmargs.agent" name="-profile-pre72">
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile/>
+    </target>
+    <target depends="profile-init,compile-single" description="Profile a selected class in the IDE." if="profiler.info.jvmargs.agent" name="-profile-single-pre72">
+        <fail unless="profile.class">Must select one file in the IDE or set profile.class</fail>
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile classname="${profile.class}"/>
+    </target>
+    <target depends="profile-init,compile-single" if="profiler.info.jvmargs.agent" name="-profile-applet-pre72">
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile classname="sun.applet.AppletViewer">
+            <customize>
+                <arg value="${applet.url}"/>
+            </customize>
+        </profile>
+    </target>
+    <target depends="profile-init,compile-test-single" if="profiler.info.jvmargs.agent" name="-profile-test-single-pre72">
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.test.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <junit dir="${profiler.info.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" jvm="${profiler.info.jvm}" showoutput="true">
+            <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
+            <jvmarg value="${profiler.info.jvmargs.agent}"/>
+            <jvmarg line="${profiler.info.jvmargs}"/>
+            <test name="${profile.class}"/>
+            <classpath>
+                <path path="${run.test.classpath}"/>
+            </classpath>
+            <syspropertyset>
+                <propertyref prefix="test-sys-prop."/>
+                <mapper from="test-sys-prop.*" to="*" type="glob"/>
+            </syspropertyset>
+            <formatter type="brief" usefile="false"/>
+            <formatter type="xml"/>
+        </junit>
+    </target>
+    <!--
+                end of pre NB72 profiling section
+            -->
+    <target if="netbeans.home" name="-profile-check">
+        <condition property="profiler.configured">
+            <or>
+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-agentpath:"/>
+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-javaagent:"/>
+            </or>
+        </condition>
+    </target>
+    <target depends="-profile-check,-profile-pre72,jar" description="Profile a project in the IDE." if="profiler.configured" name="profile" unless="profiler.info.jvmargs.agent">
+        <startprofiler/>
+        <antcall target="run"/>
+    </target>
+    <target depends="-profile-check,-profile-single-pre72" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-single" unless="profiler.info.jvmargs.agent">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <startprofiler/>
+        <antcall target="run-single"/>
+    </target>
+    <target depends="-profile-test-single-pre72" description="Profile a selected test in the IDE." name="profile-test-single"/>
+    <target depends="-profile-check" description="Profile a selected test in the IDE." if="profiler.configured" name="profile-test" unless="profiler.info.jvmargs">
+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
+        <startprofiler/>
+        <antcall target="test-single"/>
+    </target>
+    <target depends="-profile-check" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-test-with-main">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <startprofiler/>
+        <antcall target="run-test-with-main"/>
+    </target>
+    <target depends="-profile-check,-profile-applet-pre72" if="profiler.configured" name="profile-applet" unless="profiler.info.jvmargs.agent">
+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
+        <startprofiler/>
+        <antcall target="run-applet"/>
+    </target>
+    <!--
+                ===============
+                JAVADOC SECTION
+                ===============
+            -->
+    <target depends="init" if="have.sources" name="-javadoc-build">
+        <mkdir dir="${dist.javadoc.dir}"/>
+        <condition else="" property="javadoc.endorsed.classpath.cmd.line.arg" value="-J${endorsed.classpath.cmd.line.arg}">
+            <and>
+                <isset property="endorsed.classpath.cmd.line.arg"/>
+                <not>
+                    <equals arg1="${endorsed.classpath.cmd.line.arg}" arg2=""/>
+                </not>
+            </and>
+        </condition>
+        <condition else="" property="bug5101868workaround" value="*.java">
+            <matches pattern="1\.[56](\..*)?" string="${java.version}"/>
+        </condition>
+        <javadoc additionalparam="-J-Dfile.encoding=${file.encoding} ${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
+            <classpath>
+                <path path="${javac.classpath}"/>
+            </classpath>
+            <fileset dir="${src.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                <filename name="**/*.java"/>
+            </fileset>
+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                <include name="**/*.java"/>
+                <exclude name="*.java"/>
+            </fileset>
+            <arg line="${javadoc.endorsed.classpath.cmd.line.arg}"/>
+        </javadoc>
+        <copy todir="${dist.javadoc.dir}">
+            <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
+                <filename name="**/doc-files/**"/>
+            </fileset>
+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                <include name="**/doc-files/**"/>
+            </fileset>
+        </copy>
+    </target>
+    <target depends="init,-javadoc-build" if="netbeans.home" name="-javadoc-browse" unless="no.javadoc.preview">
+        <nbbrowse file="${dist.javadoc.dir}/index.html"/>
+    </target>
+    <target depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc." name="javadoc"/>
+    <!--
+                =========================
+                TEST COMPILATION SECTION
+                =========================
+            -->
+    <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">
+        <mkdir dir="${build.test.classes.dir}"/>
+    </target>
+    <target name="-pre-compile-test">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="do.depend.true" name="-compile-test-depend">
+        <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
+    </target>
+    <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">
+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" processorpath="${javac.test.processorpath}" srcdir="${test.src.dir}"/>
+        <copy todir="${build.test.classes.dir}">
+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-test">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/>
+    <target name="-pre-compile-test-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
+        <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>
+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" processorpath="${javac.test.processorpath}" sourcepath="${test.src.dir}" srcdir="${test.src.dir}"/>
+        <copy todir="${build.test.classes.dir}">
+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-test-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>
+    <!--
+                =======================
+                TEST EXECUTION SECTION
+                =======================
+            -->
+    <target depends="init" if="have.tests" name="-pre-test-run">
+        <mkdir dir="${build.test.results.dir}"/>
+    </target>
+    <target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">
+        <j2seproject3:test includes="${includes}" testincludes="**/*Test.java"/>
+    </target>
+    <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init" if="have.tests" name="test-report"/>
+    <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/>
+    <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/>
+    <target depends="init" if="have.tests" name="-pre-test-run-single">
+        <mkdir dir="${build.test.results.dir}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">
+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
+        <j2seproject3:test excludes="" includes="${test.includes}" testincludes="${test.includes}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single-method">
+        <fail unless="test.class">Must select some files in the IDE or set test.class</fail>
+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>
+        <j2seproject3:test excludes="" includes="${javac.includes}" testincludes="${test.class}" testmethods="${test.method}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method" if="have.tests" name="-post-test-run-single-method">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method,-post-test-run-single-method" description="Run single unit test." name="test-single-method"/>
+    <!--
+                =======================
+                TEST DEBUGGING SECTION
+                =======================
+            -->
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test">
+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
+        <j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testincludes="${javac.includes}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test-method">
+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>
+        <j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testMethod="${test.method}" testincludes="${test.class}" testmethods="${test.method}"/>
+    </target>
+    <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">
+        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>
+    </target>
+    <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>
+    <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test-method" name="debug-test-method"/>
+    <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">
+        <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/>
+    </target>
+    <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/>
+    <!--
+                =========================
+                APPLET EXECUTION SECTION
+                =========================
+            -->
+    <target depends="init,compile-single" name="run-applet">
+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
+        <j2seproject1:java classname="sun.applet.AppletViewer">
+            <customize>
+                <arg value="${applet.url}"/>
+            </customize>
+        </j2seproject1:java>
+    </target>
+    <!--
+                =========================
+                APPLET DEBUGGING  SECTION
+                =========================
+            -->
+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-applet">
+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
+        <j2seproject3:debug classname="sun.applet.AppletViewer">
+            <customize>
+                <arg value="${applet.url}"/>
+            </customize>
+        </j2seproject3:debug>
+    </target>
+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet" if="netbeans.home" name="debug-applet"/>
+    <!--
+                ===============
+                CLEANUP SECTION
+                ===============
+            -->
+    <target name="-deps-clean-init" unless="built-clean.properties">
+        <property location="${build.dir}/built-clean.properties" name="built-clean.properties"/>
+        <delete file="${built-clean.properties}" quiet="true"/>
+    </target>
+    <target if="already.built.clean.${basedir}" name="-warn-already-built-clean">
+        <echo level="warn" message="Cycle detected: WordColorGame was already built"/>
+    </target>
+    <target depends="init,-deps-clean-init" name="deps-clean" unless="no.deps">
+        <mkdir dir="${build.dir}"/>
+        <touch file="${built-clean.properties}" verbose="false"/>
+        <property file="${built-clean.properties}" prefix="already.built.clean."/>
+        <antcall target="-warn-already-built-clean"/>
+        <propertyfile file="${built-clean.properties}">
+            <entry key="${basedir}" value=""/>
+        </propertyfile>
+    </target>
+    <target depends="init" name="-do-clean">
+        <delete dir="${build.dir}"/>
+        <delete dir="${dist.dir}" followsymlinks="false" includeemptydirs="true"/>
+    </target>
+    <target name="-post-clean">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products." name="clean"/>
+    <target name="-check-call-dep">
+        <property file="${call.built.properties}" prefix="already.built."/>
+        <condition property="should.call.dep">
+            <and>
+                <not>
+                    <isset property="already.built.${call.subproject}"/>
+                </not>
+                <available file="${call.script}"/>
+            </and>
+        </condition>
+    </target>
+    <target depends="-check-call-dep" if="should.call.dep" name="-maybe-call-dep">
+        <ant antfile="${call.script}" inheritall="false" target="${call.target}">
+            <propertyset>
+                <propertyref prefix="transfer."/>
+                <mapper from="transfer.*" to="*" type="glob"/>
+            </propertyset>
+        </ant>
+    </target>
+</project>
diff --git a/Java/Simple Games/Color Game/nbproject/configs/Run_as_WebStart.properties b/Java/Simple Games/Color Game/nbproject/configs/Run_as_WebStart.properties
new file mode 100644
index 00000000..670fff03
--- /dev/null
+++ b/Java/Simple Games/Color Game/nbproject/configs/Run_as_WebStart.properties	
@@ -0,0 +1,2 @@
+# Do not modify this property in this configuration. It can be re-generated.
+$label=Run as WebStart
diff --git a/Java/Simple Games/Color Game/nbproject/configs/Run_in_Browser.properties b/Java/Simple Games/Color Game/nbproject/configs/Run_in_Browser.properties
new file mode 100644
index 00000000..f2a5a657
--- /dev/null
+++ b/Java/Simple Games/Color Game/nbproject/configs/Run_in_Browser.properties	
@@ -0,0 +1,2 @@
+# Do not modify this property in this configuration. It can be re-generated.
+$label=Run in Browser
diff --git a/Java/Simple Games/Color Game/nbproject/genfiles.properties b/Java/Simple Games/Color Game/nbproject/genfiles.properties
new file mode 100644
index 00000000..3c09d27e
--- /dev/null
+++ b/Java/Simple Games/Color Game/nbproject/genfiles.properties	
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=12c55782
+build.xml.script.CRC32=fcede4e3
+build.xml.stylesheet.CRC32=8064a381@1.80.1.48
+# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
+# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
+nbproject/build-impl.xml.data.CRC32=12c55782
+nbproject/build-impl.xml.script.CRC32=2c4783c5
+nbproject/build-impl.xml.stylesheet.CRC32=830a3534@1.80.1.48
diff --git a/Java/Simple Games/Color Game/nbproject/jfx-impl.xml b/Java/Simple Games/Color Game/nbproject/jfx-impl.xml
new file mode 100644
index 00000000..575cf06e
--- /dev/null
+++ b/Java/Simple Games/Color Game/nbproject/jfx-impl.xml	
@@ -0,0 +1,4049 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+*** GENERATED FROM TEMPLATE - DO NOT EDIT ***
+***       EDIT ../build.xml INSTEAD       ***
+-->
+
+<project name="jfx-impl" default="jfx-deployment" basedir=".." xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" 
+         xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:fx="javafx:com.sun.javafx.tools.ant">
+    <description>JavaFX-specific Ant calls</description>
+
+
+    <!-- Empty placeholders for easier customization in ../build.xml -->
+    
+    <target name="-pre-jfx-jar">
+        <!-- Called right before <fx:jar> task. You can override this target in the ../build.xml file. -->
+    </target>
+
+    <target name="-post-jfx-jar">
+        <!-- Called right after <fx:jar> task. You can override this target in the ../build.xml file. -->
+    </target>
+
+    <target name="-pre-jfx-deploy">
+        <!-- Called right before <fx:deploy> task. You can override this target in the ../build.xml file. -->
+    </target>
+
+    <target name="-post-jfx-deploy">
+        <!-- Called right after <fx:deploy> task. You can override this target in the ../build.xml file. -->
+    </target>
+    
+    <target name="-pre-jfx-native">
+        <!-- Called right before the call to native packager (just after -pre-jfx-deploy). You can override this target in the ../build.xml file. -->
+    </target>
+
+    <target name="-post-jfx-native">
+        <!-- Called right after the call to native packager (just after -post-jfx-deploy). You can override this target in the ../build.xml file. -->
+    </target>
+    
+    
+    <!-- Check system and JDK version -->
+
+    <target name="-check-operating-system">
+        <condition property="running.on.mac">
+            <os family="mac"/>
+        </condition>
+        <condition property="running.on.unix">
+            <os family="unix"/>
+        </condition>
+        <condition property="running.on.windows">
+            <os family="windows"/>
+        </condition>
+        <echo message="running.on.mac = ${running.on.mac}" level="verbose"/>
+        <echo message="running.on.unix = ${running.on.unix}" level="verbose"/>
+        <echo message="running.on.windows = ${running.on.windows}" level="verbose"/>
+    </target>
+
+    <target name="-check-platform-home-fxsdk-java" depends="-check-property-javafx.sdk" if="javafx.sdk.defined">
+        <condition property="do.set.platform.home.fxsdk.java">
+            <and>
+                <not><isset property="active.platform.home.java.executable"/></not>
+                <or>
+                    <available file="${javafx.sdk}${file.separator}bin${file.separator}java"/>
+                    <available file="${javafx.sdk}${file.separator}bin${file.separator}java.exe"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-platform-home-fxsdk-java" depends="-check-platform-home-fxsdk-java" if="do.set.platform.home.fxsdk.java">
+        <property name="active.platform.home.java.executable" value="${javafx.sdk}${file.separator}bin${file.separator}java"/>
+    </target>
+    <target name="-check-platform-home-java" if="platform.home">
+        <condition property="do.set.platform.home.java">
+            <and>
+                <not><isset property="active.platform.home.java.executable"/></not>
+                <or>
+                    <available file="${platform.home}${file.separator}bin${file.separator}java"/>
+                    <available file="${platform.home}${file.separator}bin${file.separator}java.exe"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-platform-home-java" depends="-set-platform-home-fxsdk-java,-check-platform-home-java" if="do.set.platform.home.java">
+        <property name="active.platform.home.java.executable" value="${platform.home}${file.separator}bin${file.separator}java"/>
+    </target>
+    <target name="-check-platform-home-probjdk-java" unless="active.platform.home.java.executable">
+        <condition property="do.set.platform.home.probjdk.java">
+            <and>
+                <not><isset property="active.platform.home.java.executable"/></not>
+                <or>
+                    <available file="${java.home}${file.separator}..${file.separator}bin${file.separator}java"/>
+                    <available file="${java.home}${file.separator}..${file.separator}bin${file.separator}java.exe"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-platform-home-probjdk-java" depends="-set-platform-home-java,-check-platform-home-probjdk-java" if="do.set.platform.home.probjdk.java">
+        <property name="active.platform.home.java.executable" value="${java.home}${file.separator}..${file.separator}bin${file.separator}java"/>
+    </target>
+    <target name="-check-platform-home-envjdk-java" unless="active.platform.home.java.executable">
+        <property environment="env"/>
+        <condition property="do.set.platform.home.envjdk.java">
+            <and>
+                <not><isset property="active.platform.home.java.executable"/></not>
+                <or>
+                    <available file="${env.JAVA_HOME}${file.separator}bin${file.separator}java"/>
+                    <available file="${env.JAVA_HOME}${file.separator}bin${file.separator}java.exe"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-platform-home-envjdk-java" depends="-set-platform-home-probjdk-java,-check-platform-home-envjdk-java" if="do.set.platform.home.envjdk.java">
+        <property environment="env"/>
+        <property name="active.platform.home.java.executable" value="${env.JAVA_HOME}${file.separator}bin${file.separator}java"/>
+    </target>
+    <target name="-check-platform-home-fxrt-java" depends="-check-property-javafx.runtime" if="javafx.runtime.defined">
+        <condition property="do.set.platform.home.fxrt.java">
+            <and>
+                <not><isset property="active.platform.home.java.executable"/></not>
+                <or>
+                    <available file="${javafx.runtime}${file.separator}bin${file.separator}java"/>
+                    <available file="${javafx.runtime}${file.separator}bin${file.separator}java.exe"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-platform-home-fxrt-java" depends="-set-platform-home-envjdk-java,-check-platform-home-fxrt-java" if="do.set.platform.home.fxrt.java">
+        <property name="active.platform.home.java.executable" value="${javafx.runtime}${file.separator}bin${file.separator}java"/>
+        <echo message="Warning: java executable not found in JDK, evaluating java executable in RT instead." level="info"/>
+    </target>
+    <target name="-check-platform-home-jre-java" unless="active.platform.home.java.executable">
+        <condition property="do.set.platform.home.jre.java">
+            <and>
+                <not><isset property="active.platform.home.java.executable"/></not>
+                <or>
+                    <available file="${java.home}${file.separator}bin${file.separator}java"/>
+                    <available file="${java.home}${file.separator}bin${file.separator}java.exe"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-platform-home-jre-java" depends="-set-platform-home-fxrt-java,-check-platform-home-jre-java" if="do.set.platform.home.jre.java">
+        <property name="active.platform.home.java.executable" value="${java.home}${file.separator}bin${file.separator}java"/>
+        <echo message="Warning: java executable not found in JDK, evaluating java executable in RT instead." level="info"/>
+    </target>
+    <target name="-check-platform-home" depends="-set-platform-home-jre-java">
+        <echo message="active.platform.home.java.executable = ${active.platform.home.java.executable}" level="verbose"/>
+        <fail message="Error:${line.separator}java executable not found !" unless="active.platform.home.java.executable"/>
+    </target>
+        
+    <target name="-check-jdk-version" depends="-do-init,-check-platform-home" unless="jdk-version-checked-in-jfximpl">
+        <local name="version-output"/>
+        <exec executable="${active.platform.home.java.executable}" outputproperty="version-output">
+            <arg value="-version"/>
+        </exec>
+        <echo message="version-output:${line.separator}${version-output}" level="verbose"/>
+        <condition property="have-jdk-older-than-1.6">
+            <or>
+                <contains string="${version-output}" substring="java version &quot;1.0"/>
+                <contains string="${version-output}" substring="java version &quot;1.1"/>
+                <contains string="${version-output}" substring="java version &quot;1.2"/>
+                <contains string="${version-output}" substring="java version &quot;1.3"/>
+                <contains string="${version-output}" substring="java version &quot;1.4"/>
+                <contains string="${version-output}" substring="java version &quot;1.5"/>
+            </or>
+        </condition>
+        <fail message="Error:${line.separator}JavaFX 2.0+ projects require JDK version 1.6+ !" if="have-jdk-older-than-1.6"/>
+        <condition property="have-jdk-7u4or5-mac">
+            <and>
+                <or>
+                    <contains string="${version-output}" substring="java version &quot;1.7.0_04"/>
+                    <contains string="${version-output}" substring="java version &quot;1.7.0_05"/>
+                </or>
+                <os family="mac"/>
+            </and>
+        </condition>
+        <condition property="have-jdk-pre7u6">
+            <or>
+                <isset property="have-jdk-older-than-1.6"/>
+                <contains string="${version-output}" substring="java version &quot;1.6"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0&quot;"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_01"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_02"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_03"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_04"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_05"/>
+            </or>
+        </condition>
+        <condition property="have-jdk-pre7u14">
+            <or>
+                <isset property="have-jdk-pre7u6"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_06"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_07"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_08"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_09"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_10"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_11"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_12"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_13"/>
+            </or>
+        </condition>
+        <property name="jdk-version-checked-in-jfximpl" value="true"/>
+        <echo message="have-jdk-7u4or5-mac = ${have-jdk-7u4or5-mac}" level="verbose"/>
+        <echo message="have-jdk-pre7u6 = ${have-jdk-pre7u6}" level="verbose"/>
+        <echo message="have-jdk-pre7u14 = ${have-jdk-pre7u14}" level="verbose"/>
+    </target>
+        
+    <target name="-check-ant-jre-version" unless="ant-jre-version-checked-in-jfximpl">
+        <local name="version-output"/>
+        <exec executable="${java.home}${file.separator}bin${file.separator}java" outputproperty="version-output">
+            <arg value="-version"/>
+        </exec>
+        <echo message="version-output:${line.separator}${version-output}" level="verbose"/>
+        <condition property="have-ant-jre-pre7u6">
+            <or>
+                <contains string="${version-output}" substring="java version &quot;1.0"/>
+                <contains string="${version-output}" substring="java version &quot;1.1"/>
+                <contains string="${version-output}" substring="java version &quot;1.2"/>
+                <contains string="${version-output}" substring="java version &quot;1.3"/>
+                <contains string="${version-output}" substring="java version &quot;1.4"/>
+                <contains string="${version-output}" substring="java version &quot;1.5"/>
+                <contains string="${version-output}" substring="java version &quot;1.6"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0&quot;"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_01"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_02"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_03"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_04"/>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_05"/>
+            </or>
+        </condition>
+        <condition property="have-jdk7-css2bin-bug">
+            <!-- as of NB7.4 release date the external css-to-bss converter is unreliable in all JDK7 versions before 7u40 (with exception of 7u14)-->
+            <and>
+                <contains string="${version-output}" substring="java version &quot;1.7"/>
+                <not><matches string="${version-output}" pattern="\bjava version &quot;1\.7\.0_(14|[4-9].)"/></not>
+            </and>
+        </condition>
+        <property name="ant-jre-version-checked-in-jfximpl" value="true"/>
+        <echo message="have-ant-jre-pre7u6 = ${have-ant-jre-pre7u6}" level="verbose"/>
+        <echo message="have-jdk7-css2bin-bug = ${have-jdk7-css2bin-bug}" level="verbose"/>
+    </target>
+
+    <target name="-check-jdk-7u4or5-mac" depends="-check-jdk-version" if="have-jdk-7u4or5-mac">
+        <fail message="Error:${line.separator}JDK 7u4 Mac and 7u5 Mac do not support WebStart and JavaFX 2.0+ browser plugin technologies.${line.separator}Please upgrade to JDK 7u6 or later."/>
+    </target>
+
+    
+    <!-- Check availability of JavaFX SDK deployment support (ant-javafx.jar) -->
+
+    <target name="-check-endorsed-javafx-ant-classpath">
+        <condition property="endorsed-javafx-ant-classpath-available">
+            <and>
+                <isset property="endorsed.javafx.ant.classpath"/>
+                <not>
+                    <equals arg1="${endorsed.javafx.ant.classpath}" arg2=""/>
+                </not>
+            </and>
+        </condition>
+        <echo message="endorsed-javafx-ant-classpath-available = ${endorsed-javafx-ant-classpath-available}" level="verbose"/>
+    </target>
+
+    <target name="-check-property-javafx.sdk">
+        <echo message="javafx.sdk = ${javafx.sdk}" level="verbose"/>
+        <condition property="javafx.sdk.defined">
+            <and>
+                <isset property="javafx.sdk"/>
+                <not><contains string="${javafx.sdk}" substring="$${platform" casesensitive="false"/></not>
+            </and>
+        </condition>
+        <condition property="javafx.sdk.missing+default">
+            <and>
+                <equals arg1="${platform.active}" arg2="Default_JavaFX_Platform" trim="true"/>
+                <not><isset property="javafx.sdk.defined"/></not>
+            </and>
+        </condition>
+        <condition property="javafx.sdk.missing-default">
+            <and>
+                <not><equals arg1="${platform.active}" arg2="Default_JavaFX_Platform" trim="true"/></not>
+                <not><isset property="javafx.sdk.defined"/></not>
+            </and>
+        </condition>
+        <echo message="javafx.sdk.defined = ${javafx.sdk.defined}" level="verbose"/>
+        <echo message="javafx.sdk.missing+default = ${javafx.sdk.missing+default}" level="verbose"/>
+        <echo message="javafx.sdk.missing-default = ${javafx.sdk.missing-default}" level="verbose"/>
+    </target>
+
+    <target name="-check-ant-javafx-in-fxsdk-lib" depends="-check-property-javafx.sdk" if="javafx.sdk.defined">
+        <condition property="do.set.ant-javafx.in.fxsdk.lib">
+            <and>
+                <not><isset property="ant-javafx.jar.location"/></not>
+                <available file="${javafx.sdk}${file.separator}lib${file.separator}ant-javafx.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-ant-javafx-in-fxsdk-lib" depends="-check-ant-javafx-in-fxsdk-lib" if="do.set.ant-javafx.in.fxsdk.lib">
+        <property name="ant-javafx.jar.location" value="${javafx.sdk}${file.separator}lib${file.separator}ant-javafx.jar"/>
+    </target>
+    <target name="-check-ant-javafx-in-fxsdk-tools" depends="-check-property-javafx.sdk" if="javafx.sdk.defined">
+        <condition property="do.set.ant-javafx.in.fxsdk.tools">
+            <and>
+                <not><isset property="ant-javafx.jar.location"/></not>
+                <available file="${javafx.sdk}${file.separator}tools${file.separator}ant-javafx.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-ant-javafx-in-fxsdk-tools" depends="-set-ant-javafx-in-fxsdk-lib,-check-ant-javafx-in-fxsdk-tools" if="do.set.ant-javafx.in.fxsdk.tools">
+        <property name="ant-javafx.jar.location" value="${javafx.sdk}${file.separator}tools${file.separator}ant-javafx.jar"/>
+    </target>
+    <target name="-check-ant-javafx-in-platform-home-lib" if="platform.home">
+        <condition property="do.set.ant-javafx.in.platform.home.lib">
+            <and>
+                <not><isset property="ant-javafx.jar.location"/></not>
+                <available file="${platform.home}${file.separator}lib${file.separator}ant-javafx.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-ant-javafx-in-platform-home-lib" depends="-set-ant-javafx-in-fxsdk-tools,-check-ant-javafx-in-platform-home-lib" if="do.set.ant-javafx.in.platform.home.lib">
+        <property name="ant-javafx.jar.location" value="${platform.home}${file.separator}lib${file.separator}ant-javafx.jar"/>
+    </target>
+    <target name="-check-ant-javafx-in-platform-home-tools" if="platform.home">
+        <condition property="do.set.ant-javafx.in.platform.home.tools">
+            <and>
+                <not><isset property="ant-javafx.jar.location"/></not>
+                <available file="${platform.home}${file.separator}tools${file.separator}ant-javafx.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-ant-javafx-in-platform-home-tools" depends="-set-ant-javafx-in-platform-home-lib,-check-ant-javafx-in-platform-home-tools" if="do.set.ant-javafx.in.platform.home.tools">
+        <property name="ant-javafx.jar.location" value="${platform.home}${file.separator}tools${file.separator}ant-javafx.jar"/>
+    </target>
+    <target name="-check-ant-javafx-in-probjdk-lib" unless="ant-javafx.jar.location">
+        <condition property="do.set.ant-javafx.in.probjdk.lib.has_jre">
+            <available file="${java.home}${file.separator}..${file.separator}lib${file.separator}ant-javafx.jar"/>
+        </condition>
+        <condition property="do.set.ant-javafx.in.probjdk.lib.no_jre">
+            <available file="${java.home}${file.separator}lib${file.separator}ant-javafx.jar"/>
+        </condition>
+        <condition property="do.set.ant-javafx.in.probjdk.lib">
+            <and>
+                <not><isset property="ant-javafx.jar.location"/></not>
+                <or>
+                    <isset property="do.set.ant-javafx.in.probjdk.lib.has_jre"/>
+                    <isset property="do.set.ant-javafx.in.probjdk.lib.no_jre"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-ant-javafx-in-probjdk-lib" depends="-set-ant-javafx-in-platform-home-tools,-check-ant-javafx-in-probjdk-lib" if="do.set.ant-javafx.in.probjdk.lib">
+        <condition property="ant-javafx.jar.location" value="${java.home}${file.separator}..${file.separator}lib${file.separator}ant-javafx.jar" else="${java.home}${file.separator}lib${file.separator}ant-javafx.jar">
+            <isset property="do.set.ant-javafx.in.probjdk.lib.has_jre"/>
+        </condition>
+    </target>
+    <target name="-check-ant-javafx-in-probjdk-tools" unless="ant-javafx.jar.location">
+        <condition property="do.set.ant-javafx.in.probjdk.tools.has_jre">
+            <available file="${java.home}${file.separator}..${file.separator}tools${file.separator}ant-javafx.jar"/>
+        </condition>
+        <condition property="do.set.ant-javafx.in.probjdk.tools.no_jre">
+            <available file="${java.home}${file.separator}tools${file.separator}ant-javafx.jar"/>
+        </condition>
+        <condition property="do.set.ant-javafx.in.probjdk.tools">
+            <and>
+                <not><isset property="ant-javafx.jar.location"/></not>
+                <or>
+                    <isset property="do.set.ant-javafx.in.probjdk.tools.has_jre"/>
+                    <isset property="do.set.ant-javafx.in.probjdk.tools.no_jre"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-ant-javafx-in-probjdk-tools" depends="-set-ant-javafx-in-probjdk-lib,-check-ant-javafx-in-probjdk-tools" if="do.set.ant-javafx.in.probjdk.tools">
+        <condition property="ant-javafx.jar.location" value="${java.home}${file.separator}..${file.separator}tools${file.separator}ant-javafx.jar" else="${java.home}${file.separator}tools${file.separator}ant-javafx.jar">
+            <isset property="do.set.ant-javafx.in.probjdk.tools.has_jre"/>
+        </condition>
+    </target>
+    <target name="-check-ant-javafx-in-macjdk-lib" unless="ant-javafx.jar.location">
+        <condition property="do.set.ant-javafx.in.macjdk.lib">
+            <and>
+                <not><isset property="ant-javafx.jar.location"/></not>
+                <available file="${java.home}${file.separator}lib${file.separator}ant-javafx.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-ant-javafx-in-macjdk-lib" depends="-set-ant-javafx-in-probjdk-tools,-check-ant-javafx-in-macjdk-lib" if="do.set.ant-javafx.in.macjdk.lib">
+        <property name="ant-javafx.jar.location" value="${java.home}${file.separator}lib${file.separator}ant-javafx.jar"/>
+    </target>
+    <target name="-check-ant-javafx-in-envjdk-lib" unless="ant-javafx.jar.location">
+        <property environment="env"/>
+        <condition property="do.set.ant-javafx.in.envjdk.lib">
+            <and>
+                <not><isset property="ant-javafx.jar.location"/></not>
+                <available file="${env.JAVA_HOME}${file.separator}lib${file.separator}ant-javafx.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-ant-javafx-in-envjdk-lib" depends="-set-ant-javafx-in-macjdk-lib,-check-ant-javafx-in-envjdk-lib" if="do.set.ant-javafx.in.envjdk.lib">
+        <property name="ant-javafx.jar.location" value="${env.JAVA_HOME}${file.separator}lib${file.separator}ant-javafx.jar"/>
+    </target>
+    <target name="-check-ant-javafx-in-envjdk-tools" unless="ant-javafx.jar.location">
+        <property environment="env"/>
+        <condition property="do.set.ant-javafx.in.envjdk.tools">
+            <and>
+                <not><isset property="ant-javafx.jar.location"/></not>
+                <available file="${env.JAVA_HOME}${file.separator}tools${file.separator}ant-javafx.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-ant-javafx-in-envjdk-tools" depends="-set-ant-javafx-in-envjdk-lib,-check-ant-javafx-in-envjdk-tools" if="do.set.ant-javafx.in.envjdk.tools">
+        <property name="ant-javafx.jar.location" value="${env.JAVA_HOME}${file.separator}tools${file.separator}ant-javafx.jar"/>
+    </target>
+    <target name="-pre-check-ant-javafx-version" depends="-set-ant-javafx-in-envjdk-tools" unless="ant-javafx-version-already-checked-in-jfximpl">
+        <condition property="do.check.ant-javafx.version">
+            <and>
+                <isset property="ant-javafx.jar.location"/>
+                <not><isset property="ant-javafx-version-already-checked-in-jfximpl"/></not>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-endorsed-javafx-ant-classpath" depends="-check-endorsed-javafx-ant-classpath,-pre-check-ant-javafx-version" if="endorsed-javafx-ant-classpath-available">
+        <property name="javafx.ant.classpath" value="${endorsed.javafx.ant.classpath}:${ant-javafx.jar.location}"/>
+    </target>
+    <target name="-set-javafx-ant-classpath" depends="-check-endorsed-javafx-ant-classpath,-pre-check-ant-javafx-version" unless="endorsed-javafx-ant-classpath-available">
+        <property name="javafx.ant.classpath" value="${ant-javafx.jar.location}"/>
+    </target>
+    <target name="-check-ant-javafx-version" depends="-pre-check-ant-javafx-version,
+            -set-endorsed-javafx-ant-classpath,-set-javafx-ant-classpath" if="do.check.ant-javafx.version">
+        <echo message="ant-javafx.jar.location = ${ant-javafx.jar.location}" level="verbose"/>
+        <echo message="javafx.ant.classpath = ${javafx.ant.classpath}" level="verbose"/>
+        <taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
+            uri="javafx:com.sun.javafx.tools.ant"
+            classpath="${javafx.ant.classpath}"/>
+        <condition property="have-fx-ant-init">
+            <typefound name="javafx:com.sun.javafx.tools.ant:init-ant"/>
+        </condition>
+        <property name="ant-javafx-version-already-checked-in-jfximpl" value="true"/>
+        <echo message="have-fx-ant-init = ${have-fx-ant-init}" level="verbose"/>
+    </target>
+    <target name="-check-jfx-sdk-version-old" depends="-check-ant-javafx-version" unless="have-fx-ant-init">
+        <property name="javafx.ant.version" value="1.0"/>
+    </target>
+    <target name="-check-jfx-sdk-version-new" depends="-check-ant-javafx-version" if="have-fx-ant-init">
+        <fx:init-ant/>
+        <condition property="have-fx-ant-api-1.1">
+            <!-- new features from JavaFX 2.0.2 are available in API version 1.1 or later -->
+            <matches pattern="1.[1-9]" string="${javafx.ant.version}"/>
+        </condition>
+        <condition property="have-fx-ant-api-1.2">
+            <!-- new features from JavaFX 2.2 are available in API version 1.2 or later -->
+            <matches pattern="1.[2-9]" string="${javafx.ant.version}"/>
+        </condition>
+    </target>
+    <target name="-check-jfx-sdk-version" depends="-check-jfx-sdk-version-old, -check-jfx-sdk-version-new" unless="jfx.sdk.version.checked">
+        <echo message="Detected JavaFX Ant API version ${javafx.ant.version}" level="info"/>
+        <echo message="have-fx-ant-api-1.1 = ${have-fx-ant-api-1.1}" level="verbose"/>
+        <echo message="have-fx-ant-api-1.2 = ${have-fx-ant-api-1.2}" level="verbose"/>
+        <echo message="javafx.ant.classpath = ${javafx.ant.classpath}" level="verbose"/>
+        <property name="jfx.sdk.version.checked" value="true"/>
+    </target>
+
+    <target name="-check-jfx-deployment" depends="-check-jdk-version,-check-jfx-sdk-version">
+        <condition property="jfx-deployment-available">
+            <and>
+                <or>
+                    <isset property="do.set.ant-javafx.in.fxsdk.lib"/>
+                    <isset property="do.set.ant-javafx.in.fxsdk.tools"/>
+                    <isset property="do.set.ant-javafx.in.platform.home.lib"/>
+                    <isset property="do.set.ant-javafx.in.platform.home.tools"/>
+                    <isset property="do.set.ant-javafx.in.probjdk.lib"/>
+                    <isset property="do.set.ant-javafx.in.probjdk.tools"/>
+                    <isset property="do.set.ant-javafx.in.envjdk.lib"/>
+                    <isset property="do.set.ant-javafx.in.envjdk.tools"/>
+                </or>
+                <isset property="ant-javafx.jar.location"/>
+            </and>
+        </condition>
+        <condition property="jfx-deployment-missing+jdk7u6">
+            <and>
+                <not><isset property="jfx-deployment-available"/></not>
+                <not><isset property="have-jdk-pre7u6"/></not>
+            </and>
+        </condition>
+        <condition property="jfx-deployment-missing+javafx.sdk.missing+default">
+            <and>
+                <not><isset property="jfx-deployment-available"/></not>
+                <isset property="have-jdk-pre7u6"/>
+                <isset property="javafx.sdk.missing+default"/>
+            </and>
+        </condition>
+        <condition property="jfx-deployment-missing+javafx.sdk.missing-default">
+            <and>
+                <not><isset property="jfx-deployment-available"/></not>
+                <isset property="have-jdk-pre7u6"/>
+                <isset property="javafx.sdk.missing-default"/>
+            </and>
+        </condition>
+        <fail message="Error:${line.separator}JavaFX deployment library not found in active JDK.${line.separator}Please check that the JDK is correctly installed and its version is at least 7u4 on Mac or 7u6 on other systems." if="jfx-deployment-missing+jdk7u6"/>
+        <fail message="Error:${line.separator}JavaFX deployment library not found.${line.separator}JavaFX SDK path undefined. Check the definition of ${platform.active} in Java Platform Manager${line.separator}(or directly the properties platform.active and javafx.sdk in project.properties file).${line.separator}Note: If missing, the default JavaFX-enabled platform gets created automatically when creating a new JavaFX Project." if="jfx-deployment-missing+javafx.sdk.missing+default"/>
+        <fail message="Error:${line.separator}JavaFX deployment library not found.${line.separator}JavaFX SDK path undefined. Check the definition of ${platform.active} in Java Platform Manager${line.separator}(or directly the properties platform.active and javafx.sdk in project.properties file)." if="jfx-deployment-missing+javafx.sdk.missing-default"/>
+        <fail message="Error:${line.separator}JavaFX deployment library not found." unless="jfx-deployment-available"/>
+        <echo message="jfx-deployment-available = ${jfx-deployment-available}" level="verbose"/>
+    </target>
+    
+    
+    <!-- Check availability of main JavaFX runtime jar (jfxrt.jar) -->
+
+    <target name="-check-property-javafx.runtime">
+        <echo message="javafx.runtime = ${javafx.runtime}" level="verbose"/>
+        <condition property="javafx.runtime.defined">
+            <and>
+                <isset property="javafx.runtime"/>
+                <not><contains string="${javafx.runtime}" substring="$${platform" casesensitive="false"/></not>
+            </and>
+        </condition>
+        <condition property="javafx.runtime.missing+default">
+            <and>
+                <equals arg1="${platform.active}" arg2="Default_JavaFX_Platform" trim="true"/>
+                <not><isset property="javafx.runtime.defined"/></not>
+            </and>
+        </condition>
+        <condition property="javafx.runtime.missing-default">
+            <and>
+                <not><equals arg1="${platform.active}" arg2="Default_JavaFX_Platform" trim="true"/></not>
+                <not><isset property="javafx.runtime.defined"/></not>
+            </and>
+        </condition>
+        <echo message="javafx.runtime.defined = ${javafx.runtime.defined}" level="verbose"/>
+        <echo message="javafx.runtime.missing+default = ${javafx.runtime.missing+default}" level="verbose"/>
+        <echo message="javafx.runtime.missing-default = ${javafx.runtime.missing-default}" level="verbose"/>
+    </target>
+
+    <target name="-check-jfxrt-in-fxrt" depends="-check-property-javafx.runtime" if="javafx.runtime.defined">
+        <condition property="do.set.jfxrt.in.fxrt.old">
+            <and>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${javafx.runtime}${file.separator}lib${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+        <condition property="do.set.jfxrt.in.fxrt.new">
+            <and>
+                <not><isset property="do.set.jfxrt.in.fxrt.old"/></not>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${javafx.runtime}${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-jfxrt-in-fxrt-old" depends="-check-jfxrt-in-fxrt" if="do.set.jfxrt.in.fxrt.old">
+        <property name="jfxrt.jar.location" value="${javafx.runtime}${file.separator}lib${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-set-jfxrt-in-fxrt-new" depends="-set-jfxrt-in-fxrt-old,-check-jfxrt-in-fxrt" if="do.set.jfxrt.in.fxrt.new">
+        <property name="jfxrt.jar.location" value="${javafx.runtime}${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-check-jfxrt-in-fxsdk-jre" depends="-check-property-javafx.sdk" if="javafx.sdk.defined">
+        <condition property="do.set.jfxrt.in.fxsdk.jre.old">
+            <and>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${javafx.sdk}${file.separator}jre${file.separator}lib${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+        <condition property="do.set.jfxrt.in.fxsdk.jre.new">
+            <and>
+                <not><isset property="do.set.jfxrt.in.fxsdk.jre.old"/></not>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${javafx.sdk}${file.separator}jre${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-jfxrt-in-fxsdk-jre-old" depends="-set-jfxrt-in-fxrt-new,-check-jfxrt-in-fxsdk-jre" if="do.set.jfxrt.in.fxsdk.jre.old">
+        <property name="jfxrt.jar.location" value="${javafx.sdk}${file.separator}jre${file.separator}lib${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-set-jfxrt-in-fxsdk-jre-new" depends="-set-jfxrt-in-fxsdk-jre-old,-check-jfxrt-in-fxsdk-jre" if="do.set.jfxrt.in.fxsdk.jre.new">
+        <property name="jfxrt.jar.location" value="${javafx.sdk}${file.separator}jre${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-check-jfxrt-in-fxsdk-rt" depends="-check-property-javafx.sdk" if="javafx.sdk.defined">
+        <condition property="do.set.jfxrt.in.fxsdk.rt.old">
+            <and>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${javafx.sdk}${file.separator}rt${file.separator}lib${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+        <condition property="do.set.jfxrt.in.fxsdk.rt.new">
+            <and>
+                <not><isset property="do.set.jfxrt.in.fxsdk.rt.old"/></not>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${javafx.sdk}${file.separator}rt${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-jfxrt-in-fxsdk-rt-old" depends="-set-jfxrt-in-fxsdk-jre-new,-check-jfxrt-in-fxsdk-rt" if="do.set.jfxrt.in.fxsdk.rt.old">
+        <property name="jfxrt.jar.location" value="${javafx.sdk}${file.separator}rt${file.separator}lib${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-set-jfxrt-in-fxsdk-rt-new" depends="-set-jfxrt-in-fxsdk-rt-old,-check-jfxrt-in-fxsdk-rt" if="do.set.jfxrt.in.fxsdk.rt.new">
+        <property name="jfxrt.jar.location" value="${javafx.sdk}${file.separator}rt${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-check-jfxrt-in-platform-home-jre" if="platform.home">
+        <condition property="do.set.jfxrt.in.platform.home.jre.old">
+            <and>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${platform.home}${file.separator}jre${file.separator}lib${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+        <condition property="do.set.jfxrt.in.platform.home.jre.new">
+            <and>
+                <not><isset property="do.set.jfxrt.in.platform.home.jre.old"/></not>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${platform.home}${file.separator}jre${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-jfxrt-in-platform-home-jre-old" depends="-set-jfxrt-in-fxsdk-rt-new,-check-jfxrt-in-platform-home-jre" if="do.set.jfxrt.in.platform.home.jre.old">
+        <property name="jfxrt.jar.location" value="${platform.home}${file.separator}jre${file.separator}lib${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-set-jfxrt-in-platform-home-jre-new" depends="-set-jfxrt-in-platform-home-jre-old,-check-jfxrt-in-platform-home-jre" if="do.set.jfxrt.in.platform.home.jre.new">
+        <property name="jfxrt.jar.location" value="${platform.home}${file.separator}jre${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-check-jfxrt-in-platform-home-rt" if="platform.home">
+        <condition property="do.set.jfxrt.in.platform.home.rt.old">
+            <and>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${platform.home}${file.separator}rt${file.separator}lib${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+        <condition property="do.set.jfxrt.in.platform.home.rt.new">
+            <and>
+                <not><isset property="do.set.jfxrt.in.platform.home.rt.old"/></not>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${platform.home}${file.separator}rt${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-jfxrt-in-platform-home-rt-old" depends="-set-jfxrt-in-platform-home-jre-new,-check-jfxrt-in-platform-home-rt" if="do.set.jfxrt.in.platform.home.rt.old">
+        <property name="jfxrt.jar.location" value="${platform.home}${file.separator}rt${file.separator}lib${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-set-jfxrt-in-platform-home-rt-new" depends="-set-jfxrt-in-platform-home-rt-old,-check-jfxrt-in-platform-home-rt" if="do.set.jfxrt.in.platform.home.rt.new">
+        <property name="jfxrt.jar.location" value="${platform.home}${file.separator}rt${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-check-jfxrt-in-jre" unless="jfxrt.jar.location">
+        <condition property="do.set.jfxrt.in.jre.old">
+            <and>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${java.home}${file.separator}lib${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+        <condition property="do.set.jfxrt.in.jre.new">
+            <and>
+                <not><isset property="do.set.jfxrt.in.jre.old"/></not>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${java.home}${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-jfxrt-in-jre-old" depends="-set-jfxrt-in-platform-home-rt-new,-check-jfxrt-in-jre" if="do.set.jfxrt.in.jre.old">
+        <property name="jfxrt.jar.location" value="${java.home}${file.separator}lib${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-set-jfxrt-in-jre-new" depends="-set-jfxrt-in-jre-old,-check-jfxrt-in-jre" if="do.set.jfxrt.in.jre.new">
+        <property name="jfxrt.jar.location" value="${java.home}${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-check-jfxrt-in-envjdk-jre" unless="jfxrt.jar.location">
+        <property environment="env"/>
+        <condition property="do.set.jfxrt.in.envjdk.jre.old">
+            <and>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${env.JAVA_HOME}${file.separator}jre${file.separator}lib${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+        <condition property="do.set.jfxrt.in.envjdk.jre.new">
+            <and>
+                <not><isset property="do.set.jfxrt.in.envjdk.jre.old"/></not>
+                <not><isset property="jfxrt.jar.location"/></not>
+                <available file="${env.JAVA_HOME}${file.separator}jre${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-jfxrt-in-envjdk-jre-old" depends="-set-jfxrt-in-jre-new,-check-jfxrt-in-envjdk-jre" if="do.set.jfxrt.in.envjdk.jre.old">
+        <property name="jfxrt.jar.location" value="${env.JAVA_HOME}${file.separator}jre${file.separator}lib${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-set-jfxrt-in-envjdk-jre-new" depends="-set-jfxrt-in-envjdk-jre-old,-check-jfxrt-in-envjdk-jre" if="do.set.jfxrt.in.envjdk.jre.new">
+        <property name="jfxrt.jar.location" value="${env.JAVA_HOME}${file.separator}jre${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar"/>
+    </target>
+    <target name="-pre-check-jfx-runtime" depends="-set-jfxrt-in-envjdk-jre-new">
+        <echo message="jfxrt.jar.location = ${jfxrt.jar.location}" level="verbose"/>
+    </target>
+
+    <target name="-check-jfx-runtime" depends="-check-jdk-version, -pre-check-jfx-runtime">
+        <condition property="jfx-runtime-available">
+            <and>
+                <or>
+                    <isset property="do.set.jfxrt.in.fxrt.old"/>
+                    <isset property="do.set.jfxrt.in.fxrt.new"/>
+                    <isset property="do.set.jfxrt.in.fxsdk.jre.old"/>
+                    <isset property="do.set.jfxrt.in.fxsdk.jre.new"/>
+                    <isset property="do.set.jfxrt.in.fxsdk.rt.old"/>
+                    <isset property="do.set.jfxrt.in.fxsdk.rt.new"/>
+                    <isset property="do.set.jfxrt.in.platform.home.jre.old"/>
+                    <isset property="do.set.jfxrt.in.platform.home.jre.new"/>
+                    <isset property="do.set.jfxrt.in.platform.home.rt.old"/>
+                    <isset property="do.set.jfxrt.in.platform.home.rt.new"/>
+                    <isset property="do.set.jfxrt.in.jre.old"/>
+                    <isset property="do.set.jfxrt.in.jre.new"/>
+                    <isset property="do.set.jfxrt.in.envjdk.jre.old"/>
+                    <isset property="do.set.jfxrt.in.envjdk.jre.new"/>
+                </or>
+                <isset property="jfxrt.jar.location"/>
+            </and>
+        </condition>
+        <fail message="Error:${line.separator}JavaFX runtime JAR not found." unless="jfx-runtime-available"/>
+        <echo message="jfx-runtime-available = ${jfx-runtime-available}" level="verbose"/>
+    </target>
+
+
+    <!-- Check availability of WebStart executable -->
+
+    <target name="-check-webstart-in-fxrt" depends="-check-property-javafx.runtime" if="javafx.runtime.defined">
+        <condition property="do.set.webstart.in.fxrt">
+            <and>
+                <not><isset property="active.webstart.executable"/></not>
+                <isset property="javafx.runtime.defined"/>
+                <or>
+                    <available file="${javafx.runtime}${file.separator}bin${file.separator}javaws.exe"/>
+                    <available file="${javafx.runtime}${file.separator}bin${file.separator}javaws"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-webstart-in-fxrt" depends="-check-webstart-in-fxrt" if="do.set.webstart.in.fxrt">
+        <property name="active.webstart.executable" value="${javafx.runtime}${file.separator}bin${file.separator}javaws"/>
+    </target>
+    <target name="-check-webstart-in-fxsdk-jre" depends="-check-property-javafx.sdk" if="javafx.sdk.defined">
+        <condition property="do.set.webstart.in.fxsdk.jre">
+            <and>
+                <not><isset property="active.webstart.executable"/></not>
+                <isset property="javafx.sdk.defined"/>
+                <or>
+                    <available file="${javafx.sdk}${file.separator}jre${file.separator}bin${file.separator}javaws.exe"/>
+                    <available file="${javafx.sdk}${file.separator}jre${file.separator}bin${file.separator}javaws"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-webstart-in-fxsdk-jre" depends="-set-webstart-in-fxrt,-check-webstart-in-fxsdk-jre" if="do.set.webstart.in.fxsdk.jre">
+        <property name="active.webstart.executable" value="${javafx.sdk}${file.separator}jre${file.separator}bin${file.separator}javaws"/>
+    </target>
+    <target name="-check-webstart-in-fxsdk" depends="-check-property-javafx.sdk" if="javafx.sdk.defined">
+        <condition property="do.set.webstart.in.fxsdk">
+            <and>
+                <not><isset property="active.webstart.executable"/></not>
+                <isset property="javafx.sdk.defined"/>
+                <or>
+                    <available file="${javafx.sdk}${file.separator}bin${file.separator}javaws.exe"/>
+                    <available file="${javafx.sdk}${file.separator}bin${file.separator}javaws"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-webstart-in-fxsdk" depends="-set-webstart-in-fxsdk-jre,-check-webstart-in-fxsdk" if="do.set.webstart.in.fxsdk">
+        <property name="active.webstart.executable" value="${javafx.sdk}${file.separator}bin${file.separator}javaws"/>
+    </target>
+    <target name="-check-webstart-in-platform-home-jre" if="platform.home">
+        <condition property="do.set.webstart.in.platform.home.jre">
+            <and>
+                <not><isset property="active.webstart.executable"/></not>
+                <or>
+                    <available file="${platform.home}${file.separator}jre${file.separator}bin${file.separator}javaws.exe"/>
+                    <available file="${platform.home}${file.separator}jre${file.separator}bin${file.separator}javaws"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-webstart-in-platform-home-jre" depends="-set-webstart-in-fxsdk,-check-webstart-in-platform-home-jre" if="do.set.webstart.in.platform.home.jre">
+        <property name="active.webstart.executable" value="${platform.home}${file.separator}jre${file.separator}bin${file.separator}javaws"/>
+    </target>
+    <target name="-check-webstart-in-platform-home" if="platform.home">
+        <condition property="do.set.webstart.in.platform.home">
+            <and>
+                <not><isset property="active.webstart.executable"/></not>
+                <or>
+                    <available file="${platform.home}${file.separator}bin${file.separator}javaws.exe"/>
+                    <available file="${platform.home}${file.separator}bin${file.separator}javaws"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-webstart-in-platform-home" depends="-set-webstart-in-platform-home-jre,-check-webstart-in-platform-home" if="do.set.webstart.in.platform.home">
+        <property name="active.webstart.executable" value="${platform.home}${file.separator}bin${file.separator}javaws"/>
+    </target>
+    <target name="-check-webstart-in-jre" unless="active.webstart.executable">
+        <condition property="do.set.webstart.in.jre">
+            <and>
+                <not><isset property="active.webstart.executable"/></not>
+                <or>
+                    <available file="${java.home}${file.separator}bin${file.separator}javaws.exe"/>
+                    <available file="${java.home}${file.separator}bin${file.separator}javaws"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-webstart-in-jre" depends="-set-webstart-in-platform-home,-check-webstart-in-jre" if="do.set.webstart.in.jre">
+        <property name="active.webstart.executable" value="${java.home}${file.separator}bin${file.separator}javaws"/>
+    </target>
+    <target name="-check-webstart-in-probjdk" unless="active.webstart.executable">
+        <condition property="do.set.webstart.in.probjdk">
+            <and>
+                <not><isset property="active.webstart.executable"/></not>
+                <or>
+                    <available file="${java.home}${file.separator}..${file.separator}bin${file.separator}javaws.exe"/>
+                    <available file="${java.home}${file.separator}..${file.separator}bin${file.separator}javaws"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-webstart-in-probjdk" depends="-set-webstart-in-jre,-check-webstart-in-probjdk" if="do.set.webstart.in.probjdk">
+        <property name="active.webstart.executable" value="${java.home}${file.separator}..${file.separator}bin${file.separator}javaws"/>
+    </target>
+    <target name="-check-webstart-in-envjdk" unless="active.webstart.executable">
+        <property environment="env"/>
+        <condition property="do.set.webstart.in.envjdk">
+            <and>
+                <not><isset property="active.webstart.executable"/></not>
+                <or>
+                    <available file="${env.JAVA_HOME}${file.separator}bin${file.separator}javaws.exe"/>
+                    <available file="${env.JAVA_HOME}${file.separator}bin${file.separator}javaws"/>
+                </or>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-webstart-in-envjdk" depends="-set-webstart-in-probjdk,-check-webstart-in-envjdk" if="do.set.webstart.in.envjdk">
+        <property name="active.webstart.executable" value="${env.JAVA_HOME}${file.separator}bin${file.separator}javaws"/>
+    </target>
+    <target name="-pre-check-webstart-in-unix" depends="-check-operating-system,-set-webstart-in-envjdk" unless="active.webstart.executable">
+        <condition property="running.on.unix-active.webstart.executable">
+            <and>
+                <not><isset property="active.webstart.executable"/></not>
+                <isset property="running.on.unix"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-check-webstart-in-unix" depends="-pre-check-webstart-in-unix" if="running.on.unix-active.webstart.executable">
+        <local name="exec.which.javaws.result"/>
+        <exec executable="command" failifexecutionfails="false" failonerror="false" resultproperty="exec.which.javaws.result" outputproperty="exec.which.javaws.output">
+            <arg line="-v javaws"/>
+        </exec>
+        <condition property="do.set.webstart.in.unix">
+            <and>
+                <not><isset property="active.webstart.executable"/></not>
+                <isset property="exec.which.javaws.result"/>
+                <equals arg1="${exec.which.javaws.result}" arg2="0"/>
+                <isset property="exec.which.javaws.output"/>
+                <not><equals arg1="${exec.which.javaws.output}" arg2=""/></not>
+            </and>
+        </condition>
+        <echo message="do.set.webstart.in.unix = ${do.set.webstart.in.unix}" level="verbose"/>
+    </target>
+    <target name="-set-webstart-in-unix" depends="-set-webstart-in-envjdk,-check-webstart-in-unix" if="do.set.webstart.in.unix">
+        <property name="active.webstart.executable" value="${exec.which.javaws.output}"/>
+    </target>
+    <target name="-pre-check-jfx-webstart" depends="-set-webstart-in-unix">
+        <echo message="active.webstart.executable = ${active.webstart.executable}" level="verbose"/>
+    </target>
+
+    <target name="-check-jfx-webstart" depends="-pre-check-jfx-webstart">
+        <condition property="jfx-webstart-available">
+            <and>
+                <or>
+                    <isset property="do.set.webstart.in.fxrt"/>
+                    <isset property="do.set.webstart.in.fxsdk.jre"/>
+                    <isset property="do.set.webstart.in.fxsdk"/>
+                    <isset property="do.set.webstart.in.platform.home.jre"/>
+                    <isset property="do.set.webstart.in.platform.home"/>
+                    <isset property="do.set.webstart.in.jre"/>
+                    <isset property="do.set.webstart.in.probjdk"/>
+                    <isset property="do.set.webstart.in.envjdk"/>
+                    <isset property="do.set.webstart.in.unix"/>
+                </or>
+                <isset property="active.webstart.executable"/>
+            </and>
+        </condition>
+        <condition property="jfx-webstart-missing+jdk7u6">
+            <and>
+                <not><isset property="jfx-webstart-available"/></not>
+                <not><isset property="have-jdk-pre7u6"/></not>
+            </and>
+        </condition>
+        <condition property="jfx-webstart-missing+javafx.runtime.missing+default">
+            <and>
+                <not><isset property="jfx-webstart-available"/></not>
+                <isset property="have-jdk-pre7u6"/>
+                <isset property="javafx.runtime.missing+default"/>
+            </and>
+        </condition>
+        <condition property="jfx-webstart-missing+javafx.runtime.missing-default">
+            <and>
+                <not><isset property="jfx-webstart-available"/></not>
+                <isset property="have-jdk-pre7u6"/>
+                <isset property="javafx.runtime.missing-default"/>
+            </and>
+        </condition>
+        <fail message="Error:${line.separator}WebStart executable could not be found in active JDK.${line.separator}Please check that the JDK is correctly installed and its version is at least 7u6." if="jfx-webstart-missing+jdk7u6"/>
+        <fail message="Error:${line.separator}WebStart executable could not be found.${line.separator}JavaFX RT path undefined. Check the definition of ${platform.active} in Java Platform Manager${line.separator}(or directly the properties platform.active and javafx.runtime in project.properties file).${line.separator}Note: If missing, the default JavaFX-enabled platform gets created automatically when creating a new JavaFX Project." if="jfx-webstart-missing+javafx.runtime.missing+default"/>
+        <fail message="Error:${line.separator}WebStart executable could not be found.${line.separator}JavaFX RT path undefined. Check the definition of ${platform.active} in Java Platform Manager${line.separator}(or directly the properties platform.active and javafx.runtime in project.properties file)." if="jfx-webstart-missing+javafx.runtime.missing-default"/>
+        <fail message="Error:${line.separator}WebStart executable could not be found." unless="jfx-webstart-available"/>
+        <echo message="jfx-webstart-available = ${jfx-webstart-available}" level="verbose"/>
+    </target>
+
+    
+    <!-- Legacy targets kept for compatibility with older build-impl.xml scripts -->
+
+    <!-- Note: target "-check-javafx" is not necessary any more but is referenced from NB 7.1 build-impl.xml -->
+    <target name="-check-javafx"/>
+    <!-- Note: target "-javafx-check-error" is not necessary any more but is referenced from NB 7.1 build-impl.xml -->
+    <target name="-javafx-check-error"/>    
+    <!-- Note: target "-init-javafx" is not necessary any more but is referenced from NB 7.1 build-impl.xml -->
+    <target name="-init-javafx"/>
+
+    
+    <!-- Check project properties -->
+    
+    <target name="-check-default-run-config" unless="config">
+        <property name="config" value="&lt;default config&gt;"/>
+    </target>
+    
+    <target name="-check-project">
+        <condition property="main-class-available">
+            <isset property="javafx.main.class"/>
+        </condition>
+        <condition property="vmargs-available">
+            <and>
+                <isset property="run.jvmargs"/>
+                <not><equals arg1="${run.jvmargs}" arg2=""/></not>
+            </and>
+        </condition>
+        <condition property="preloader-available">
+            <and>
+                <isset property="javafx.preloader.enabled"/>
+                <equals arg1="${javafx.preloader.enabled}" arg2="true"/>
+                <isset property="javafx.preloader.class"/>
+                <not><equals arg1="${javafx.preloader.class}" arg2=""/></not>
+                <isset property="javafx.preloader.jar.filename"/>
+                <not><equals arg1="${javafx.preloader.jar.filename}" arg2=""/></not>
+            </and>
+        </condition>
+        <condition property="app-with-preloader">
+            <and>
+                <istrue value="${preloader-available}"/>
+                <istrue value="${main-class-available}"/>
+            </and>
+        </condition>
+        <condition property="app-with-external-preloader-jar">
+            <and>
+                <isset property="app-with-preloader"/>
+                <isset property="javafx.preloader.type"/>
+                <equals arg1="${javafx.preloader.type}" arg2="jar" trim="true"/>
+            </and>
+        </condition>
+        <condition property="app-without-preloader">
+            <and>
+                <not>
+                    <istrue value="${preloader-available}"/>
+                </not>
+                <istrue value="${main-class-available}"/>
+            </and>
+        </condition>
+        <condition property="preloader-app">
+            <and>
+                <isset property="javafx.preloader"/>
+                <equals arg1="${javafx.preloader}" arg2="true"/>
+            </and>
+        </condition>
+        <condition property="fx-in-swing-app">
+            <and>
+                <isset property="javafx.swing"/>
+                <equals arg1="${javafx.swing}" arg2="true"/>
+            </and>
+        </condition>
+        <condition property="fx-in-swing-workaround-app">
+            <and>
+                <istrue value="${fx-in-swing-app}"/>
+                <istrue value="${preloader-app}"/>
+            </and>
+        </condition>
+        <condition property="preloader-app-no-workaround">
+            <and>
+                <istrue value="${preloader-app}"/>
+                <not><istrue value="${fx-in-swing-app}"/></not>
+            </and>
+        </condition>
+        <condition property="html-template-available">
+            <and>
+                <isset property="javafx.run.htmltemplate"/>
+                <not>
+                    <equals arg1="${javafx.run.htmltemplate}" arg2=""/>
+                </not>
+            </and>
+        </condition>
+        <condition property="icon-available">
+            <and>
+                <isset property="javafx.deploy.icon"/>
+                <not>
+                    <equals arg1="${javafx.deploy.icon}" arg2=""/>
+                </not>
+            </and>
+        </condition>
+        <condition property="dimensions-available">
+            <and>
+                <isset property="javafx.run.width"/>
+                <isset property="javafx.run.height"/>
+                <not><equals arg1="${javafx.run.width}" arg2=""/></not>
+                <not><equals arg1="${javafx.run.height}" arg2=""/></not>
+            </and>
+        </condition>
+        <condition property="update-mode-background">
+            <and>
+                <isset property="javafx.deploy.backgroundupdate"/>
+                <equals arg1="${javafx.deploy.backgroundupdate}" arg2="true" trim="true"/>
+            </and>
+        </condition>
+        <condition property="offline-allowed">
+            <and>
+                <isset property="javafx.deploy.allowoffline"/>
+                <equals arg1="${javafx.deploy.allowoffline}" arg2="true" trim="true"/>
+            </and>
+        </condition>
+        <condition property="permissions-elevated">
+            <and>
+                <isset property="javafx.deploy.permissionselevated"/>
+                <equals arg1="${javafx.deploy.permissionselevated}" arg2="true" trim="true"/>
+            </and>
+        </condition>
+        <condition property="binary-encode-css">
+            <and>
+                <isset property="javafx.binarycss"/>
+                <equals arg1="${javafx.binarycss}" arg2="true" trim="true"/>
+            </and>
+        </condition>
+        <condition property="rebase-lib-jars">
+            <and>
+                <isset property="javafx.rebase.libs"/>
+                <equals arg1="${javafx.rebase.libs}" arg2="true" trim="true"/>
+            </and>
+        </condition>
+        <condition property="use-blob-signing">
+            <and>
+                <isset property="javafx.signing.blob"/>
+                <equals arg1="${javafx.signing.blob}" arg2="true" trim="true"/>
+            </and>
+        </condition>
+        <echo message="main-class-available = ${main-class-available}" level="verbose"/>
+        <echo message="vmargs-available = ${vmargs-available}" level="verbose"/>
+        <echo message="preloader-available = ${preloader-available}" level="verbose"/>
+        <echo message="app-with-preloader = ${app-with-preloader}" level="verbose"/>
+        <echo message="app-with-preloader-without-project = ${app-with-preloader-without-project}" level="verbose"/>
+        <echo message="app-without-preloader = ${app-without-preloader}" level="verbose"/>
+        <echo message="preloader-app = ${preloader-app}" level="verbose"/>
+        <echo message="fx-in-swing-app = ${fx-in-swing-app}" level="verbose"/>
+        <echo message="fx-in-swing-workaround-app = ${fx-in-swing-workaround-app}" level="verbose"/>
+        <echo message="preloader-app-no-workaround = ${preloader-app-no-workaround}" level="verbose"/>
+        <echo message="html-template-available = ${html-template-available}" level="verbose"/>
+        <echo message="icon-available = ${icon-available}" level="verbose"/>
+        <echo message="dimensions-available = ${dimensions-available}" level="verbose"/>
+        <echo message="update-mode-background = ${update-mode-background}" level="verbose"/>
+        <echo message="offline-allowed = ${offline-allowed}" level="verbose"/>
+        <echo message="permissions-elevated = ${permissions-elevated}" level="verbose"/>
+        <echo message="binary-encode-css = ${binary-encode-css}" level="verbose"/>
+        <echo message="rebase-lib-jars = ${rebase-lib-jars}" level="verbose"/>
+        <echo message="use-blob-signing = ${use-blob-signing}" level="verbose"/>
+    </target>
+
+    <target name="-swing-api-check" depends="-check-project,-check-jfx-deployment" if="fx-in-swing-app">
+        <condition property="fx-in-swing-app-workaround">
+            <and>
+                <isset property="fx-in-swing-app"/>
+                <not><isset property="have-fx-ant-api-1.2"/></not>
+            </and>
+        </condition>
+    </target>
+    <target name="-swing-api-warning" depends="-swing-api-check" if="fx-in-swing-app-workaround">
+        <echo message="Info: No support for FX-in-Swing deployment detected in current JavaFX SDK. Using workaround instead."/>
+    </target>
+
+    <target name="-icon-deployment-check" depends="-check-project,-check-jfx-deployment" if="icon-available">
+        <condition property="icon-deployment-may-not-be-supported">
+            <and>
+                <isset property="icon-available"/>
+                <not><isset property="have-fx-ant-api-1.1"/></not>
+            </and>
+        </condition>
+    </target>
+    <target name="-icon-warning" depends="-icon-deployment-check" if="icon-deployment-may-not-be-supported">
+        <echo message="Warning: Note that due to a bug in early JavaFX 2.0 SDK distributions the icon may not be properly set in deployment files."/>
+    </target>
+
+    <target name="-set-dimensions" depends="-check-project" if="dimensions-available">
+        <property name="javafx.width" value="${javafx.run.width}"/>
+        <property name="javafx.height" value="${javafx.run.height}"/>
+    </target>
+    <target name="-reset-dimensions" depends="-check-project" unless="dimensions-available">
+        <property name="javafx.width" value="800"/>
+        <property name="javafx.height" value="600"/>
+    </target>
+
+    <target name="-set-update-mode-background" depends="-check-project" if="update-mode-background">
+        <property name="update-mode" value="background"/>
+    </target>
+    <target name="-set-update-mode-eager" depends="-check-project" unless="update-mode-background">
+        <property name="update-mode" value="eager"/>
+    </target>
+
+    <target name="-set-permissions-elevated" depends="-check-project" if="permissions-elevated">
+        <property name="permissions.elevated" value="true"/>
+    </target>
+    <target name="-reset-permissions-elevated" depends="-check-project" unless="permissions-elevated">
+        <property name="permissions.elevated" value="false"/>
+    </target>
+
+    <target name="-set-binary-css" depends="-check-project,-init-css-conversion" if="do.copy.binary.css">
+        <property name="css-include-ext" value="bss"/>
+        <property name="css-exclude-ext" value="css"/>
+    </target>
+    <target name="-unset-binary-css" depends="-check-project,-init-css-conversion" unless="do.copy.binary.css">
+        <property name="css-include-ext" value="css"/>
+        <property name="css-exclude-ext" value="bss"/>
+    </target>
+    <target name="-copy-binary-css" depends="-init-css-conversion,-set-binary-css,-unset-binary-css,-copy-binary-css-bypass,-copy-binary-css-impl"/>
+    <target name="-init-css-conversion" depends="-check-project,-check-ant-jre-version">
+        <fileset id="cssfiles" dir="${basedir}${file.separator}${build.classes.dir}">
+            <include name="**${file.separator}*.css"/>
+        </fileset>
+        <pathconvert refid="cssfiles" property="cssfileset.notempty" setonempty="false"/>
+        <condition property="do.copy.binary.css">
+            <and>
+                <isset property="binary-encode-css"/>
+                <isset property="cssfileset.notempty"/>
+                <not><isset property="have-jdk7-css2bin-bug"/></not>
+            </and>
+        </condition>
+        <condition property="do.bypass.binary.css">
+            <and>
+                <isset property="binary-encode-css"/>
+                <isset property="cssfileset.notempty"/>
+                <isset property="have-jdk7-css2bin-bug"/>
+            </and>
+        </condition>
+        <echo message="do.copy.binary.css = ${do.copy.binary.css}" level="verbose"/>
+        <echo message="do.bypass.binary.css = ${do.bypass.binary.css}" level="verbose"/>
+    </target>
+    <target name="-copy-binary-css-bypass" depends="-init-css-conversion" if="do.bypass.binary.css">
+        <echo message="Warning: Bypassing FX CSS to BSS conversion due to a bug in &lt;fx:csstobin&gt; task in current JDK platform" level="warning"/>
+    </target>
+    <target name="-copy-binary-css-impl" depends="-init-css-conversion" if="do.copy.binary.css">
+        <property name="cssfileslist" refid="cssfiles"/>
+        <echo message="css files to binary convert: " level="verbose">${cssfileslist}</echo>
+        <fx:csstobin outdir="${basedir}${file.separator}${build.classes.dir}">
+            <fileset refid="cssfiles"/>
+        </fx:csstobin>
+    </target>
+
+
+    <!-- Copy dependent libraries -->
+    
+    <!-- Note: target "-jfx-copylibs" is referenced from NB 7.1 build-impl.xml -->
+    <target name="-jfx-copylibs" depends="init,compile,-pre-pre-jar,-pre-jar,-jfx-copylibs-warning" unless="fallback.no.javascript">
+        <jfx-copylibs-js-impl/>
+    </target>
+    <target name="-jfx-copylibs-warning" if="fallback.no.javascript">
+        <echo message="Warning: Dependent Libraries copy (-jfx-copylibs) skipped in fallback build mode due to JDK missing JavaScript support."/>
+    </target>
+    <macrodef name="jfx-copylibs-js-impl">
+        <sequential>
+            <local name="run.classpath.without.build.classes.and.dist.dir"/>
+            <pathconvert property="run.classpath.without.build.classes.and.dist.dir">
+                <path path="${run.classpath}"/>
+                <map from="${basedir}${file.separator}${build.classes.dir}" to=""/>
+                <map from="${basedir}${file.separator}${dist.jar}" to=""/>
+                <scriptmapper language="javascript">
+                    self.addMappedName(
+                        (source.indexOf("jfxrt.jar") >= 0) ||
+                        (source.indexOf("deploy.jar") >= 0) ||
+                        (source.indexOf("javaws.jar") >= 0) ||
+                        (source.indexOf("plugin.jar") >= 0)
+                        ? "" : source
+                    );
+                </scriptmapper>
+            </pathconvert>
+            <!-- add possibly missing dependencies at distance 2 (build system logic thus provides transitive closure) -->
+            <local name="run.and.lib.classpath"/>
+            <echo message="JavaScript: -jfx-copylibs" level="verbose"/>
+            <script language="javascript">
+                <![CDATA[
+                    function prefix(s, len) {
+                        if(s == null || len <= 0 || s.length == 0) {
+                            return new String("");
+                        }
+                        return new String(s.substr(0, len));
+                    }
+                    function defined(s) {
+                        return (s != null) && (s != "null") && (s.length > 0);
+                    }
+                    var pathConvert = project.createTask("pathconvert");
+                    pathConvert.setProperty("run.and.lib.classpath");
+                    var classPath = new String(project.getProperty("run.classpath.without.build.classes.and.dist.dir"));
+                    var fileSeparator = new String(project.getProperty("file.separator"));
+                    if(defined(classPath)) {
+                        var classPathCopy = pathConvert.createPath();
+                        classPathCopy.setPath(classPath);
+                        var pathArray;
+                        if(classPath.indexOf(";") != -1) {
+                            pathArray = classPath.split(";");
+                        } else {
+                            pathArray = classPath.split(":");
+                        }
+                        var added = new java.lang.StringBuilder();
+                        for (var i = 0; i < pathArray.length; i++) {
+                            var index = pathArray[i].lastIndexOf(fileSeparator);
+                            if (index >= 0) {
+                                var onePath = prefix(pathArray[i], index+1).concat("lib");
+                                var oneDir = new java.io.File(onePath);
+                                if(oneDir.exists()) {
+                                    var fs = project.createDataType( "fileset" );
+                                    fs.setDir( oneDir );
+                                    fs.setIncludes("*.jar");
+                                    var ds = fs.getDirectoryScanner(project);
+                                    var srcFiles = ds.getIncludedFiles();
+                                    for (var j = 0; j < srcFiles.length; j++) {
+                                        if(classPath.indexOf( srcFiles[j] ) == -1 && added.indexOf( srcFiles[j] ) == -1) {
+                                            var path = pathConvert.createPath();
+                                            path.setPath( onePath.concat(fileSeparator).concat(srcFiles[j]) );
+                                            added.append( srcFiles[j] );
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    pathConvert.perform();
+                ]]>
+            </script>
+            <echo message="run.and.lib.classpath = ${run.and.lib.classpath}" level="verbose"/>
+            <delete dir="${dist.dir}${file.separator}lib" includeEmptyDirs="true" quiet="true"/>
+            <copy todir="${dist.dir}${file.separator}lib" flatten="true" preservelastmodified="true" overwrite="true">
+                <path>
+                    <pathelement path="${run.and.lib.classpath}"/>
+                </path>
+            </copy>
+        </sequential>
+    </macrodef>
+    
+    <target name="-copy-external-preloader-jar" depends="-check-project" if="app-with-external-preloader-jar">
+        <copy file="${javafx.preloader.jar.path}" todir="${dist.dir}${file.separator}lib"/>
+    </target>
+
+
+    <!-- Optional classpath re-base of dependent JAR manifests after copy to lib/, required by GlassFish -->
+
+    <!-- Note: target "-rebase-libs" is referenced from NB 7.1 build-impl.xml -->
+    <target name="-rebase-libs" depends="-check-project, -jfx-copylibs, -check-rebase-libs, -rebase-libs-warning" if="do-rebase-lib-jars">
+        <rebase-libs-js-impl/>
+    </target>
+    <target name="-check-rebase-libs">
+        <condition property="do-rebase-lib-jars">
+            <and>
+                <isset property="rebase-lib-jars"/>
+                <not><isset property="fallback.no.javascript"/></not>
+            </and>
+        </condition>
+        <condition property="do-skip-rebase-libs">
+            <and>
+                <isset property="rebase-lib-jars"/>
+                <isset property="fallback.no.javascript"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-rebase-libs-warning" depends="-check-rebase-libs" if="do-skip-rebase-libs">
+        <echo message="Warning: Dependent Libraries JARs rebase (-rebase-libs) skipped in fallback build mode due to JDK missing JavaScript support."/>
+    </target>
+
+    <macrodef name="rebase-libs-js-impl">
+        <sequential>
+            <property name="pp_rebase_dir" value="${basedir}${file.separator}${dist.dir}${file.separator}lib"/>
+            <property name="pp_rebase_fs" value="*.jar"/>
+            <echo message="JavaScript: -rebase-libs-js-impl" level="verbose"/>
+            <script language="javascript">
+                <![CDATA[
+                    var dir = new String(project.getProperty("pp_rebase_dir"));
+                    var fDir = new java.io.File(dir);
+                    if( fDir.exists() ) {
+                        var callTask = project.createTask("antcall");
+                        callTask.setTarget("-rebase-libs-macro-call");
+                        var param = callTask.createParam();
+                        param.setName("jar.file.to.rebase");
+                        var includes = new String(project.getProperty("pp_rebase_fs"));
+                        var fs = project.createDataType("fileset");
+                        fs.setDir( fDir );
+                        fs.setIncludes(includes);
+                        var ds = fs.getDirectoryScanner(project);
+                        var srcFiles = ds.getIncludedFiles();
+                        for (var i = 0; i < srcFiles.length; i++) {
+                            param.setValue(dir.concat("${file.separator}").concat(srcFiles[i]));
+                            callTask.perform();
+                        }
+                    }
+                ]]>
+            </script>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="rebase-lib">
+        <attribute name="jarfile"/>
+        <sequential>
+            <local name="tmpdir"/>
+            <property name="tmpdir" value="${java.io.tmpdir}${file.separator}${user.name}_${ant.project.name}_rebase" />
+            <echo message="tmpdir = ${tmpdir}" level="verbose"/>
+            <delete dir="${tmpdir}" quiet="true"/>
+            <mkdir dir="${tmpdir}"/>
+            <unzip src="@{jarfile}" dest="${tmpdir}">
+                <patternset>
+                    <include name="META-INF${file.separator}MANIFEST.MF"/>
+                </patternset>
+            </unzip>
+            <local name="manifest.file.temp"/>
+            <property name="manifest.file.temp" value="${tmpdir}${file.separator}META-INF${file.separator}MANIFEST.MF" />
+            <echo message="manifest.file.temp = ${manifest.file.temp}" level="verbose"/>
+            <!-- edited manifest file -->
+            <local name="manifest.file.temp.new"/>
+            <property name="manifest.file.temp.new" value="${manifest.file.temp}_new" />
+            <echo message="manifest.file.temp.new = ${manifest.file.temp.new}" level="verbose"/>
+            <echo message="JavaScript: rebase-lib" level="verbose"/>
+            <script language="javascript">
+                <![CDATA[
+                    var UTF_8 = "UTF-8";
+                    var ATTR_CLASS_PATH = "Class-Path";
+                    var ATTR_CLASS_PATH_FX = "JavaFX-Class-Path";
+                    function endsWith(s, suffix) {
+                        var i = s.lastIndexOf(suffix);
+                        return  (i != -1) && (i == (s.length - suffix.length));
+                    }
+                    function isSigned(manifest) {        
+                        var sections = manifest.getSectionNames();
+                        while(sections.hasMoreElements()) {
+                            var sectionname = new String(sections.nextElement());
+                            var section = manifest.getSection(sectionname);
+                            if(section != null) {
+                                var sectionKeys = section.getAttributeKeys();
+                                while (sectionKeys.hasMoreElements()) {
+                                    var element = new String(sectionKeys.nextElement());
+                                    if (endsWith(element, "-Digest") || endsWith(element, "-digest")) {
+                                        return true;
+                                    }
+                                }
+                            }
+                        }
+                        return false;
+                    }
+                    var src = new String(project.getProperty("manifest.file.temp"));
+                    var srf = new java.io.File(src);
+                    var manifest;
+                    try {
+                        var fis = new java.io.FileInputStream(srf);
+                        try {
+                            var isr = new java.io.InputStreamReader(fis, UTF_8);
+                            try {
+                                manifest = new org.apache.tools.ant.taskdefs.Manifest(isr);
+                            } finally {
+                                isr.close();
+                            }
+                        } finally {
+                            fis.close();
+                        }
+                    } catch(e) {
+                        manifest = null;
+                    }
+                    if(manifest != null) {
+                        if(isSigned(manifest)) {
+                            print("Warning: Signed JAR can not be rebased.");
+                        } else {
+                            var mainSection = manifest.getMainSection();
+                            var classPath = mainSection.getAttributeValue(ATTR_CLASS_PATH);
+                            var classPathAttr = null;
+                            if (classPath != null) {
+                                classPathAttr = ATTR_CLASS_PATH;
+                            } else {
+                                classPath = mainSection.getAttributeValue(ATTR_CLASS_PATH_FX);
+                                if(classPath != null) {
+                                    classPathAttr = ATTR_CLASS_PATH_FX;
+                                }
+                            }
+                            if(classPath != null) {
+                                var result = new java.lang.StringBuilder();
+                                var changed = false;
+                                var pathArray = classPath.split(" ");
+                                for (var i = 0; i < pathArray.length; i++) {
+                                    if (result.length() > 0) {
+                                        result.append(' ');
+                                    }
+                                    var index = pathArray[i].lastIndexOf('/');
+                                    if (index >= 0 && index < pathArray[i].length - 1) {
+                                        pathArray[i] = pathArray[i].substring(index+1);
+                                        changed = true;
+                                    }
+                                    result.append(pathArray[i]);
+                                }
+                                mainSection.removeAttribute(classPathAttr);
+                                mainSection.addAttributeAndCheck(new org.apache.tools.ant.taskdefs.Manifest.Attribute(classPathAttr, result.toString()));
+                                var tgt = new String(project.getProperty("manifest.file.temp.new"));
+                                var tgf = new java.io.File(tgt);
+                                try {
+                                    var fos = new java.io.FileOutputStream(tgf);
+                                    try {
+                                        var osw = new java.io.OutputStreamWriter(fos, UTF_8);
+                                        try {
+                                            var manifestOut = new java.io.PrintWriter(osw);
+                                            manifest.write(manifestOut);
+                                            manifestOut.close();
+                                        } finally {
+                                            osw.close();
+                                        }
+                                    } finally {
+                                        fos.close();
+                                    }
+                                } catch(e) {
+                                    print("Warning: problem storing rebased manifest file.");
+                                }
+                            }
+                        }
+                    }
+                ]]>
+            </script>
+            <antcall target="-move-new-manifest-if-exists">
+                <param name="move.file.from" value="${manifest.file.temp.new}"/>
+                <param name="move.file.to" value="${manifest.file.temp}"/>
+            </antcall>
+            <zip destfile="@{jarfile}" basedir="${tmpdir}" update="true"/>
+            <delete dir="${tmpdir}" quiet="true"/>
+        </sequential>
+    </macrodef>
+    
+    <target name="-new-temp-mainfest-existence">
+        <condition property="new-temp-manifest-exists">
+            <available file="${move.file.from}"/>
+        </condition>
+        <echo message="new-temp-manifest-exists = ${new-temp-manifest-exists}" level="verbose"/>
+    </target>
+    
+    <target name="-move-new-manifest-if-exists" depends="-new-temp-mainfest-existence" if="new-temp-manifest-exists">
+        <move file="${move.file.from}" tofile="${move.file.to}" failonerror="false"/>
+    </target>
+    
+    <target name="-rebase-libs-macro-call">
+        <echo message="Rebase jarfile = ${jar.file.to.rebase}" level="verbose"/>
+        <rebase-lib jarfile="${jar.file.to.rebase}"/>
+    </target>
+    
+
+    <!-- Main Deployment Target -->
+
+    <!-- Note: target "jfx-deployment" is referenced from NB 7.1+ build-impl.xml -->
+    <target name="jfx-deployment" depends="-check-jfx-deployment-launch,-do-jfx-deployment-script,-do-jfx-deployment-noscript" if="jfx-deployment-available"/>
+
+    <target name="-check-dist-lib-exists">
+        <deploy-defines/>
+        <available file="${jfx.deployment.dir}${file.separator}lib" type="dir" property="dist.lib.exists"/>
+    </target>
+    <target name="-check-jfx-deployment-jar-current-nolib" depends="-check-dist-lib-exists" unless="dist.lib.exists">
+        <uptodate property="jfx-deployment-jar-current" targetfile="${jfx.deployment.dir}${file.separator}${jfx.deployment.jar}" >
+            <srcfiles dir="${basedir}${file.separator}${build.classes.dir}" includes="**${file.separator}*"/>
+            <srcfiles dir="${basedir}${file.separator}nbproject" includes="**${file.separator}*"/>
+        </uptodate>
+    </target>
+    <target name="-check-jfx-deployment-jar-current-lib" depends="-check-dist-lib-exists" if="dist.lib.exists">
+        <uptodate property="jfx-deployment-jar-current" targetfile="${jfx.deployment.dir}${file.separator}${jfx.deployment.jar}" >
+            <srcfiles dir="${basedir}${file.separator}${build.classes.dir}" includes="**${file.separator}*"/>
+            <srcfiles dir="${jfx.deployment.dir}${file.separator}lib" includes="**${file.separator}*"/>
+            <srcfiles dir="${basedir}${file.separator}nbproject" includes="**${file.separator}*"/>
+        </uptodate>
+    </target>
+    <target name="-check-jfx-deployment-launch" depends="-check-jfx-deployment,-check-jfx-deployment-jar-current-nolib,-check-jfx-deployment-jar-current-lib">
+        <condition property="do-jfx-deployment-script">
+            <and>
+                <isset property="jfx-deployment-available"/>
+                <not><isset property="fallback.no.javascript"/></not>
+                <not><isset property="jfx-deployment-jar-current"/></not>
+            </and>
+        </condition>
+        <condition property="do-jfx-deployment-noscript">
+            <and>
+                <isset property="jfx-deployment-available"/>
+                <isset property="fallback.no.javascript"/>
+                <not><isset property="jfx-deployment-jar-current"/></not>
+            </and>
+        </condition>
+    </target>
+    <target name="-do-jfx-deployment-script" depends="-check-jfx-deployment-launch" if="do-jfx-deployment-script">
+        <antcall target="jfx-deployment-script"/>
+    </target>
+    <target name="-do-jfx-deployment-noscript" depends="-check-jfx-deployment-launch" if="do-jfx-deployment-noscript">
+        <antcall target="jfx-deployment-noscript"/>
+    </target>
+
+    <target name="jfx-deployment-script" depends="-check-jfx-deployment,-check-project,
+        -swing-api-warning,-icon-warning,
+        -set-dimensions,-reset-dimensions,-set-update-mode-background,-set-update-mode-eager,
+        -set-permissions-elevated,-reset-permissions-elevated,
+        -copy-external-preloader-jar,-copy-binary-css,
+        -deploy-app-sign-nopreloader-notemplate,
+        -deploy-app-sign-preloader-notemplate,
+        -deploy-app-sign-nopreloader-template,
+        -deploy-app-sign-preloader-template,
+        -deploy-app-sign-nopreloader-notemplate-swing,
+        -deploy-app-sign-nopreloader-template-swing,
+        -deploy-app-sign-blob-nopreloader-notemplate,
+        -deploy-app-sign-blob-preloader-notemplate,
+        -deploy-app-sign-blob-nopreloader-template,
+        -deploy-app-sign-blob-preloader-template,
+        -deploy-app-sign-blob-nopreloader-notemplate-swing,
+        -deploy-app-sign-blob-nopreloader-template-swing,
+        -deploy-app-nosign-nopreloader-notemplate,
+        -deploy-app-nosign-preloader-notemplate,
+        -deploy-app-nosign-nopreloader-template,
+        -deploy-app-nosign-preloader-template,
+        -deploy-app-nosign-nopreloader-notemplate-swing,
+        -deploy-app-nosign-nopreloader-template-swing"
+        if="jfx-deployment-available">
+    </target>
+
+    <target name="jfx-deployment-noscript" depends="-check-jfx-deployment,-check-project,
+        -swing-api-warning,-icon-warning,
+        -set-dimensions,-reset-dimensions,-set-update-mode-background,-set-update-mode-eager,
+        -set-permissions-elevated,-reset-permissions-elevated,
+        -copy-external-preloader-jar,-copy-binary-css,
+        -fallback-deploy-app-sign-nopreloader-notemplate,
+        -fallback-deploy-app-sign-preloader-notemplate,
+        -fallback-deploy-app-sign-nopreloader-template,
+        -fallback-deploy-app-sign-preloader-template,
+        -fallback-deploy-app-sign-nopreloader-notemplate-swing,
+        -fallback-deploy-app-sign-nopreloader-template-swing,
+        -fallback-deploy-app-sign-blob-nopreloader-notemplate,
+        -fallback-deploy-app-sign-blob-preloader-notemplate,
+        -fallback-deploy-app-sign-blob-nopreloader-template,
+        -fallback-deploy-app-sign-blob-preloader-template,
+        -fallback-deploy-app-sign-blob-nopreloader-notemplate-swing,
+        -fallback-deploy-app-sign-blob-nopreloader-template-swing,
+        -fallback-deploy-app-nosign-nopreloader-notemplate,
+        -fallback-deploy-app-nosign-preloader-notemplate,
+        -fallback-deploy-app-nosign-nopreloader-template,
+        -fallback-deploy-app-nosign-preloader-template,
+        -fallback-deploy-app-nosign-nopreloader-notemplate-swing,
+        -fallback-deploy-app-nosign-nopreloader-template-swing"
+        if="jfx-deployment-available">
+    </target>
+
+
+    <!-- Security / Signing -->
+    
+    <target name="-unavailable-signjars-task" depends="-check-jfx-deployment" unless="jfx-deployment-available">
+        <echo message="Warning: Task required to sign JAR file is missing, check the availability of JavaFX 2.0 deployment tasks. JAR files will not be signed."/>
+    </target>
+
+    <target name="-security-props-check">
+        <condition property="javafx.signed.true">
+            <istrue value="${javafx.signing.enabled}"/>
+        </condition>
+    </target>
+
+    <target name="-check-signing-possible" depends="-security-props-check,-check-jfx-deployment,-unavailable-signjars-task">
+        <condition property="javafx.signed.true+signjars.task.available">
+            <and>
+                <isset property="javafx.signed.true"/>
+                <isset property="jfx-deployment-available"/>
+            </and>
+        </condition>
+    </target>
+    
+    <target name="-javafx-init-keystore" depends="-check-signing-possible,-javafx-init-signing,-javafx-init-keystore1,-javafx-init-keystore2,-check-keystore-exists" 
+            if="javafx.signed.true+signjars.task.available" unless="do.not.init.keystore">
+        <property name="javafx.signjar.vendor" value="CN=${application.vendor}"/>
+        <echo message="Going to create default keystore in ${javafx.signjar.keystore}"/>
+        <genkey dname="${javafx.signjar.vendor}" alias="${javafx.signjar.alias}" keystore="${javafx.signjar.keystore}"
+            storepass="${javafx.signjar.storepass}" keypass="${javafx.signjar.keypass}"/>
+    </target>
+    
+    <target name="-check-keystore-exists" depends="-security-props-check">
+        <available property="javafx.signjar.keystore.exists" file="${javafx.signjar.keystore}"/>
+        <condition property="do.not.init.keystore">
+            <or>
+                <not><isset property="javafx.signed.true"/></not>
+                <isset property="javafx.signjar.keystore.exists"/>
+            </or>
+        </condition>
+    </target>
+
+    <target name="-javafx-init-signing">
+        <condition property="generated.key.signing">
+            <equals arg1="${javafx.signing.type}" arg2="self" trim="true"/>
+        </condition>
+    </target>
+
+    <target name="-javafx-init-keystore1" depends="-javafx-init-signing" if="generated.key.signing">
+        <property name="javafx.signjar.keystore" value="${basedir}${file.separator}build${file.separator}nb-jfx.jks" />
+        <property name="javafx.signjar.storepass" value="storepass"/>
+        <property name="javafx.signjar.keypass" value="keypass"/>
+        <property name="javafx.signjar.alias" value="nb-jfx"/>
+    </target>
+
+    <target name="-javafx-init-keystore2" depends="-javafx-init-signing" unless="generated.key.signing">
+        <property name="javafx.signjar.keystore" value="${javafx.signing.keystore}" />
+        <property name="javafx.signjar.storepass" value="${javafx.signing.keystore.password}"/>
+        <property name="javafx.signjar.keypass" value="${javafx.signing.keyalias.password}"/>
+        <property name="javafx.signjar.alias" value="${javafx.signing.keyalias}"/>
+    </target>
+
+    <target name="-check-signing-security" depends="-security-props-check">
+        <condition property="is.signing.unsafe">
+            <or>
+                <not><isset property="javafx.signed.true"/></not>
+                <not><equals arg1="${javafx.signing.type}" arg2="key" casesensitive="false" trim="true"/></not>
+            </or>
+        </condition>
+    </target>
+
+    <target name="-warn-insufficient-signing" depends="-check-signing-security" if="is.signing.unsafe">
+        <echo message="Warning: Unsigned and self-signed WebStart Applications and Applets are deprecated from JDK7u21 onwards due to security reasons.${line.separator}         To ensure future correct functionality please sign WebStart Applications and Applets using trusted certificate."/>
+    </target>
+
+    
+    <!-- Project Deployment Macros -->
+
+    <macrodef name="deploy-defines">
+        <sequential>
+            <basename property="jfx.deployment.jar" file="${dist.jar}"/>
+            <property name="jfx.deployment.dir" location="${dist.dir}"/>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="deploy-preprocess">
+        <sequential>
+            <delete includeEmptyDirs="true" quiet="true">
+                <fileset dir="${jfx.deployment.dir}${file.separator}lib">
+                    <exclude name="**${file.separator}*.jar"/>
+                </fileset>
+            </delete>
+        </sequential>
+    </macrodef>
+
+    <!-- fx:jar scripted call enables passing of arbitrarily long list of params and fx-version dependent behavior -->
+    <macrodef name="deploy-jar">
+        <sequential>
+            <antcall target="-pre-jfx-jar"/>
+            <echo message="javafx.ant.classpath = ${javafx.ant.classpath}" level="verbose"/>
+            <typedef name="fx_jar" classname="com.sun.javafx.tools.ant.FXJar" classpath="${javafx.ant.classpath}"/>
+            <echo message="Launching &lt;fx:jar&gt; task from ${ant-javafx.jar.location}" level="info"/>
+            <property name="pp_jar_destfile" value="${jfx.deployment.dir}${file.separator}${jfx.deployment.jar}"/>
+            <property name="pp_jar_buildclasses" value="${basedir}${file.separator}${build.classes.dir}"/>
+            <property name="pp_jar_cssbss" value="**${file.separator}*.${css-exclude-ext}"/>
+            <property name="pp_jar_dir" value="${jfx.deployment.dir}"/>
+            <property name="pp_jar_fs1" value="lib${file.separator}${javafx.preloader.jar.filename}"/>
+            <property name="pp_jar_fs2" value="lib${file.separator}*.jar"/>
+            <echo message="deploy_jar: pp_jar_destfile = ${pp_jar_destfile}" level="verbose"/>
+            <echo message="deploy_jar: pp_jar_buildclasses = ${pp_jar_buildclasses}" level="verbose"/>
+            <echo message="deploy_jar: pp_jar_cssbss = ${pp_jar_cssbss}" level="verbose"/>
+            <echo message="deploy_jar: pp_jar_dir = ${pp_jar_dir}" level="verbose"/>
+            <echo message="deploy_jar: pp_jar_fs1 = ${pp_jar_fs1}" level="verbose"/>
+            <echo message="deploy_jar: pp_jar_fs2 = ${pp_jar_fs2}" level="verbose"/>
+            <echo message="JavaScript: deploy-jar" level="verbose"/>
+            <script language="javascript">
+                <![CDATA[
+                    function isTrue(prop) {
+                        return prop != null &&
+                           ( prop.toLowerCase() == "true" || prop.toLowerCase() == "yes" || prop.toLowerCase() == "on" );
+                    }                    
+                    function prefix(s, len) {
+                        if(s == null || len <= 0 || s.length == 0) {
+                            return new String("");
+                        }
+                        return new String(s.substr(0, len));
+                    }
+                    function replaceSuffix(s, os, ns) {
+                        return prefix(s, s.indexOf(os)).concat(ns);
+                    }
+                    function startsWith(s, prefix) {
+                        return (s != null) && (s.indexOf(prefix) == 0);
+                    }
+                    function endsWith(s, suffix) {
+                        var i = s.lastIndexOf(suffix);
+                        return  (i != -1) && (i == (s.length - suffix.length));
+                    }
+                    function defined(s) {
+                        return (s != null) && (s != "null") && (s.length > 0);
+                    }
+                    function contains(array, prop) {
+                        for (var i = 0; i < array.length; i++) {
+                            var s1 = new String(array[i]);
+                            var s2 = new String(prop);
+                            if( s1.toLowerCase() == s2.toLowerCase() ) {
+                                return true;
+                            }
+                        }
+                        return false;
+                    }
+                    var S = new String(java.io.File.separator);
+                    var JFXPAR = "javafx.param";
+                    var JFXMAN = "javafx.manifest.entry";
+                    var JFXPARN = "name";
+                    var JFXPARV = "value";
+                    var JFXPARH = "hidden";
+                    var JFXLAZY = "download.mode.lazy.jar";
+                    var withpreloader = new String(project.getProperty("app-with-preloader"));
+                    var fx_ant_api_1_1 = new String(project.getProperty("have-fx-ant-api-1.1"));
+                    var fx_ant_api_1_2 = new String(project.getProperty("have-fx-ant-api-1.2"));
+                    var fx_in_swing_app = new String(project.getProperty("fx-in-swing-app"));
+
+                    // get jars with lazy download mode property set
+                    function getLazyJars() {
+                        var jars = new Array();
+                        var keys = project.getProperties().keys();
+                        while(keys.hasMoreElements()) {
+                            var pn = new String(keys.nextElement());
+                            if(startsWith(pn, JFXLAZY)) {
+                                var fname = new String(pn.substring(JFXLAZY.length+1));
+                                jars.push(fname);
+                            }
+                        }
+                        return jars.length > 0 ? jars : null;
+                    }
+                    // set download mode of dependent libraries
+                    function setDownloadMode(fsEager, fsLazy, jars) {
+                        for(var i = 0; i < jars.length; i++) {
+                            fsEager.setExcludes("lib" + S + jars[i]);
+                            fsLazy.setIncludes("lib" + S + jars[i]);
+                        }
+                    }
+                    
+                    // fx:jar
+                    var jar = project.createTask("fx_jar");
+                    jar.setProject(project);
+                    var destfile = new String(project.getProperty("pp_jar_destfile"));
+                    jar.setDestfile(destfile);
+
+                    // fx:application
+                    var app = jar.createApplication();
+                    app.setProject(project);
+                    var title = new String(project.getProperty("application.title"));
+                    var mainclass;
+                    if(isTrue(fx_in_swing_app) && isTrue(fx_ant_api_1_2)) {
+                        mainclass = new String(project.getProperty("main.class"));
+                        app.setToolkit("swing");
+                    } else {
+                        mainclass = new String(project.getProperty("javafx.main.class"));
+                    }
+                    var fallback = new String(project.getProperty("javafx.fallback.class"));
+                    app.setName(title);
+                    app.setMainClass(mainclass);
+                    app.setFallbackClass(fallback);
+                    if(isTrue(withpreloader)) {
+                        preloaderclass = new String(project.getProperty("javafx.preloader.class"));
+                        app.setPreloaderClass(preloaderclass);
+                    }
+                    var appversion = new String(project.getProperty("javafx.application.implementation.version"));
+                    if(defined(appversion)) {
+                        app.setVersion(appversion);
+                    } else {
+                        app.setVersion("1.0");
+                    }
+                    // fx:param, fx:argument
+                    var searchHides = project.getProperties().keys();
+                    var hides = new Array();
+                    while(searchHides.hasMoreElements()) {
+                        // collect all hidden property names
+                        var pns = new String(searchHides.nextElement());
+                        if(startsWith(pns, JFXPAR) && endsWith(pns, JFXPARN)) {
+                            var propns = new String(project.getProperty(pns));
+                            var phs = replaceSuffix(pns, JFXPARN, JFXPARH);
+                            var proph = new String(project.getProperty(phs));
+                            if(isTrue(proph)) {
+                                hides.push(propns);
+                            }
+                         }
+                    }
+                    var keys = project.getProperties().keys();
+                    while(keys.hasMoreElements()) {
+                        var pn = new String(keys.nextElement());
+                        if(startsWith(pn, JFXPAR) && endsWith(pn, JFXPARN)) {
+                            var propn = new String(project.getProperty(pn));
+                            if(defined(propn) && !contains(hides, propn)) {
+                                var pv = replaceSuffix(pn, JFXPARN, JFXPARV);
+                                var propv = new String(project.getProperty(pv));
+                                if(defined(propv)) {
+                                    var par = app.createParam();
+                                    par.setName(propn);
+                                    par.setValue(propv);
+                                } else {
+                                    if(isTrue(fx_ant_api_1_1)) {
+                                        var arg = app.createArgument();
+                                        arg.addText(propn);
+                                    } else {
+                                        print("Warning: Unnamed parameters not supported by this version of JavaFX SDK deployment Ant tasks. Upgrade JavaFX to 2.0.2 or higher.");
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    
+                    // fx:resources
+                    var res = jar.createResources();
+                    res.setProject(project);
+                    var pdir = new String(project.getProperty("pp_jar_dir"));
+                    if(isTrue(withpreloader)) {
+                        var f1 = res.createFileSet();
+                        f1.setProject(project);
+                        f1.setDir(new java.io.File(pdir));
+                        var i1 = new String(project.getProperty("pp_jar_fs1"));
+                        f1.setIncludes(i1);
+                        f1.setRequiredFor("preloader");
+                        var f2 = res.createFileSet();
+                        f2.setProject(project);
+                        f2.setDir(new java.io.File(pdir));
+                        var i2b = new String(project.getProperty("pp_jar_fs2"));
+                        var e2c = new String(project.getProperty("pp_jar_fs1"));
+                        f2.setIncludes(i2b);
+                        f2.setExcludes(e2c);
+                        f2.setRequiredFor("startup");
+                        var lazyjars = getLazyJars();
+                        if(lazyjars != null) {
+                            var f3 = res.createFileSet();
+                            f3.setProject(project);
+                            f3.setDir(new java.io.File(pdir));
+                            f3.setRequiredFor("runtime");
+                            setDownloadMode(f2,f3,lazyjars);
+                        }
+                    } else {
+                        var fn = res.createFileSet();
+                        fn.setProject(project);
+                        fn.setDir(new java.io.File(pdir));
+                        var ib = new String(project.getProperty("pp_jar_fs2"));
+                        fn.setIncludes(ib);
+                        fn.setRequiredFor("startup");
+                        var lazyjars = getLazyJars();
+                        if(lazyjars != null) {
+                            var fn2 = res.createFileSet();
+                            fn2.setProject(project);
+                            fn2.setDir(new java.io.File(pdir));
+                            fn2.setRequiredFor("runtime");
+                            setDownloadMode(fn,fn2,lazyjars);
+                        }
+                    }
+                    
+                    // fileset to exclude *.css or *.bss
+                    var fs = jar.createFileSet();
+                    fs.setProject(project);
+                    var buildcls = new String(project.getProperty("pp_jar_buildclasses"));
+                    var exc = new String(project.getProperty("pp_jar_cssbss"));
+                    fs.setDir(new java.io.File(buildcls));
+                    fs.setExcludes(exc);
+                    
+                    // manifest
+                    var man = jar.createManifest();
+                    var userManifestPath = project.getProperty("manifest.file");
+                    if (userManifestPath) {
+                        var userManifestFile = project.resolveFile(userManifestPath);
+                        if (userManifestFile.isFile()) {
+                            var manifestEncoding = project.getProperty("manifest.encoding");
+                            var userManifestReader = manifestEncoding ?
+                                    new java.io.InputStreamReader(
+                                        new java.io.FileInputStream(userManifestFile),
+                                        manifestEncoding) :
+                                    new java.io.InputStreamReader(
+                                        new java.io.FileInputStream(userManifestFile));
+                            try {
+                                var userManifest = new org.apache.tools.ant.taskdefs.Manifest(userManifestReader);
+                                man.merge(userManifest);
+                            } finally {
+                                userManifestReader.close();
+                            }
+                        }
+                    }
+                    var a1val = new String(project.getProperty("application.vendor"));
+                    var a1 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
+                    a1.setName("Implementation-Vendor");
+                    a1.setValue(a1val);
+                    man.addConfiguredAttribute(a1);
+                    var a2val = new String(project.getProperty("application.title"));
+                    var a2 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
+                    a2.setName("Implementation-Title");
+                    a2.setValue(a2val);
+                    man.addConfiguredAttribute(a2);
+                    if(defined(appversion)) {
+                        var a3 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
+                        a3.setName("Implementation-Version");
+                        a3.setValue(appversion);
+                        man.addConfiguredAttribute(a3);
+                    }
+                    var a4prop = new String(project.getProperty("javafx.deploy.disable.proxy"));
+                    if(isTrue(a4prop)) {
+                        var a4 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
+                        a4.setName("JavaFX-Feature-Proxy");
+                        a4.setValue("None");
+                        man.addConfiguredAttribute(a4);
+                    }
+                    // custom manifest entries
+                    var searchManifestHides = project.getProperties().keys();
+                    var manifestHides = new Array();
+                    while(searchManifestHides.hasMoreElements()) {
+                        // collect all hidden property names
+                        var pns = new String(searchManifestHides.nextElement());
+                        if(startsWith(pns, JFXMAN) && endsWith(pns, JFXPARN)) {
+                            var propns = new String(project.getProperty(pns));
+                            var phs = replaceSuffix(pns, JFXPARN, JFXPARH);
+                            var proph = new String(project.getProperty(phs));
+                            if(isTrue(proph)) {
+                                manifestHides.push(propns);
+                            }
+                         }
+                    }
+                    var manifestKeys = project.getProperties().keys();
+                    while(manifestKeys.hasMoreElements()) {
+                        var pn = new String(manifestKeys.nextElement());
+                        if(startsWith(pn, JFXMAN) && endsWith(pn, JFXPARN)) {
+                            var propn = new String(project.getProperty(pn));
+                            if(defined(propn) && !contains(manifestHides, propn)) {
+                                var propnr = propn.replace(/\s/g, "-");
+                                var entry = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
+                                entry.setName(propnr);
+                                var pv = replaceSuffix(pn, JFXPARN, JFXPARV);
+                                var propv = new String(project.getProperty(pv));
+                                if(defined(propv)) {
+                                    entry.setValue(propv);
+                                } else {
+                                    entry.setValue("");
+                                }
+                                man.addConfiguredAttribute(entry);
+                            }
+                        }
+                    }
+                    var profileAvailable = new String(project.getProperty("profile.available"));
+                    if (defined(profileAvailable)) {
+                        var profileAttribute = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
+                        profileAttribute.setName("Profile");
+                        profileAttribute.setValue(new String(project.getProperty("javac.profile")));
+                        man.addConfiguredAttribute(profileAttribute);
+                    }
+                    var perm_elev = new String(project.getProperty("permissions.elevated"));
+                    var cust_perm = new String(project.getProperty("manifest.custom.permissions"));
+                    var cust_cb = new String(project.getProperty("manifest.custom.codebase"));
+                    var sa1 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
+                    sa1.setName("Codebase");
+                    if(!defined(cust_cb) || cust_cb == "*") {
+                        sa1.setValue("*");
+                        print("Warning: From JDK7u25 the Codebase manifest attribute should be used to restrict JAR repurposing.");
+                        print("         Please set manifest.custom.codebase property to override the current default non-secure value '*'.");
+                    } else {
+                        sa1.setValue(cust_cb);
+                    }
+                    man.addConfiguredAttribute(sa1);
+                    var sa2 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
+                    sa2.setName("Permissions");
+                    if(!defined(cust_perm)) {
+                        if(isTrue(perm_elev)) {
+                            sa2.setValue("all-permissions");
+                        } else {
+                            sa2.setValue("sandbox");
+                        }
+                    } else {
+                        if(cust_perm == "all-permissions") {
+                            sa2.setValue("all-permissions");
+                        } else {
+                            sa2.setValue("sandbox");
+                        }
+                    }
+                    man.addConfiguredAttribute(sa2);
+                    // Note: see JavaFX Jira issue #RT-25003 if attribute names are created lowercase in manifest
+
+                    jar.perform();
+                ]]>
+            </script>
+            <antcall target="-post-jfx-jar"/>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="deploy-sign">
+        <sequential>
+            <echo message="keystore=${javafx.signjar.keystore}" level="verbose"/>
+            <echo message="storepass=${javafx.signjar.storepass}" level="verbose"/>
+            <echo message="alias=${javafx.signjar.alias}" level="verbose"/>
+            <echo message="keypass=${javafx.signjar.keypass}" level="verbose"/>
+            <signjar keystore="${javafx.signjar.keystore}"
+                storepass="${javafx.signjar.storepass}"
+                alias="${javafx.signjar.alias}"
+                keypass="${javafx.signjar.keypass}">
+                <fileset dir="${jfx.deployment.dir}">
+                    <include name="${jfx.deployment.jar}"/>
+                    <include name="lib${file.separator}*.jar"/>
+                </fileset>
+            </signjar>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="deploy-sign-blob">
+        <sequential>
+            <echo message="keystore=${javafx.signjar.keystore}" level="verbose"/>
+            <echo message="storepass=${javafx.signjar.storepass}" level="verbose"/>
+            <echo message="alias=${javafx.signjar.alias}" level="verbose"/>
+            <echo message="keypass=${javafx.signjar.keypass}" level="verbose"/>
+            <echo message="Launching &lt;fx:signjar&gt; task from ${ant-javafx.jar.location}" level="info"/>
+            <fx:signjar keystore="${javafx.signjar.keystore}"
+                storepass="${javafx.signjar.storepass}"
+                alias="${javafx.signjar.alias}"
+                keypass="${javafx.signjar.keypass}">
+                <fileset dir="${jfx.deployment.dir}">
+                    <include name="${jfx.deployment.jar}"/>
+                    <include name="lib${file.separator}*.jar"/>
+                </fileset>
+            </fx:signjar>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="deploy-sign-preloader">
+        <sequential>
+            <echo message="keystore=${javafx.signjar.keystore}" level="verbose"/>
+            <echo message="storepass=${javafx.signjar.storepass}" level="verbose"/>
+            <echo message="alias=${javafx.signjar.alias}" level="verbose"/>
+            <echo message="keypass=${javafx.signjar.keypass}" level="verbose"/>
+            <signjar keystore="${javafx.signjar.keystore}"
+                storepass="${javafx.signjar.storepass}"
+                alias="${javafx.signjar.alias}"
+                keypass="${javafx.signjar.keypass}">
+                <fileset dir="${jfx.deployment.dir}">
+                    <include name="lib${file.separator}${javafx.preloader.jar.filename}"/>
+                </fileset>
+            </signjar>
+            <signjar keystore="${javafx.signjar.keystore}"
+                storepass="${javafx.signjar.storepass}"
+                alias="${javafx.signjar.alias}"
+                keypass="${javafx.signjar.keypass}">
+                <fileset dir="${jfx.deployment.dir}">
+                    <include name="${jfx.deployment.jar}"/>
+                    <include name="lib${file.separator}*.jar"/>
+                    <exclude name="lib${file.separator}${javafx.preloader.jar.filename}"/>
+                </fileset>
+            </signjar>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="deploy-sign-blob-preloader">
+        <sequential>
+            <echo message="keystore=${javafx.signjar.keystore}" level="verbose"/>
+            <echo message="storepass=${javafx.signjar.storepass}" level="verbose"/>
+            <echo message="alias=${javafx.signjar.alias}" level="verbose"/>
+            <echo message="keypass=${javafx.signjar.keypass}" level="verbose"/>
+            <signjar keystore="${javafx.signjar.keystore}"
+                storepass="${javafx.signjar.storepass}"
+                alias="${javafx.signjar.alias}"
+                keypass="${javafx.signjar.keypass}">
+                <fileset dir="${jfx.deployment.dir}">
+                    <include name="lib${file.separator}${javafx.preloader.jar.filename}"/>
+                </fileset>
+            </signjar>
+            <echo message="Launching &lt;fx:signjar&gt; task from ${ant-javafx.jar.location}" level="info"/>
+            <fx:signjar keystore="${javafx.signjar.keystore}"
+                storepass="${javafx.signjar.storepass}"
+                alias="${javafx.signjar.alias}"
+                keypass="${javafx.signjar.keypass}">
+                <fileset dir="${jfx.deployment.dir}">
+                    <include name="${jfx.deployment.jar}"/>
+                    <include name="lib${file.separator}*.jar"/>
+                    <exclude name="lib${file.separator}${javafx.preloader.jar.filename}"/>
+                </fileset>
+            </fx:signjar>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="deploy-process-template">
+        <sequential>
+            <echo message="javafx.run.htmltemplate = ${javafx.run.htmltemplate}" level="verbose"/>
+            <pathconvert property="javafx.run.htmltemplate.processed">
+                <path path="${javafx.run.htmltemplate}"/>
+                <mapper>
+                     <chainedmapper>
+                          <flattenmapper/>
+                          <globmapper from="*" to="${jfx.deployment.dir}${file.separator}*" casesensitive="no"/>
+                     </chainedmapper>
+                </mapper>
+            </pathconvert>
+            <echo message="javafx.run.htmltemplate.processed = ${javafx.run.htmltemplate.processed}" level="verbose"/>
+        </sequential>
+    </macrodef>
+
+    <!-- fx:deploy scripted call enables passing of arbitrarily long lists of params, vmoptions and callbacks and fx-version dependent behavior -->
+    <macrodef name="deploy-deploy">
+        <sequential>
+            <antcall target="-pre-jfx-deploy"/>
+            <antcall target="-call-pre-jfx-native"/>
+            <echo message="javafx.ant.classpath = ${javafx.ant.classpath}" level="verbose"/>
+            <typedef name="fx_deploy" classname="com.sun.javafx.tools.ant.DeployFXTask" classpath="${javafx.ant.classpath}"/>
+            <echo message="Launching &lt;fx:deploy&gt; task from ${ant-javafx.jar.location}" level="info"/>
+            <property name="pp_deploy_dir" value="${jfx.deployment.dir}"/>
+            <property name="pp_deploy_fs1" value="lib${file.separator}${javafx.preloader.jar.filename}"/>
+            <property name="pp_deploy_fs2" value="lib${file.separator}*.jar"/>
+            <echo message="deploy_deploy: pp_deploy_dir = ${pp_deploy_dir}" level="verbose"/>
+            <echo message="deploy_deploy: pp_deploy_fs1 = ${pp_deploy_fs1}" level="verbose"/>
+            <echo message="deploy_deploy: pp_deploy_fs2 = ${pp_deploy_fs2}" level="verbose"/>
+            <echo message="JavaScript: deploy-deploy" level="verbose"/>
+            <basename property="jfx.deployment.base" file="${jfx.deployment.jar}" suffix=".jar"/>
+            <script language="javascript">
+                <![CDATA[
+                    function isTrue(prop) {
+                        return prop != null && 
+                           (prop.toLowerCase()=="true" || prop.toLowerCase()=="yes" || prop.toLowerCase()=="on");
+                    }                    
+                    function prefix(s, len) {
+                        if(s == null || len <= 0 || s.length == 0) {
+                            return new String("");
+                        }
+                        return new String(s.substr(0, len));
+                    }
+                    function replaceSuffix(s, os, ns) {
+                        return prefix(s, s.indexOf(os)).concat(ns);
+                    }
+                    function startsWith(s, prefix) {
+                        return (s != null) && (s.indexOf(prefix) == 0);
+                    }
+                    function endsWith(s, suffix) {
+                        var i = s.lastIndexOf(suffix);
+                        return  (i != -1) && (i == (s.length - suffix.length));
+                    }
+                    function defined(s) {
+                        return (s != null) && (s != "null") && (s.length > 0);
+                    }
+                    function contains(array, prop) {
+                        for (var i = 0; i < array.length; i++) {
+                            var s1 = new String(array[i]);
+                            var s2 = new String(prop);
+                            if( s1.toLowerCase() == s2.toLowerCase() ) {
+                                return true;
+                            }
+                        }
+                        return false;
+                    }
+                    var S = java.io.File.separator;
+                    var JFXPAR = "javafx.param";
+                    var JFXPARN = "name";
+                    var JFXPARV = "value";
+                    var JFXPARH = "hidden";
+                    var JFXCALLB = "javafx.jscallback";
+                    var JFXLAZY = "download.mode.lazy.jar";
+                    var withpreloader = new String(project.getProperty("app-with-preloader"));
+                    var fx_ant_api_1_1 = new String(project.getProperty("have-fx-ant-api-1.1"));
+                    var fx_ant_api_1_2 = new String(project.getProperty("have-fx-ant-api-1.2"));
+                    var have_jdk_pre7u14 = new String(project.getProperty("have-jdk-pre7u14"));
+                    var fx_in_swing_app = new String(project.getProperty("fx-in-swing-app"));
+                    var debug_in_browser = new String(project.getProperty("project.state.debugging.in.browser"));
+
+                    // get jars with lazy download mode property set
+                    function getLazyJars() {
+                        var jars = new Array();
+                        var keys = project.getProperties().keys();
+                        while(keys.hasMoreElements()) {
+                            var pn = new String(keys.nextElement());
+                            if(startsWith(pn, JFXLAZY)) {
+                                var fname = pn.substring(JFXLAZY.length+1);
+                                jars.push(fname);
+                            }
+                        }
+                        return jars.length > 0 ? jars : null;
+                    }
+                    // set download mode of dependent libraries
+                    function setDownloadMode(fsEager, fsLazy, jars) {
+                        for(var i = 0; i < jars.length; i++) {
+                            fsEager.setExcludes("lib" + S + jars[i]);
+                            fsLazy.setIncludes("lib" + S + jars[i]);
+                        }
+                    }
+                    // convert path to absolute if relative
+                    function derelativizePath(path) {
+                        var f = new java.io.File(path);
+                        if(!f.exists()) {
+                            f = new java.io.File(new String(project.getBaseDir()) + S + path);
+                        }
+                        if(f.exists()) {
+                            try {
+                                return f.getCanonicalPath();
+                            } catch(err) {
+                                return path;
+                            }
+                        }
+                        return path;
+                    }
+                    
+                    // fx:deploy
+                    var deploy = project.createTask("fx_deploy");
+                    deploy.setProject(project);
+                    var width = new String(project.getProperty("javafx.width"));
+                    var height = new String(project.getProperty("javafx.height"));
+                    var outdir = new String(project.getProperty("jfx.deployment.dir"));
+                    var embedJNLP = new String(project.getProperty("javafx.deploy.embedJNLP"));
+                    var updatemode = new String(project.getProperty("update-mode"));
+                    var outfile = new String(project.getProperty("application.title"));
+                    var includeDT = new String(project.getProperty("javafx.deploy.includeDT"));
+                    var offline = new String(project.getProperty("javafx.deploy.allowoffline"));
+                    if (width.indexOf("%") != -1) {
+                        deploy.setEmbeddedWidth(width);
+                        deploy.setWidth(800);
+                    } else {
+                        deploy.setWidth(width);
+                    }
+                    if (height.indexOf("%") != -1) {
+                        deploy.setEmbeddedHeight(height);
+                        deploy.setHeight(600);
+                    } else {
+                        deploy.setHeight(height);
+                    }
+                    deploy.setOutdir(outdir);
+                    deploy.setEmbedJNLP(isTrue(embedJNLP));
+                    deploy.setUpdateMode(updatemode);
+                    deploy.setOutfile(outfile);
+                    deploy.setIncludeDT(isTrue(includeDT));
+                    if(defined(offline)) {
+                        if(isTrue(fx_ant_api_1_1)) {
+                            deploy.setOfflineAllowed(isTrue(offline));
+                        } else {
+                            print("Warning: offlineAllowed not supported by this version of JavaFX SDK deployment Ant task. Please upgrade JavaFX to 2.0.2 or higher.");
+                        }
+                    }
+                    // native packaging (time consuming, thus applied in explicit build only)
+                    var nativeEnabled = new String(project.getProperty("do.build.native.package"));
+                    var nativeType = new String(project.getProperty("javafx.native.bundling.type"));
+                    var projStateRun = new String(project.getProperty("project.state.running"));
+                    var projStateDbg = new String(project.getProperty("project.state.debugging"));
+                    var projStatePrf = new String(project.getProperty("project.state.profiling"));
+                    if(isTrue(nativeEnabled) && defined(nativeType) && nativeType != "none") {
+                        if(!isTrue(projStateRun) && !isTrue(projStateDbg) && !isTrue(projStatePrf)) {
+                            if(isTrue(fx_ant_api_1_2)) {
+                                deploy.setNativeBundles(nativeType);
+                                print("Note: To create native bundles the <fx:deploy> task may require external tools. See JavaFX 2.2+ documentation for details.");
+                                print("");
+                                print("Launching <fx:deploy> in native packager mode...");
+                            } else {
+                                print("Warning: Native packaging is not supported by this version of JavaFX SDK deployment Ant task. Please upgrade to JDK 7u6 or higher.");
+                            }
+                        }
+                    }
+
+                    // fx:application
+                    var app = deploy.createApplication();
+                    app.setProject(project);
+                    var title = new String(project.getProperty("application.title"));
+                    var mainclass;
+                    if(isTrue(fx_in_swing_app) && isTrue(fx_ant_api_1_2)) {
+                        mainclass = new String(project.getProperty("main.class"));
+                        app.setToolkit("swing");
+                    } else {
+                        mainclass = new String(project.getProperty("javafx.main.class"));
+                    }
+                    var fallback = new String(project.getProperty("javafx.fallback.class"));
+                    app.setName(title);
+                    app.setMainClass(mainclass);
+                    app.setFallbackClass(fallback);
+                    if(isTrue(withpreloader)) {
+                        preloaderclass = new String(project.getProperty("javafx.preloader.class"));
+                        app.setPreloaderClass(preloaderclass);
+                    }
+                    var appversion = new String(project.getProperty("javafx.application.implementation.version"));
+                    if(defined(appversion)) {
+                        app.setVersion(appversion);
+                    } else {
+                        app.setVersion("1.0");
+                    }
+                    // fx:param, fx:argument
+                    var searchHides = project.getProperties().keys();
+                    var hides = new Array();
+                    while(searchHides.hasMoreElements()) {
+                        // collect all hidden property names
+                        var pns = new String(searchHides.nextElement());
+                        if(startsWith(pns, JFXPAR) && endsWith(pns, JFXPARN)) {
+                            var propns = new String(project.getProperty(pns));
+                            var phs = replaceSuffix(pns, JFXPARN, JFXPARH);
+                            var proph = new String(project.getProperty(phs));
+                            if(isTrue(proph)) {
+                                hides.push(propns);
+                            }
+                         }
+                    }
+                    var keys = project.getProperties().keys();
+                    while(keys.hasMoreElements()) {
+                        var pn = new String(keys.nextElement());
+                        if(startsWith(pn, JFXPAR) && endsWith(pn, JFXPARN)) {
+                            var propn = new String(project.getProperty(pn));
+                            if(defined(propn) && !contains(hides, propn)) {
+                                var pv = replaceSuffix(pn, JFXPARN, JFXPARV);
+                                var propv = new String(project.getProperty(pv));
+                                if(defined(propv)) {
+                                    var par = app.createParam();
+                                    par.setName(propn);
+                                    par.setValue(propv);
+                                } else {
+                                    if(isTrue(fx_ant_api_1_1)) {
+                                        var arg = app.createArgument();
+                                        arg.addText(propn);
+                                    } else {
+                                        print("Warning: Unnamed parameters not supported by this version of JavaFX SDK deployment Ant tasks. Upgrade JavaFX to 2.0.2 or higher.");
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    
+                    // fx:resources
+                    var res = deploy.createResources();
+                    res.setProject(project);
+                    var deploydir = new String(project.getProperty("pp_deploy_dir"));
+                    if(isTrue(withpreloader)) {
+                        var f1 = res.createFileSet();
+                        f1.setProject(project);
+                        f1.setDir(new java.io.File(deploydir));
+                        var i1 = new String(project.getProperty("pp_deploy_fs1"));
+                        f1.setIncludes(i1);
+                        f1.setRequiredFor("preloader");
+                        var f2 = res.createFileSet();
+                        f2.setProject(project);
+                        f2.setDir(new java.io.File(deploydir));
+                        var i2a = new String(project.getProperty("jfx.deployment.jar"));
+                        var i2b = new String(project.getProperty("pp_deploy_fs2"));
+                        var e2c = new String(project.getProperty("pp_deploy_fs1"));
+                        f2.setIncludes(i2a);
+                        f2.setIncludes(i2b);
+                        f2.setExcludes(e2c);
+                        f2.setRequiredFor("startup");
+                        var lazyjars = getLazyJars();
+                        if(lazyjars != null) {
+                            var f3 = res.createFileSet();
+                            f3.setProject(project);
+                            f3.setDir(new java.io.File(deploydir));
+                            f3.setRequiredFor("runtime");
+                            setDownloadMode(f2,f3,lazyjars);
+                        }
+                    } else {
+                        var fn = res.createFileSet();
+                        fn.setProject(project);
+                        fn.setDir(new java.io.File(deploydir));
+                        var ia = new String(project.getProperty("jfx.deployment.jar"));
+                        var ib = new String(project.getProperty("pp_deploy_fs2"));
+                        fn.setIncludes(ia);
+                        fn.setIncludes(ib);
+                        fn.setRequiredFor("startup");
+                        var lazyjars = getLazyJars();
+                        if(lazyjars != null) {
+                            var fn2 = res.createFileSet();
+                            fn2.setProject(project);
+                            fn2.setDir(new java.io.File(deploydir));
+                            fn2.setRequiredFor("runtime");
+                            setDownloadMode(fn,fn2,lazyjars);
+                        }
+                    }
+                    
+                    // fx:info
+                    var info = deploy.createInfo();
+                    info.setProject(project);
+                    var vendor = new String(project.getProperty("application.vendor"));
+                    var description = new String(project.getProperty("application.desc"));
+                    info.setTitle(title); // title known from before
+                    info.setVendor(vendor);
+                    info.setDescription(description);
+                    var splash = new String(project.getProperty("javafx.deploy.splash"));
+                    if(defined(splash)) {
+                        if(isTrue(fx_ant_api_1_1)) {
+                            var sicon = info.createSplash();
+                            sicon.setHref(splash);
+                            sicon.setMode("any");
+                            print("Adding splash image reference: " + splash);
+                        } else {
+                            print("Warning: Splash Image not supported by this version of JavaFX SDK deployment Ant task. Please upgrade JavaFX to 2.0.2 or higher.");
+                        }
+                    }
+                    if(isTrue(nativeEnabled) && defined(nativeType) && nativeType != "none") {
+                        var icon = new String(project.getProperty("javafx.deploy.icon.native"));
+                        if(defined(icon)) {
+                            if(isTrue(fx_ant_api_1_2) && !isTrue(have_jdk_pre7u14)) {
+                                var dicon = derelativizePath(icon);
+                                // create temporary icon copy renamed to application name (required by native packager)
+                                var baseDir = new String(project.getProperty("basedir"));
+                                var buildDir = new String(project.getProperty("build.dir"));
+                                var deployBase = new String(project.getProperty("jfx.deployment.base"));
+                                var copyTask = project.createTask("copy");
+                                var source = new java.io.File(dicon);
+                                var sourceName = new String(source.getName());
+                                var lastDot = sourceName.lastIndexOf(".");
+                                var sourceExt;
+                                if(lastDot >=0) {
+                                    sourceExt = sourceName.substr(lastDot);
+                                } else {
+                                    sourceExt = new String("");
+                                }
+                                var target = new java.io.File(baseDir.concat(S).concat(buildDir).concat(S).concat("icon").concat(S).concat(deployBase).concat(sourceExt));
+                                copyTask.setFile(source);
+                                copyTask.setTofile(target);
+                                copyTask.setFlatten(true);
+                                copyTask.setFailOnError(false);
+                                copyTask.perform();
+                                var tempicon;
+                                if(target.exists()) {
+                                    try {
+                                        tempicon = target.getCanonicalPath();
+                                    } catch(err) {
+                                        tempicon = dicon;
+                                    }
+                                } else {
+                                    tempicon = dicon;
+                                }
+                                var nicon = info.createIcon();
+                                nicon.setHref(tempicon);
+                                print("Source native icon reference: " + dicon);
+                                print("Processed native icon reference: " + tempicon);
+                            } else {
+                                print("Warning: Native Package icon not supported by this version of JavaFX SDK deployment Ant task. Please upgrade to JDK7u14.");
+                            }
+                        }
+                    } else {
+                        var icon = new String(project.getProperty("javafx.deploy.icon"));
+                        if(defined(icon)) {
+                            if(isTrue(fx_ant_api_1_1)) {
+                                var iicon = info.createIcon();
+                                iicon.setHref(icon);
+                                print("Adding WebStart icon reference: " + icon);
+                            } else {
+                                print("Warning: WebStart Icon not supported by this version of JavaFX SDK deployment Ant task. Please upgrade JavaFX to 2.0.2 or higher.");
+                            }
+                        }
+                    }
+                    
+                    // fx:permissions
+                    var perm = deploy.createPermissions();
+                    perm.setProject(project);
+                    var elev = new String(project.getProperty("permissions.elevated"));
+                    perm.setElevated(isTrue(elev));
+                    
+                    // fx:preferences
+                    var pref = deploy.createPreferences();
+                    pref.setProject(project);
+                    var scut = new String(project.getProperty("javafx.deploy.adddesktopshortcut"));
+                    var instp = new String(project.getProperty("javafx.deploy.installpermanently"));
+                    var smenu = new String(project.getProperty("javafx.deploy.addstartmenushortcut"));
+                    pref.setShortcut(isTrue(scut));
+                    pref.setInstall(isTrue(instp));
+                    pref.setMenu(isTrue(smenu));
+
+                    // fx:template
+                    var templ = new String(project.getProperty("javafx.run.htmltemplate"));
+                    var templp = new String(project.getProperty("javafx.run.htmltemplate.processed"));
+                    if(defined(templ) && defined(templp)) {
+                        var temp = deploy.createTemplate();
+                        temp.setProject(project);
+                        temp.setFile(new java.io.File(templ));
+                        temp.setTofile(new java.io.File(templp));
+                    }
+
+                    // fx:platform
+                    var plat = deploy.createPlatform();
+                    plat.setProject(project);
+                    var requestRT = new String(project.getProperty("javafx.deploy.request.runtime"));
+                    if(defined(requestRT)) {
+                        plat.setJavafx(requestRT);
+                    }
+                    var jvmargs = new String(project.getProperty("run.jvmargs"));
+                    if(defined(jvmargs)) {
+                        var jvmargss = jvmargs.split(" ");
+                        for(var i = 0; i < jvmargss.length; i++) {
+                            if(defined(jvmargss[i])) {
+                                var vmarg = plat.createJvmarg();
+                                vmarg.setValue(jvmargss[i]);
+                            }
+                        }
+                    }
+                    if(isTrue(debug_in_browser)) {
+                        var vmarg = plat.createJvmarg();
+                        vmarg.setValue(new String("-ea:javafx.browserdebug"));
+                    }
+                    if(isTrue(nativeEnabled) && defined(nativeType) && nativeType != "none") {
+                        if(!isTrue(projStateRun) && !isTrue(projStateDbg) && !isTrue(projStatePrf)) {
+                            if(plat.setBasedir) {
+                                var sdkdir = new String(project.getProperty("javafx.sdk"));
+                                if(defined(sdkdir)) {
+                                    plat.setBasedir(sdkdir);
+                                }
+                            } else {
+                                print("Note: the current version of native packager Ant task can bundle the default JRE only.");
+                            }
+                        }
+                    }
+                    
+                    // fx:callbacks
+                    var callbs = deploy.createCallbacks();
+                    callbs.setProject(project);
+                    var keys = project.getProperties().keys();
+                    while(keys.hasMoreElements()) {
+                        var pn = new String(keys.nextElement());
+                        if(startsWith(pn, JFXCALLB)) {
+                            var prop = new String(project.getProperty(pn));
+                            if(defined(prop)) {
+                                var cname = pn.substring(JFXCALLB.length+1);
+                                var cb = callbs.createCallback();
+                                cb.setProject(project);
+                                cb.setName(cname);
+                                cb.addText(prop);
+                            }
+                        }
+                    }
+                    
+                    deploy.perform();
+                ]]>
+            </script>
+            <antcall target="-post-jfx-deploy"/>
+            <antcall target="-call-post-jfx-native"/>
+        </sequential>
+    </macrodef>
+
+    <!-- JavaFX SDK 2.0.x and 2.1.x deploy task can not generate pre-FX jnlp which is needed for FX-in-Swing projects-->
+    <macrodef name="deploy-deploy-swing">
+        <sequential>
+            <antcall target="-pre-jfx-deploy"/>
+            <local name="permissions-elevated-token"/>
+            <condition property="permissions-elevated-token" value="${line.separator}    &lt;security&gt;${line.separator}        &lt;all-permissions/&gt;${line.separator}    &lt;/security&gt;" else="">
+                <isset property="permissions-elevated"/>
+            </condition>
+            <local name="offline-allowed-token"/>
+            <condition property="offline-allowed-token" value="${line.separator}        &lt;offline-allowed/&gt;" else="">
+                <isset property="offline-allowed"/>
+            </condition>
+            <local name="update-mode-background-token"/>
+            <condition property="update-mode-background-token" value="background" else="always">
+                <isset property="update-mode-background"/>
+            </condition>
+            <local name="html-template-processed-available"/>
+            <condition property="html-template-processed-available">
+                <and>
+                    <isset property="javafx.run.htmltemplate.processed"/>
+                    <not>
+                        <equals arg1="${javafx.run.htmltemplate.processed}" arg2=""/>
+                    </not>
+                </and>
+            </condition>
+            <local name="javafx.deploy.icon.basename"/>
+            <basename property="javafx.deploy.icon.basename" file="${javafx.deploy.icon}"/>
+            <local name="local-icon-filename-available"/>
+            <condition property="local-icon-filename-available">
+                <and>
+                    <isset property="icon-available"/>
+                    <isset property="javafx.deploy.icon.basename"/>
+                    <not><equals arg1="${javafx.deploy.icon.basename}" arg2=""/></not>
+                    <not><contains string="${javafx.deploy.icon.basename}" substring="$${javafx" casesensitive="false"/></not>
+                    <not><contains string="${javafx.deploy.icon}" substring="http:" casesensitive="false"/></not>
+                </and>
+            </condition>
+            <local name="icon-token"/>
+            <condition property="icon-token" value="${line.separator}        &lt;icon href=&quot;${javafx.deploy.icon.basename}&quot; kind=&quot;default&quot;/&gt;">
+                <isset property="local-icon-filename-available"/>
+            </condition>
+            <condition property="icon-token" value="${line.separator}        &lt;icon href=&quot;${javafx.deploy.icon}&quot; kind=&quot;default&quot;/&gt;" else="">
+                <isset property="icon-available"/>
+            </condition>
+            <basename property="dist.filename" file="${dist.jar}" suffix=".jar"/>
+            <length file="${dist.jar}" property="dist.jar.size" />
+            <local name="vmargs-token"/>
+            <condition property="vmargs-token" value="java-vm-args=&quot;${run.jvmargs}&quot; " else="">
+                <isset property="vmargs-available"/>
+            </condition>
+            <local name="applet-params-token"/>
+            <local name="application-args-token"/>
+            <echo message="JavaScript: deploy-deploy-swing 1" level="verbose"/>
+            <script language="javascript">
+                <![CDATA[
+                    function prefix(s, len) {
+                        if(s == null || len <= 0 || s.length == 0) {
+                            return new String("");
+                        }
+                        return new String(s.substr(0, len));
+                    }
+                    function replaceSuffix(s, os, ns) {
+                        return prefix(s, s.indexOf(os)).concat(ns);
+                    }
+                    function startsWith(s, prefix) {
+                        return (s != null) && (s.indexOf(prefix) == 0);
+                    }
+                    function endsWith(s, suffix) {
+                        var i = s.lastIndexOf(suffix);
+                        return  (i != -1) && (i == (s.length - suffix.length));
+                    }
+                    function defined(s) {
+                        return (s != null) && (s != "null") && (s.length > 0);
+                    }
+                    var JFXPAR = "javafx.param";
+                    var JFXPARN = "name";
+                    var JFXPARV = "value";
+
+                    var params = new java.lang.StringBuilder();
+                    var args = new java.lang.StringBuilder();
+                    var keys = project.getProperties().keys();
+                    while(keys.hasMoreElements()) {
+                        var pn = new String(keys.nextElement());
+                        if(startsWith(pn, JFXPAR) && endsWith(pn, JFXPARN)) {
+                            var propn = new String(project.getProperty(pn));
+                            if(defined(propn)) {
+                                var pv = replaceSuffix(pn, JFXPARN, JFXPARV);
+                                var propv = new String(project.getProperty(pv));
+                                if(defined(propv)) {
+                                    params.append("\n        <param name=\"");
+                                    params.append(propn);
+                                    params.append("\" value=\"");
+                                    params.append(propv);
+                                    params.append("\"/>");
+                                    args.append("\n        <argument>");
+                                    args.append(propn);
+                                    args.append("=");
+                                    args.append(propv);
+                                    args.append("</argument>");
+                                } else {
+                                    params.append("\n        <param name=\"");
+                                    params.append(propn);
+                                    params.append("\" value=\"\"/>");
+                                    args.append("\n        <argument>");
+                                    args.append(propn);
+                                    args.append("</argument>");
+                                }
+                            }
+                        }
+                    }
+                    project.setProperty("applet-params-token", new String(params.toString()));
+                    project.setProperty("application-args-token", new String(args.toString()));
+                ]]>
+            </script>
+            <local name="application.desc.processed"/>
+            <condition property="application.desc.processed" value="${application.desc}" else="Swing applet embedding JavaFX components.">
+                <isset property="application.desc"/>
+            </condition>
+            <filterchain id="jnlp.template.filter">
+                <replacetokens>
+                    <token key="NAME" value="${dist.filename}"/>
+                    <token key="MAINCLASS" value="${main.class}"/>
+                    <token key="FILESIZE" value="${dist.jar.size}"/>
+                    <token key="VENDOR" value="${application.vendor}"/>
+                    <token key="TITLE" value="${application.title}"/>
+                    <token key="DESCRIPTION" value="${application.desc.processed}"/>
+                    <token key="WIDTH" value="${javafx.run.width}"/>
+                    <token key="HEIGHT" value="${javafx.run.height}"/>
+                    <token key="PERMISSIONS" value="${permissions-elevated-token}"/>
+                    <token key="OFFLINE" value="${offline-allowed-token}"/>
+                    <token key="UPDATEMODE" value="${update-mode-background-token}"/>
+                    <token key="ICON" value="${icon-token}"/>
+                    <token key="VMARGS" value="${vmargs-token}"/>
+                    <token key="PARAMETERS" value="${applet-params-token}"/>
+                    <token key="ARGUMENTS" value="${application-args-token}"/>
+                </replacetokens>
+            </filterchain>
+            <copy file="${basedir}${file.separator}nbproject${file.separator}templates${file.separator}FXSwingTemplateApplication.jnlp" 
+                    tofile="${dist.dir}${file.separator}${dist.filename}_application.jnlp" >
+                    <filterchain refid="jnlp.template.filter"/>
+            </copy>        
+            <copy file="${basedir}${file.separator}nbproject${file.separator}templates${file.separator}FXSwingTemplateApplet.jnlp" 
+                    tofile="${dist.dir}${file.separator}${dist.filename}_applet.jnlp" >
+                    <filterchain refid="jnlp.template.filter"/>
+            </copy>        
+            <copy file="${basedir}${file.separator}nbproject${file.separator}templates${file.separator}FXSwingTemplate.html" 
+                    tofile="${dist.dir}${file.separator}${dist.filename}.html" >
+                    <filterchain refid="jnlp.template.filter"/>
+            </copy>
+            <echo message="JavaScript: deploy-deploy-swing 2" level="verbose"/>
+            <script language="javascript">
+                <![CDATA[
+                    function startsWith(s, prefix) {
+                        return (s != null) && (s.indexOf(prefix) == 0);
+                    }
+                    function defined(s) {
+                        return (s != null) && (s != "null") && (s.length > 0);
+                    }
+                    var PREF = "file:";
+                    var doCopyIcon = new String(project.getProperty("local-icon-filename-available"));
+                    if(defined(doCopyIcon)) {
+                        var iconProp = new String(project.getProperty("javafx.deploy.icon"));
+                        if(startsWith(iconProp, PREF)) {
+                            iconProp = iconProp.slice(PREF.length);
+                        }
+                        while(iconProp.charAt(0) == "/") {
+                            iconProp = iconProp.slice(1);
+                        }
+                        var S = java.io.File.separator;
+                        var baseDir = new String(project.getProperty("basedir"));
+                        var distDir = new String(project.getProperty("dist.dir"));
+                        var copyTask = new String(project.createTask("copy"));
+                        var source = new java.io.File(iconProp);
+                        var target = new java.io.File(baseDir.concat(S).concat(distDir));
+                        copyTask.setFile(source);
+                        copyTask.setTodir(target);
+                        copyTask.setFlatten(true);
+                        copyTask.setFailOnError(false);
+                        copyTask.perform();
+                    }
+                    var doCopyHTMLFrom = new String(project.getProperty("html-template-available"));
+                    var doCopyHTMLTo = new String(project.getProperty("html-template-processed-available"));
+                    if(defined(doCopyHTMLFrom) && defined(doCopyHTMLTo)) {
+                        var htmlFrom = new String(project.getProperty("javafx.run.htmltemplate"));
+                        if(startsWith(htmlFrom, PREF)) {
+                            htmlFrom = htmlFrom.slice(PREF.length);
+                        }
+                        while(startsWith(htmlFrom, "/")) {
+                            htmlFrom = htmlFrom.slice(1);
+                        }
+                        var htmlTo = new String(project.getProperty("javafx.run.htmltemplate.processed"));
+                        if(startsWith(htmlTo, PREF)) {
+                            htmlTo = htmlTo.slice(PREF.length);
+                        }
+                        while(startsWith(htmlTo, "/")) {
+                            htmlTo = htmlTo.slice(1);
+                        }
+                        var copyTask = project.createTask("copy");
+                        var source = new java.io.File(htmlFrom);
+                        var target = new java.io.File(htmlTo);
+                        copyTask.setFile(source);
+                        copyTask.setTofile(target);
+                        copyTask.setFailOnError(false);
+                        copyTask.perform();
+                    }
+                ]]>
+            </script>
+            <antcall target="-post-jfx-deploy"/>
+        </sequential>
+    </macrodef>
+
+
+    <!-- Fallback Project Deployment Macros To Support At Least Partially JDKs Without JavaScript Support -->
+    
+    <macrodef name="fallback-deploy-application-def">
+        <sequential>
+            <echo message="Warning: Parameters (if any) not passed to &lt;fx:application&gt; in fallback build mode due to JDK missing JavaScript support."/>
+            <fx:application id="fxApp"
+                name="${application.title}"
+                mainClass="${javafx.main.class}"
+                fallbackClass="${javafx.fallback.class}">
+                <!-- PARAMETERS NOT PASSED IN FALLBACK -->
+            </fx:application>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="fallback-deploy-application-def-preloader">
+        <sequential>
+            <echo message="Warning: Parameters (if any) not passed to &lt;fx:application&gt; in fallback build mode due to JDK missing JavaScript support."/>
+            <fx:application id="fxApp"
+                name="${application.title}"
+                mainClass="${javafx.main.class}"
+                preloaderClass="${javafx.preloader.class}"
+                fallbackClass="${javafx.fallback.class}">
+                <!-- PARAMETERS NOT PASSED IN FALLBACK -->
+            </fx:application>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="fallback-deploy-application-def-swing">
+        <sequential>
+            <echo message="Warning: Parameters (if any) not passed to &lt;fx:application&gt; in fallback build mode due to JDK missing JavaScript support."/>
+            <fx:application id="fxApp"
+                name="${application.title}"
+                mainClass="${main.class}"
+                fallbackClass="${javafx.fallback.class}"
+                toolkit="swing">
+                <!-- PARAMETERS NOT PASSED IN FALLBACK -->
+            </fx:application>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="fallback-deploy-resources">
+        <sequential>
+            <fx:resources id="appRes">
+                <fx:fileset requiredFor="startup" dir="${jfx.deployment.dir}">
+                    <include name="${jfx.deployment.jar}"/>
+                    <include name="lib${file.separator}*.jar"/>
+                    <exclude name="lib${file.separator}${jfx.deployment.jar}"/>
+                </fx:fileset>
+            </fx:resources>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="fallback-deploy-resources-preloader">
+        <sequential>
+            <fx:resources id="appRes">
+                <fx:fileset requiredFor="preloader" dir="${jfx.deployment.dir}">
+                    <include name="lib${file.separator}${javafx.preloader.jar.filename}"/>
+                </fx:fileset>
+                <fx:fileset requiredFor="startup" dir="${jfx.deployment.dir}">
+                    <include name="${jfx.deployment.jar}"/>
+                    <include name="lib${file.separator}*.jar"/>
+                    <exclude name="lib${file.separator}${javafx.preloader.jar.filename}"/>
+                    <exclude name="lib${file.separator}${jfx.deployment.jar}"/>
+                </fx:fileset>
+            </fx:resources>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="fallback-deploy-jar">
+        <sequential>
+            <antcall target="-pre-jfx-jar"/>
+            <fx:jar destfile="${jfx.deployment.dir}${file.separator}${jfx.deployment.jar}">
+                <fx:application refid="fxApp"/>
+                <fx:resources refid="appRes"/>
+                <fileset dir="${build.classes.dir}">
+                    <exclude name="**${file.separator}*.${css-exclude-ext}"/>
+                </fileset>
+                <manifest>
+                    <attribute name="Implementation-Vendor" value="${application.vendor}"/>
+                    <attribute name="Implementation-Title" value="${application.title}"/>
+                    <attribute name="Implementation-Version" value="1.0"/>
+                </manifest>
+            </fx:jar>
+            <antcall target="-post-jfx-jar"/>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="fallback-deploy-deploy">
+        <sequential>
+            <antcall target="-pre-jfx-deploy"/>
+            <echo message="Warning: JVM Arguments and Callbacks (if any) not passed to &lt;fx:deploy&gt; in fallback build mode due to JDK missing JavaScript support."/>
+            <fx:deploy width="${javafx.width}" height="${javafx.height}"
+                      outdir="${jfx.deployment.dir}" embedjnlp="true" updatemode="${update-mode}"
+                      outfile="${application.title}" includeDT="${javafx.deploy.includeDT}">
+                <fx:application refid="fxApp"/>
+                <fx:resources refid="appRes"/>
+                <fx:info title="${application.title}" vendor="${application.vendor}"/>
+                <fx:permissions elevated="${permissions.elevated}"/>
+                <fx:preferences shortcut="${javafx.deploy.adddesktopshortcut}" install="${javafx.deploy.installpermanently}" menu="${javafx.deploy.addstartmenushortcut}"/>
+                <!-- PLATFORM NOT PASSED IN FALLBACK -->
+                <!-- CALLBACKS NOT PASSED IN FALLBACK -->
+            </fx:deploy>
+            <antcall target="-post-jfx-deploy"/>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="fallback-deploy-deploy-template">
+        <sequential>
+            <antcall target="-pre-jfx-deploy"/>
+            <echo message="Warning: JVM Arguments and Callbacks (if any) not passed to &lt;fx:deploy&gt; in fallback build mode due to JDK missing JavaScript support."/>
+            <deploy-process-template/>
+            <fx:deploy width="${javafx.width}" height="${javafx.height}"
+                      outdir="${jfx.deployment.dir}" embedjnlp="true" updatemode="${update-mode}"
+                      outfile="${application.title}" includeDT="${javafx.deploy.includeDT}">
+                <fx:application refid="fxApp"/>
+                <fx:resources refid="appRes"/>
+                <fx:info title="${application.title}" vendor="${application.vendor}"/>
+                <fx:permissions elevated="${permissions.elevated}"/>
+                <fx:preferences shortcut="${javafx.deploy.adddesktopshortcut}" install="${javafx.deploy.installpermanently}" menu="${javafx.deploy.addstartmenushortcut}"/>
+                <fx:template file="${javafx.run.htmltemplate}" tofile="${javafx.run.htmltemplate.processed}"/>
+                <!-- PLATFORM NOT PASSED IN FALLBACK -->
+                <!-- CALLBACKS NOT PASSED IN FALLBACK -->
+            </fx:deploy>
+            <antcall target="-post-jfx-deploy"/>
+        </sequential>
+    </macrodef>
+
+
+    <!-- Project Deployment Targets -->
+
+    <target name="-check-sign" depends="-check-project,-javafx-init-keystore" if="javafx.signed.true+signjars.task.available">
+        <condition property="sign-nopreloader-notemplate">
+            <and>
+                <isset property="app-without-preloader"/>
+                <not><isset property="html-template-available"/></not>
+                <not><isset property="fx-in-swing-app-workaround"/></not>
+                <not><isset property="use-blob-signing"/></not>
+            </and>
+        </condition>
+        <condition property="sign-preloader-notemplate">
+            <and>
+                <isset property="app-with-preloader"/>
+                <not><isset property="html-template-available"/></not>
+                <not><isset property="fx-in-swing-app-workaround"/></not>
+                <not><isset property="use-blob-signing"/></not>
+            </and>
+        </condition>
+        <condition property="sign-nopreloader-template">
+            <and>
+                <isset property="app-without-preloader"/>
+                <isset property="html-template-available"/>
+                <not><isset property="fx-in-swing-app-workaround"/></not>
+                <not><isset property="use-blob-signing"/></not>
+            </and>
+        </condition>
+        <condition property="sign-preloader-template">
+            <and>
+                <isset property="app-with-preloader"/>
+                <isset property="html-template-available"/>
+                <not><isset property="fx-in-swing-app-workaround"/></not>
+                <not><isset property="use-blob-signing"/></not>
+            </and>
+        </condition>
+        <condition property="sign-nopreloader-notemplate-swing">
+            <and>
+                <isset property="app-without-preloader"/>
+                <not><isset property="html-template-available"/></not>
+                <isset property="fx-in-swing-app-workaround"/>
+                <not><isset property="use-blob-signing"/></not>
+            </and>
+        </condition>
+        <condition property="sign-nopreloader-template-swing">
+            <and>
+                <isset property="app-without-preloader"/>
+                <isset property="html-template-available"/>
+                <isset property="fx-in-swing-app-workaround"/>
+                <not><isset property="use-blob-signing"/></not>
+            </and>
+        </condition>
+        <condition property="sign-blob-nopreloader-notemplate">
+            <and>
+                <isset property="app-without-preloader"/>
+                <not><isset property="html-template-available"/></not>
+                <not><isset property="fx-in-swing-app-workaround"/></not>
+                <isset property="use-blob-signing"/>
+            </and>
+        </condition>
+        <condition property="sign-blob-preloader-notemplate">
+            <and>
+                <isset property="app-with-preloader"/>
+                <not><isset property="html-template-available"/></not>
+                <not><isset property="fx-in-swing-app-workaround"/></not>
+                <isset property="use-blob-signing"/>
+            </and>
+        </condition>
+        <condition property="sign-blob-nopreloader-template">
+            <and>
+                <isset property="app-without-preloader"/>
+                <isset property="html-template-available"/>
+                <not><isset property="fx-in-swing-app-workaround"/></not>
+                <isset property="use-blob-signing"/>
+            </and>
+        </condition>
+        <condition property="sign-blob-preloader-template">
+            <and>
+                <isset property="app-with-preloader"/>
+                <isset property="html-template-available"/>
+                <not><isset property="fx-in-swing-app-workaround"/></not>
+                <isset property="use-blob-signing"/>
+            </and>
+        </condition>
+        <condition property="sign-blob-nopreloader-notemplate-swing">
+            <and>
+                <isset property="app-without-preloader"/>
+                <not><isset property="html-template-available"/></not>
+                <isset property="fx-in-swing-app-workaround"/>
+                <isset property="use-blob-signing"/>
+            </and>
+        </condition>
+        <condition property="sign-blob-nopreloader-template-swing">
+            <and>
+                <isset property="app-without-preloader"/>
+                <isset property="html-template-available"/>
+                <isset property="fx-in-swing-app-workaround"/>
+                <isset property="use-blob-signing"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-check-nosign" depends="-check-project">
+        <condition property="nosign-nopreloader-notemplate">
+            <and>
+                <isset property="app-without-preloader"/>
+                <not><isset property="html-template-available"/></not>
+                <not><isset property="javafx.signed.true"/></not>
+                <not><isset property="fx-in-swing-app-workaround"/></not>
+            </and>
+        </condition>
+        <condition property="nosign-preloader-notemplate">
+            <and>
+                <isset property="app-with-preloader"/>
+                <not><isset property="html-template-available"/></not>
+                <not><isset property="javafx.signed.true"/></not>
+                <not><isset property="fx-in-swing-app-workaround"/></not>
+            </and>
+        </condition>
+        <condition property="nosign-nopreloader-template">
+            <and>
+                <isset property="app-without-preloader"/>
+                <isset property="html-template-available"/>
+                <not><isset property="javafx.signed.true"/></not>
+                <not><isset property="fx-in-swing-app-workaround"/></not>
+            </and>
+        </condition>
+        <condition property="nosign-preloader-template">
+            <and>
+                <isset property="app-with-preloader"/>
+                <isset property="html-template-available"/>
+                <not><isset property="javafx.signed.true"/></not>
+                <not><isset property="fx-in-swing-app-workaround"/></not>
+            </and>
+        </condition>
+        <condition property="nosign-nopreloader-notemplate-swing">
+            <and>
+                <isset property="app-without-preloader"/>
+                <not><isset property="html-template-available"/></not>
+                <not><isset property="javafx.signed.true"/></not>
+                <isset property="fx-in-swing-app-workaround"/>
+            </and>
+        </condition>
+        <condition property="nosign-nopreloader-template-swing">
+            <and>
+                <isset property="app-without-preloader"/>
+                <isset property="html-template-available"/>
+                <not><isset property="javafx.signed.true"/></not>
+                <isset property="fx-in-swing-app-workaround"/>
+            </and>
+        </condition>
+    </target>
+
+
+    <!-- WITH SIGNING -->
+
+    <!-- project without preloader -->
+    <!-- no html template -->
+    <target name="-deploy-app-sign-nopreloader-notemplate" depends="-check-sign" if="sign-nopreloader-notemplate" unless="preloader-app">
+        <echo message="-deploy-app-sign-nopreloader-notemplate" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-sign/>
+        <deploy-deploy/>
+    </target>
+    <target name="-deploy-app-sign-blob-nopreloader-notemplate" depends="-check-sign" if="sign-blob-nopreloader-notemplate" unless="preloader-app">
+        <echo message="-deploy-app-sign-blob-nopreloader-notemplate" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-sign-blob/>
+        <deploy-deploy/>
+    </target>
+
+    <!-- project with preloader -->
+    <!-- no html template -->
+    <target name="-deploy-app-sign-preloader-notemplate" depends="-check-sign" if="sign-preloader-notemplate" unless="preloader-app">
+        <echo message="-deploy-app-sign-preloader-notemplate" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-sign-preloader/>
+        <deploy-deploy/>
+    </target>
+    <target name="-deploy-app-sign-blob-preloader-notemplate" depends="-check-sign" if="sign-blob-preloader-notemplate" unless="preloader-app">
+        <echo message="-deploy-app-sign-blob-preloader-notemplate" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-sign-blob-preloader/>
+        <deploy-deploy/>
+    </target>
+
+    <!-- project without preloader -->
+    <!-- html template -->
+    <target name="-deploy-app-sign-nopreloader-template" depends="-check-sign" if="sign-nopreloader-template" unless="preloader-app">
+        <echo message="-deploy-app-sign-nopreloader-template" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-sign/>
+        <deploy-process-template/>
+        <deploy-deploy/>
+    </target>
+    <target name="-deploy-app-sign-blob-nopreloader-template" depends="-check-sign" if="sign-blob-nopreloader-template" unless="preloader-app">
+        <echo message="-deploy-app-sign-blob-nopreloader-template" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-sign-blob/>
+        <deploy-process-template/>
+        <deploy-deploy/>
+    </target>
+
+    <!-- project with preloader -->
+    <!-- html template -->
+    <target name="-deploy-app-sign-preloader-template" depends="-check-sign" if="sign-preloader-template" unless="preloader-app">
+        <echo message="-deploy-app-sign-preloader-template" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-sign-preloader/>
+        <deploy-process-template/>
+        <deploy-deploy/>
+    </target>
+    <target name="-deploy-app-sign-blob-preloader-template" depends="-check-sign" if="sign-blob-preloader-template" unless="preloader-app">
+        <echo message="-deploy-app-sign-blob-preloader-template" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-sign-blob-preloader/>
+        <deploy-process-template/>
+        <deploy-deploy/>
+    </target>
+
+    <!-- project without preloader -->
+    <!-- no html template -->
+    <!-- FX in Swing app -->
+    <target name="-deploy-app-sign-nopreloader-notemplate-swing" depends="-check-sign" if="sign-nopreloader-notemplate-swing" unless="preloader-app-no-workaround">
+        <echo message="-deploy-app-sign-nopreloader-notemplate-swing" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-sign/>
+        <deploy-deploy-swing/>
+    </target>
+    <target name="-deploy-app-sign-blob-nopreloader-notemplate-swing" depends="-check-sign" if="sign-blob-nopreloader-notemplate-swing" unless="preloader-app-no-workaround">
+        <echo message="-deploy-app-sign-blob-nopreloader-notemplate-swing" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-sign-blob/>
+        <deploy-deploy-swing/>
+    </target>
+
+    <!-- project without preloader -->
+    <!-- html template -->
+    <!-- FX in Swing app -->
+    <target name="-deploy-app-sign-nopreloader-template-swing" depends="-check-sign" if="sign-nopreloader-template-swing" unless="preloader-app-no-workaround">
+        <echo message="-deploy-app-sign-nopreloader-template-swing" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-sign/>
+        <deploy-process-template/>
+        <deploy-deploy-swing/>
+    </target>
+    <target name="-deploy-app-sign-blob-nopreloader-template-swing" depends="-check-sign" if="sign-blob-nopreloader-template-swing" unless="preloader-app-no-workaround">
+        <echo message="-deploy-app-sign-blob-nopreloader-template-swing" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-sign-blob/>
+        <deploy-process-template/>
+        <deploy-deploy-swing/>
+    </target>
+
+
+    <!-- NO SIGNING -->
+
+    <!-- project without preloader -->
+    <!-- no html template -->
+    <target name="-deploy-app-nosign-nopreloader-notemplate" depends="-check-nosign" if="nosign-nopreloader-notemplate" unless="preloader-app">
+        <echo message="-deploy-app-nosign-nopreloader-notemplate" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-deploy/>
+    </target>
+
+    <!-- project with preloader -->
+    <!-- no html template -->
+    <target name="-deploy-app-nosign-preloader-notemplate" depends="-check-nosign" if="nosign-preloader-notemplate" unless="preloader-app">
+        <echo message="-deploy-app-nosign-preloader-notemplate" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-deploy/>
+    </target>
+
+    <!-- project without preloader -->
+    <!-- html template -->
+    <target name="-deploy-app-nosign-nopreloader-template" depends="-check-nosign" if="nosign-nopreloader-template" unless="preloader-app">
+        <echo message="-deploy-app-nosign-nopreloader-template" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-process-template/>
+        <deploy-deploy/>
+    </target>
+
+    <!-- project with preloader -->
+    <!-- html template -->
+    <target name="-deploy-app-nosign-preloader-template" depends="-check-nosign" if="nosign-preloader-template" unless="preloader-app">
+        <echo message="-deploy-app-nosign-preloader-template" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-process-template/>
+        <deploy-deploy/>
+    </target>
+
+    <!-- project without preloader -->
+    <!-- no html template -->
+    <!-- FX in Swing app -->
+    <target name="-deploy-app-nosign-nopreloader-notemplate-swing" depends="-check-nosign" if="nosign-nopreloader-notemplate-swing" unless="preloader-app-no-workaround">
+        <echo message="-deploy-app-nosign-nopreloader-notemplate-swing" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-deploy-swing/>
+    </target>
+
+    <!-- project without preloader -->
+    <!-- html template -->
+    <!-- FX in Swing app -->
+    <target name="-deploy-app-nosign-nopreloader-template-swing" depends="-check-nosign" if="nosign-nopreloader-template-swing" unless="preloader-app-no-workaround">
+        <echo message="-deploy-app-nosign-nopreloader-template-swing" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <deploy-jar/>
+        <deploy-process-template/>
+        <deploy-deploy-swing/>
+    </target>
+
+
+    <!-- FALLBACK (NO JAVASCRIPT) TARGETS WITH SIGNING -->
+
+    <target name="-check-fallback-sign-deploy-swing-possible" depends="-check-sign">
+        <local name="fail-deploy-swing-possible"/>
+        <condition property="fail-deploy-swing-possible">
+            <and>
+                <or>
+                    <isset property="sign-nopreloader-notemplate-swing"/>
+                    <isset property="sign-nopreloader-template-swing"/>
+                </or>
+                <not><isset property="have-fx-ant-api-1.2"/></not>
+            </and>
+        </condition>
+        <fail message="Error: JavaFX SDK version 2.2 or newer is needed to deploy FX-in-Swing on JDK without JavaScript support." 
+              if="fail-deploy-swing-possible"/>
+    </target>
+    
+    <!-- FALLBACK project without preloader -->
+    <!-- FALLBACK no html template -->
+    <target name="-fallback-deploy-app-sign-nopreloader-notemplate" depends="-check-sign" if="sign-nopreloader-notemplate" unless="preloader-app">
+        <echo message="-fallback-deploy-app-sign-nopreloader-notemplate" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def/>
+        <fallback-deploy-resources/>
+        <fallback-deploy-jar/>
+        <deploy-sign/>
+        <fallback-deploy-deploy/>
+    </target>
+    <target name="-fallback-deploy-app-sign-blob-nopreloader-notemplate" depends="-check-sign" if="sign-blob-nopreloader-notemplate" unless="preloader-app">
+        <echo message="-fallback-deploy-app-sign-blob-nopreloader-notemplate" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def/>
+        <fallback-deploy-resources/>
+        <fallback-deploy-jar/>
+        <deploy-sign-blob/>
+        <fallback-deploy-deploy/>
+    </target>
+
+    <!-- FALLBACK project with preloader -->
+    <!-- FALLBACK no html template -->
+    <target name="-fallback-deploy-app-sign-preloader-notemplate" depends="-check-sign" if="sign-preloader-notemplate" unless="preloader-app">
+        <echo message="-fallback-deploy-app-sign-preloader-notemplate" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def-preloader/>
+        <fallback-deploy-resources-preloader/>
+        <fallback-deploy-jar/>
+        <deploy-sign-preloader/>
+        <fallback-deploy-deploy/>
+    </target>
+    <target name="-fallback-deploy-app-sign-blob-preloader-notemplate" depends="-check-sign" if="sign-blob-preloader-notemplate" unless="preloader-app">
+        <echo message="-fallback-deploy-app-sign-blob-preloader-notemplate" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def-preloader/>
+        <fallback-deploy-resources-preloader/>
+        <fallback-deploy-jar/>
+        <deploy-sign-blob-preloader/>
+        <fallback-deploy-deploy/>
+    </target>
+
+    <!-- FALLBACK project without preloader -->
+    <!-- FALLBACK html template -->
+    <target name="-fallback-deploy-app-sign-nopreloader-template" depends="-check-sign" if="sign-nopreloader-template" unless="preloader-app">
+        <echo message="-fallback-deploy-app-sign-nopreloader-template" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def/>
+        <fallback-deploy-resources/>
+        <fallback-deploy-jar/>
+        <deploy-sign/>
+        <fallback-deploy-deploy-template/>
+    </target>
+    <target name="-fallback-deploy-app-sign-blob-nopreloader-template" depends="-check-sign" if="sign-blob-nopreloader-template" unless="preloader-app">
+        <echo message="-fallback-deploy-app-sign-blob-nopreloader-template" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def/>
+        <fallback-deploy-resources/>
+        <fallback-deploy-jar/>
+        <deploy-sign-blob/>
+        <fallback-deploy-deploy-template/>
+    </target>
+
+    <!-- FALLBACK project with preloader -->
+    <!-- FALLBACK html template -->
+    <target name="-fallback-deploy-app-sign-preloader-template" depends="-check-sign" if="sign-preloader-template" unless="preloader-app">
+        <echo message="-fallback-deploy-app-sign-preloader-template" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def-preloader/>
+        <fallback-deploy-resources-preloader/>
+        <fallback-deploy-jar/>
+        <deploy-sign-preloader/>
+        <fallback-deploy-deploy-template/>
+    </target>
+    <target name="-fallback-deploy-app-sign-blob-preloader-template" depends="-check-sign" if="sign-blob-preloader-template" unless="preloader-app">
+        <echo message="-fallback-deploy-app-sign-blob-preloader-template" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def-preloader/>
+        <fallback-deploy-resources-preloader/>
+        <fallback-deploy-jar/>
+        <deploy-sign-blob-preloader/>
+        <fallback-deploy-deploy-template/>
+    </target>
+
+    <!-- FALLBACK project without preloader -->
+    <!-- FALLBACK no html template -->
+    <!-- FALLBACK FX in Swing app -->
+    <target name="-fallback-deploy-app-sign-nopreloader-notemplate-swing" depends="-check-fallback-sign-deploy-swing-possible" if="sign-nopreloader-notemplate-swing" unless="preloader-app-no-workaround">
+        <echo message="-fallback-deploy-app-sign-nopreloader-notemplate-swing" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def-swing/>
+        <fallback-deploy-resources/>
+        <fallback-deploy-jar/>
+        <deploy-sign/>
+        <fallback-deploy-deploy/>
+    </target>
+    <target name="-fallback-deploy-app-sign-blob-nopreloader-notemplate-swing" depends="-check-fallback-sign-deploy-swing-possible" if="sign-nopreloader-notemplate-swing" unless="preloader-app-no-workaround">
+        <echo message="-fallback-deploy-app-sign-blob-nopreloader-notemplate-swing" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def-swing/>
+        <fallback-deploy-resources/>
+        <fallback-deploy-jar/>
+        <deploy-sign-blob/>
+        <fallback-deploy-deploy/>
+    </target>
+
+    <!-- FALLBACK project without preloader -->
+    <!-- FALLBACK html template -->
+    <!-- FALLBACK FX in Swing app -->
+    <target name="-fallback-deploy-app-sign-nopreloader-template-swing" depends="-check-fallback-sign-deploy-swing-possible" if="sign-nopreloader-template-swing" unless="preloader-app-no-workaround">
+        <echo message="-fallback-deploy-app-sign-nopreloader-template-swing" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def-swing/>
+        <fallback-deploy-resources/>
+        <fallback-deploy-jar/>
+        <deploy-sign/>
+        <fallback-deploy-deploy-template/>
+    </target>
+    <target name="-fallback-deploy-app-sign-blob-nopreloader-template-swing" depends="-check-fallback-sign-deploy-swing-possible" if="sign-nopreloader-template-swing" unless="preloader-app-no-workaround">
+        <echo message="-fallback-deploy-app-sign-blob-nopreloader-template-swing" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def-swing/>
+        <fallback-deploy-resources/>
+        <fallback-deploy-jar/>
+        <deploy-sign-blob/>
+        <fallback-deploy-deploy-template/>
+    </target>
+
+
+    <!-- FALLBACK (NO JAVASCRIPT) TARGETS NO SIGNING -->
+
+    <target name="-check-fallback-nosign-deploy-swing-possible" depends="-check-nosign">
+        <local name="fail-deploy-swing-possible"/>
+        <condition property="fail-deploy-swing-possible">
+            <and>
+                <or>
+                    <isset property="nosign-nopreloader-notemplate-swing"/>
+                    <isset property="nosign-nopreloader-template-swing"/>
+                </or>
+                <not><isset property="have-fx-ant-api-1.2"/></not>
+            </and>
+        </condition>
+        <fail message="Error: JavaFX SDK version 2.2 or newer is needed to deploy FX-in-Swing on JDK without JavaScript support." 
+              if="fail-deploy-swing-possible"/>
+    </target>
+
+    <!-- FALLBACK project without preloader -->
+    <!-- FALLBACK no html template -->
+    <target name="-fallback-deploy-app-nosign-nopreloader-notemplate" depends="-check-nosign" if="nosign-nopreloader-notemplate" unless="preloader-app">
+        <echo message="-fallback-deploy-app-nosign-nopreloader-notemplate" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def/>
+        <fallback-deploy-resources/>
+        <fallback-deploy-jar/>
+        <fallback-deploy-deploy/>
+    </target>
+
+    <!-- FALLBACK project with preloader -->
+    <!-- FALLBACK no html template -->
+    <target name="-fallback-deploy-app-nosign-preloader-notemplate" depends="-check-nosign" if="nosign-preloader-notemplate" unless="preloader-app">
+        <echo message="-fallback-deploy-app-nosign-preloader-notemplate" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def-preloader/>
+        <fallback-deploy-resources-preloader/>
+        <fallback-deploy-jar/>
+        <fallback-deploy-deploy/>
+    </target>
+
+    <!-- FALLBACK project without preloader -->
+    <!-- FALLBACK html template -->
+    <target name="-fallback-deploy-app-nosign-nopreloader-template" depends="-check-nosign" if="nosign-nopreloader-template" unless="preloader-app">
+        <echo message="-fallback-deploy-app-nosign-nopreloader-template" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def/>
+        <fallback-deploy-resources/>
+        <fallback-deploy-jar/>
+        <fallback-deploy-deploy-template/>
+    </target>
+
+    <!-- FALLBACK project with preloader -->
+    <!-- FALLBACK html template -->
+    <target name="-fallback-deploy-app-nosign-preloader-template" depends="-check-nosign" if="nosign-preloader-template" unless="preloader-app">
+        <echo message="-fallback-deploy-app-nosign-preloader-template" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def-preloader/>
+        <fallback-deploy-resources-preloader/>
+        <fallback-deploy-jar/>
+        <fallback-deploy-deploy-template/>
+    </target>
+
+    <!-- FALLBACK project without preloader -->
+    <!-- FALLBACK no html template -->
+    <!-- FALLBACK FX in Swing app -->
+    <target name="-fallback-deploy-app-nosign-nopreloader-notemplate-swing" depends="-check-fallback-nosign-deploy-swing-possible" if="nosign-nopreloader-notemplate-swing" unless="preloader-app-no-workaround">
+        <echo message="-fallback-deploy-app-nosign-nopreloader-notemplate-swing" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def-swing/>
+        <fallback-deploy-resources/>
+        <fallback-deploy-jar/>
+        <fallback-deploy-deploy/>
+    </target>
+
+    <!-- FALLBACK project without preloader -->
+    <!-- FALLBACK html template -->
+    <!-- FALLBACK FX in Swing app -->
+    <target name="-fallback-deploy-app-nosign-nopreloader-template-swing" depends="-check-fallback-nosign-deploy-swing-possible" if="nosign-nopreloader-template-swing" unless="preloader-app-no-workaround">
+        <echo message="-fallback-deploy-app-nosign-nopreloader-template-swing" level="verbose"/>
+        <deploy-defines/>
+        <deploy-preprocess/>
+        <fallback-deploy-application-def-swing/>
+        <fallback-deploy-resources/>
+        <fallback-deploy-jar/>
+        <fallback-deploy-deploy-template/>
+    </target>
+
+
+    <!-- Project Build Targets -->
+
+    <target name="jfx-build" depends="-jfx-do-compile, -jfx-do-jar, -jfx-do-post-jar"/>
+    <target name="jfx-build-noscript" depends="-set-fallback-no-javascript, -jfx-do-compile, -jfx-do-jar, -jfx-do-post-jar"/>
+    
+    <target name="jfx-rebuild" depends="clean, -jfx-do-compile, -jfx-do-jar, -jfx-do-post-jar"/>
+    <target name="jfx-rebuild-noscript" depends="-set-fallback-no-javascript, clean, -jfx-do-compile, -jfx-do-jar, -jfx-do-post-jar"/>
+
+    <target name="jfx-build-native" depends="-set-do-build-native-package, -check-ant-jre-supports-native-packaging, -check-native-packager-external-tools, jfx-rebuild"/>
+    <target name="jfx-build-native-noscript" depends="-set-do-build-native-package, -check-ant-jre-supports-native-packaging, -check-native-packager-external-tools, jfx-rebuild-noscript"/>
+
+    <target name="build-native">
+        <property name="javafx.native.bundling.type" value="${native.bundling.type}"/>
+        <antcall target="jfx-build-native"/>
+    </target>
+    <target name="build-native-noscript">
+        <property name="javafx.native.bundling.type" value="${native.bundling.type}"/>        
+        <antcall target="jfx-build-native-noscript"/>
+    </target>
+    
+    <target name="-check-do-jar">
+        <condition property="do-jar-false">
+            <and>
+                <isset property="do.jar"/>
+                <equals arg1="${do.jar}" arg2="false"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-set-fallback-no-javascript">
+        <property name="fallback.no.javascript" value="true"/>
+        <echo message="Warning: Using fallback build infrastructure due to default JDK missing JavaScript support."/>
+    </target>
+    <target name="-jfx-do-compile" depends="-check-do-jar" if="do-jar-false">
+        <antcall target="compile"/>
+    </target>
+    <target name="-jfx-do-jar" depends="-check-do-jar" unless="do-jar-false">
+        <antcall target="jar"/>
+    </target>
+    <target name="-jfx-do-post-jar" depends="-init-check,-check-project" if="preloader-app">
+        <!-- Preloaders are created using SE copylibs task that creates readme file relevant for SE only -->
+        <delete file="${basedir}${file.separator}${dist.dir}${file.separator}README.TXT"/>
+    </target>
+    
+    <target name="-set-do-build-native-package">
+        <property name="do.build.native.package" value="true"/>
+        <echo message="do.build.native.package = ${do.build.native.package}" level="verbose"/>
+    </target>
+    <target name="-check-ant-jre-supports-native-packaging" depends="-check-ant-jre-version">
+        <fail message="Error:${line.separator}JavaFX native packager requires NetBeans to run on JDK 1.7u6 or later !" if="have-ant-jre-pre7u6"/>
+    </target>
+    
+    <target name="-call-pre-jfx-native" if="do.build.native.package">
+        <antcall target="-pre-jfx-native"/>
+    </target>
+    <target name="-call-post-jfx-native" if="do.build.native.package">
+        <antcall target="-post-jfx-native"/>
+    </target>
+
+    <target name="-check-native-bundling-type" depends="-check-operating-system" if="do.build.native.package">
+        <condition property="need.Inno.presence">
+            <and>
+                <isset property="running.on.windows"/>
+                <isset property="javafx.native.bundling.type"/>
+                <or>
+                    <equals arg1="${javafx.native.bundling.type}" arg2="all" casesensitive="false"/>
+                    <equals arg1="${javafx.native.bundling.type}" arg2="installer" casesensitive="false"/>
+                    <equals arg1="${javafx.native.bundling.type}" arg2="exe" casesensitive="false"/>
+                </or>
+            </and>
+        </condition>
+        <condition property="need.WiX.presence">
+            <and>
+                <isset property="running.on.windows"/>
+                <isset property="javafx.native.bundling.type"/>
+                <or>
+                    <equals arg1="${javafx.native.bundling.type}" arg2="all" casesensitive="false"/>
+                    <equals arg1="${javafx.native.bundling.type}" arg2="installer" casesensitive="false"/>
+                    <equals arg1="${javafx.native.bundling.type}" arg2="msi" casesensitive="false"/>
+                </or>
+            </and>
+        </condition>
+        <condition property="need.dpkg.presence">
+            <and>
+                <isset property="running.on.unix"/>
+                <isset property="javafx.native.bundling.type"/>
+                <or>
+                    <equals arg1="${javafx.native.bundling.type}" arg2="deb" casesensitive="false"/>
+                </or>
+            </and>
+        </condition>
+        <condition property="need.rpmbuild.presence">
+            <and>
+                <isset property="running.on.unix"/>
+                <isset property="javafx.native.bundling.type"/>
+                <or>
+                    <equals arg1="${javafx.native.bundling.type}" arg2="rpm" casesensitive="false"/>
+                </or>
+            </and>
+        </condition>
+        <echo message="need.Inno.presence:${need.Inno.presence}" level="verbose"/>
+        <echo message="need.WiX.presence:${need.WiX.presence}" level="verbose"/>
+        <echo message="need.dpkg.presence:${need.dpkg.presence}" level="verbose"/>
+        <echo message="need.rpmbuild.presence:${need.rpmbuild.presence}" level="verbose"/>
+    </target>
+    <target name="-check-Inno-presence" depends="-check-native-bundling-type" if="need.Inno.presence">
+        <local name="exec-output"/>
+        <local name="exec-error"/>
+        <local name="exec-result"/>
+        <exec executable="iscc" outputproperty="exec-output" failifexecutionfails="false" errorproperty="exec-error" resultproperty="exec-result"/>
+        <echo message="exec-output:${exec-output}" level="verbose"/>
+        <echo message="exec-error:${exec-error}" level="verbose"/>
+        <echo message="exec-result:${exec-result}" level="verbose"/>
+        <condition property="missing.Inno">
+            <not><and>
+                <contains string="${exec-output}" substring="Inno Setup"/>
+                <not><contains string="${exec-output}" substring="Inno Setup 1"/></not>
+                <not><contains string="${exec-output}" substring="Inno Setup 2"/></not>
+                <not><contains string="${exec-output}" substring="Inno Setup 3"/></not>
+                <not><contains string="${exec-output}" substring="Inno Setup 4"/></not>
+            </and></not>
+        </condition>
+    </target>
+    <target name="-check-WiX-presence" depends="-check-native-bundling-type" if="need.WiX.presence">
+        <local name="exec-output"/>
+        <local name="exec-error"/>
+        <local name="exec-result"/>
+        <exec executable="candle" outputproperty="exec-output" failifexecutionfails="false" errorproperty="exec-error" resultproperty="exec-result">
+            <arg value="-?"/>
+        </exec>
+        <echo message="exec-output:${exec-output}" level="verbose"/>
+        <echo message="exec-error:${exec-error}" level="verbose"/>
+        <echo message="exec-result:${exec-result}" level="verbose"/>
+        <condition property="missing.WiX">
+            <not>
+                <matches string="${exec-output}" pattern="windows\s+installer\s+xml\s+(toolset\s+)?compiler\s+version\s+3.*" casesensitive="false"/>
+            </not>
+        </condition>
+    </target>
+    <target name="-check-dpkg-presence" depends="-check-native-bundling-type" if="need.dpkg.presence">
+        <local name="exec.which.dpkg.result"/>
+        <local name="exec.which.dpkg.output"/>
+        <exec executable="command" failifexecutionfails="false" failonerror="false" resultproperty="exec.which.dpkg.result" outputproperty="exec.which.dpkg.output">
+            <arg line="-v dpkg"/>
+        </exec>
+        <condition property="missing.dpkg">
+            <not><and>
+                <isset property="exec.which.dpkg.result"/>
+                <equals arg1="${exec.which.dpkg.result}" arg2="0"/>
+                <isset property="exec.which.dpkg.output"/>
+                <not><equals arg1="${exec.which.dpkg.output}" arg2=""/></not>
+            </and></not>
+        </condition>
+    </target>
+    <target name="-check-rpmbuild-presence" depends="-check-native-bundling-type" if="need.rpmbuild.presence">
+        <local name="exec.which.rpmbuild.result"/>
+        <local name="exec.which.rpmbuild.output"/>
+        <exec executable="command" failifexecutionfails="false" failonerror="false" resultproperty="exec.which.rpmbuild.result" outputproperty="exec.which.rpmbuild.output">
+            <arg line="-v rpmbuild"/>
+        </exec>
+        <condition property="missing.rpmbuild">
+            <not><and>
+                <isset property="exec.which.rpmbuild.result"/>
+                <equals arg1="${exec.which.rpmbuild.result}" arg2="0"/>
+                <isset property="exec.which.rpmbuild.output"/>
+                <not><equals arg1="${exec.which.rpmbuild.output}" arg2=""/></not>
+            </and></not>
+        </condition>
+    </target>
+    <target name="-check-native-packager-external-tools" depends="-check-Inno-presence, -check-WiX-presence, -check-dpkg-presence, -check-rpmbuild-presence">
+        <property name="missing.Inno.message" value="JavaFX native packager requires external Inno Setup 5+ tools installed and included on PATH to create EXE installer. See http://www.jrsoftware.org/"/>
+        <property name="missing.WiX.message" value="JavaFX native packager requires external WiX 3.0+ tools installed and included on PATH to create MSI installer. See http://wix.sourceforge.net/"/>
+        <property name="missing.dpkg.message" value="JavaFX native packager requires Debian Packager tools to create DEB package, but dpkg could not be found."/>
+        <property name="missing.rpmbuild.message" value="JavaFX native packager requires RPMBuild to create RPM package, but rpmbuild could not be found."/>
+        <condition property="missing.Inno.WiX">
+            <and>
+                <isset property="missing.Inno"/>
+                <isset property="missing.WiX"/>
+            </and>
+        </condition>
+        <fail message="Error:${line.separator}${missing.Inno.message}${line.separator}${missing.WiX.message}" if="missing.Inno.WiX"/>
+        <fail message="Error:${line.separator}${missing.Inno.message}" if="missing.Inno"/>
+        <fail message="Error:${line.separator}${missing.WiX.message}" if="missing.WiX"/>
+        <fail message="Error:${line.separator}${missing.dpkg.message}" if="missing.dpkg"/>
+        <fail message="Error:${line.separator}${missing.rpmbuild.message}" if="missing.rpmbuild"/>
+    </target>
+
+    <!-- Project Run Support -->
+
+    <target name="-warn-of-preloader" depends="-check-project" if="preloader-app-no-workaround">
+        <fail message="Error:${line.separator}JavaFX 2 Preloader Project can not be executed directly.${line.separator}Please execute instead a JavaFX Application that uses the Preloader."/>
+    </target>
+    
+    <target name="-mark-project-state-running">
+        <property name="project.state.running" value="true"/>
+        <echo message="project.state.running = ${project.state.running}" level="verbose"/>
+    </target>
+    <target name="-mark-project-state-debugging">
+        <property name="project.state.debugging" value="true"/>
+        <echo message="project.state.debugging = ${project.state.debugging}" level="verbose"/>
+    </target>
+    <target name="-mark-project-state-debugging-in-browser" depends="-mark-project-state-debugging">
+        <property name="project.state.debugging.in.browser" value="true"/>
+        <echo message="project.state.debugging.in.browser = ${project.state.debugging.in.browser}" level="verbose"/>
+    </target>
+    <target name="-mark-project-state-profiling">
+        <property name="project.state.profiling" value="true"/>
+        <echo message="project.state.profiling = ${project.state.profiling}" level="verbose"/>
+    </target>
+    <target name="-mark-project-needs-jnlp">
+        <property name="project.needs.jnlp" value="true"/>
+        <echo message="project.needs.jnlp = ${project.needs.jnlp}" level="verbose"/>
+    </target>
+    
+    <!-- set property javafx.disable.concurrent.runs=true to disable runs from temporary directory -->
+    <target name="-check-concurrent-runs">
+        <condition property="disable-concurrent-runs">
+            <and>
+                <isset property="javafx.disable.concurrent.runs"/>
+                <equals arg1="${javafx.disable.concurrent.runs}" arg2="true" trim="true"/>
+            </and>
+        </condition>
+        <condition property="temp.run.jar" value="${jfx.deployment.dir}${file.separator}${jfx.deployment.jar}">
+            <isset property="disable-concurrent-runs"/>
+        </condition>
+        <condition property="temp.run.jnlp" value="${jfx.deployment.jnlp}">
+            <isset property="disable-concurrent-runs"/>
+        </condition>
+        <condition property="temp.run.html" value="${jfx.deployment.html}">
+            <isset property="disable-concurrent-runs"/>
+        </condition>
+    </target>
+    <target name="-create-temp-run-dir" depends="-check-concurrent-runs" unless="disable-concurrent-runs">
+        <echo message="Creating temp run dir" level="verbose"/>
+        <tempfile property="temp.run.dir" destDir="${basedir}${file.separator}${dist.dir}${file.separator}" prefix="run"/>
+        <echo message="temp.run.dir = ${temp.run.dir}" level="verbose"/>
+        <copy todir="${temp.run.dir}" includeemptydirs="true" overwrite="true">
+            <fileset dir="${basedir}${file.separator}${dist.dir}">
+                <exclude name="**${file.separator}bundles${file.separator}**"/>
+                <exclude name="**${file.separator}run*${file.separator}**"/>
+            </fileset>
+        </copy>        
+        <property name="temp.run.jar" value="${temp.run.dir}${file.separator}${jfx.deployment.jar}"/>
+        <basename property="jfx.deployment.base" file="${jfx.deployment.jar}" suffix=".jar"/>
+        <property name="temp.run.jnlp" value="${temp.run.dir}${file.separator}${jfx.deployment.base}.jnlp"/>
+        <property name="temp.run.html" value="${temp.run.dir}${file.separator}${jfx.deployment.base}.html"/>
+    </target>
+    <target name="-remove-temp-run-dir" if="temp.run.dir">
+        <echo message="Removing temp run dir" level="verbose"/>
+        <delete dir="${temp.run.dir}" quiet="true" failonerror="false"/>
+    </target>
+    <target depends="init,compile,jar,-create-temp-run-dir" description="Run JavaFX project standalone." name="jfx-project-run">
+        <echo message="Executing ${temp.run.jar} using platform ${platform.java}"/>
+        <property name="run.jvmargs" value=""/>
+        <property name="run.jvmargs.ide" value=""/>        
+        <java jar="${temp.run.jar}" dir="${work.dir}" fork="true" jvm="${platform.java}">
+            <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+            <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
+            <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
+            <jvmarg line="${run.jvmargs}"/>
+            <jvmarg line="${run.jvmargs.ide}"/>
+            <classpath>
+                <path path="${temp.run.jar}:${javac.classpath}"/>
+            </classpath>
+            <arg line="${application.args}"/>
+            <syspropertyset>
+                <propertyref prefix="run-sys-prop."/>
+                <mapper from="run-sys-prop.*" to="*" type="glob"/>
+            </syspropertyset>
+        </java>
+        <antcall target="-remove-temp-run-dir"/>
+    </target>
+    <target depends="init,compile,jar,-create-temp-run-dir,-debug-start-debugger" description="Debug JavaFX project standalone." name="jfx-project-debug">
+        <echo message="Executing ${temp.run.jar} using platform ${platform.java}"/>
+        <property name="run.jvmargs" value=""/>
+        <property name="run.jvmargs.ide" value=""/>        
+        <java jar="${temp.run.jar}" dir="${work.dir}" fork="true" jvm="${platform.java}">
+            <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+            <jvmarg line="${debug-args-line}"/>
+            <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+            <jvmarg value="-Dglass.disableGrab=true"/>
+            <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
+            <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
+            <jvmarg line="${run.jvmargs}"/>
+            <jvmarg line="${run.jvmargs.ide}"/>
+            <classpath>
+                <path path="${temp.run.jar}:${javac.classpath}"/>
+            </classpath>
+            <arg line="${application.args}"/>
+            <syspropertyset>
+                <propertyref prefix="run-sys-prop."/>
+                <mapper from="run-sys-prop.*" to="*" type="glob"/>
+            </syspropertyset>
+        </java>
+        <antcall target="-remove-temp-run-dir"/>
+    </target>
+
+
+    <!-- Running/Debugging/Profiling Standalone -->
+
+    <target name="jfxsa-run" depends="-mark-project-state-running,-clean-if-config-changed,-check-jfx-runtime,-warn-of-preloader,jfx-project-run"/>
+    <target name="jfxsa-run-noscript" depends="-set-fallback-no-javascript, jfxsa-run"/>
+
+    <target name="jfxsa-debug" depends="-mark-project-state-debugging,-clean-if-config-changed,jar,-check-jfx-runtime,-warn-of-preloader,jfx-project-debug"/>
+    <target name="jfxsa-debug-noscript" depends="-set-fallback-no-javascript, jfxsa-debug"/>
+    
+    <target name="jfxsa-profile" depends="-mark-project-state-profiling,-check-jfx-runtime,-warn-of-preloader,jfx-project-profile"/>
+    <target name="jfxsa-profile-noscript" depends="-set-fallback-no-javascript, jfxsa-profile"/>
+
+    <target name="-check-clean-if-config-changed" depends="-init-project">
+        <deploy-defines/>
+        <uptodate property="jfx.deployment.jar.newer.than.nbproject" targetfile="${jfx.deployment.dir}${file.separator}${jfx.deployment.jar}" >
+            <srcfiles dir="${basedir}${file.separator}nbproject" includes="**${file.separator}*"/>
+        </uptodate>
+        <echo message="jfx.deployment.jar.newer.than.nbproject = ${jfx.deployment.jar.newer.than.nbproject}" level="verbose"/>
+        <available file="${jfx.deployment.dir}${file.separator}${jfx.deployment.jar}" type="file" property="jfx.deployment.jar.exists"/>
+        <condition property="request.clean.due.to.config.change">
+            <and>
+                <isset property="jfx.deployment.jar.exists"/>
+                <not><isset property="jfx.deployment.jar.newer.than.nbproject"/></not>
+            </and>
+        </condition>
+    </target>
+    <target name="-clean-if-config-changed" depends="-check-clean-if-config-changed" if="request.clean.due.to.config.change">
+        <echo message="Config change detected. Invoking clean." level="verbose"/>
+        <antcall target="clean"/>
+    </target>
+    
+    <target depends="-profile-check-1,-profile-pre72" description="Profile a project in the IDE." if="profiler.configured" name="jfx-project-profile" unless="profiler.info.jvmargs.agent">
+        <startprofiler/>
+        <antcall target="jfxsa-run"/>
+    </target>
+
+    <!-- Shared Debugging init -->
+
+    <target name="-init-debug-args">
+        <property name="version-output" value="java version &quot;${ant.java.version}"/>
+        <condition property="have-jdk-older-than-1.4">
+            <or>
+                <contains string="${version-output}" substring="java version &quot;1.0"/>
+                <contains string="${version-output}" substring="java version &quot;1.1"/>
+                <contains string="${version-output}" substring="java version &quot;1.2"/>
+                <contains string="${version-output}" substring="java version &quot;1.3"/>
+            </or>
+        </condition>
+        <condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">
+            <istrue value="${have-jdk-older-than-1.4}"/>
+        </condition>
+        <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">
+            <os family="windows"/>
+        </condition>
+        <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">
+            <isset property="debug.transport"/>
+        </condition>
+    </target>
+
+
+    <!-- Running/Debugging/Profiling as WebStart -->
+
+    <target name="-check-jnlp-file-fx" depends="-swing-api-check" unless="fx-in-swing-app-workaround">
+        <basename property="jfx.deployment.base" file="${jfx.deployment.jar}" suffix=".jar"/>
+        <property name="jfx.deployment.jnlp" location="${jfx.deployment.dir}${file.separator}${jfx.deployment.base}.jnlp"/>
+    </target>
+    <target name="-check-jnlp-file-swing" depends="-swing-api-check" if="fx-in-swing-app-workaround">
+        <basename property="jfx.deployment.base" file="${jfx.deployment.jar}" suffix=".jar"/>
+        <property name="jfx.deployment.jnlp" location="${jfx.deployment.dir}${file.separator}${jfx.deployment.base}_application.jnlp"/>
+    </target>
+    <target name="-check-jnlp-file" depends="-check-jnlp-file-fx,-check-jnlp-file-swing">
+        <condition property="jnlp-file-exists">
+            <available file="${jfx.deployment.jnlp}"/>
+        </condition>
+        <condition property="jnlp-file-exists+netbeans.home">
+            <and>
+                <isset property="jnlp-file-exists"/>
+                <isset property="netbeans.home"/>
+            </and>
+        </condition>
+    </target>
+
+    <target name="-resolve-jnlp-file" depends="-check-jnlp-file" unless="jnlp-file-exists">
+        <antcall target="jfx-deployment"/>
+        <antcall target="-check-jnlp-file"/>
+    </target>
+
+    <!-- set property javafx.enable.concurrent.external.runs=true to enable multiple runs of the same WebStart or Run-in-Browser project -->
+    <target name="-check-concurrent-jnlp-runs" depends="-resolve-jnlp-file">
+        <condition property="disable-concurrent-runs">
+            <not>
+                <and>
+                    <isset property="javafx.enable.concurrent.external.runs"/>
+                    <equals arg1="${javafx.enable.concurrent.external.runs}" arg2="true" trim="true"/>
+                </and>
+            </not>
+        </condition>
+        <condition property="temp.run.jnlp" value="${jfx.deployment.jnlp}">
+            <isset property="disable-concurrent-runs"/>
+        </condition>
+    </target>
+    <target name="-warn-concurrent-jnlp-runs" unless="disable-concurrent-runs">
+        <echo message="Note: Concurrent Run as WebStart enabled.${line.separator}Temporary directory ${temp.run.dir}${line.separator}will remain unused when WebStart execution has finished. Use project Clean to delete unused directories."/>
+    </target>
+
+    <target name="jfxws-run" if="jnlp-file-exists" depends="-mark-project-state-running,-clean-if-config-changed,-mark-project-needs-jnlp,-check-jdk-7u4or5-mac,jar,
+            -check-jfx-webstart,-resolve-jnlp-file,-check-jfx-runtime,-check-concurrent-jnlp-runs,-create-temp-run-dir,-warn-insufficient-signing" 
+            description="Start JavaFX javaws execution">
+        <echo message="Executing ${temp.run.jnlp} using ${active.webstart.executable}"/>
+        <exec executable="${active.webstart.executable}">
+            <arg file="${temp.run.jnlp}"/>
+        </exec>
+        <antcall target="-warn-concurrent-jnlp-runs"/>
+    </target>
+    
+    <target name="jfxws-debug" if="jnlp-file-exists+netbeans.home" depends="-mark-project-state-debugging,-clean-if-config-changed,-mark-project-needs-jnlp,
+            -check-jdk-7u4or5-mac,jar,-check-jfx-webstart,-resolve-jnlp-file,-check-jfx-runtime,-warn-insufficient-signing,
+            -debug-start-debugger,-debug-javaws-debuggee" description="Debug JavaFX javaws project in IDE"/>
+        
+    <target name="-debug-javaws-debuggee" depends="-init-debug-args">
+        <echo message="Executing ${jfx.deployment.jnlp} in debug mode using ${active.webstart.executable}"/>
+        <exec executable="${active.webstart.executable}">
+            <env key="JAVAWS_VM_ARGS" value="${debug-args-line} -Xrunjdwp:transport=${debug-transport},address=${jpda.address} -Dglass.disableGrab=true"/>
+            <arg value="-wait"/>
+            <arg file="${jfx.deployment.jnlp}"/>
+        </exec>
+    </target>
+    
+    <target name="-profile-check-1">
+        <property name="run.jvmargs.ide" value=""/>        
+        <condition property="profiler.configured">
+            <or>
+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-agentpath:"/>
+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-javaagent:"/>
+            </or>
+        </condition>
+    </target>
+    
+    <target if="jnlp-file-exists+netbeans.home" name="-profile-check-jnlp">
+        <antcall target="-profile-check-1"/>
+    </target>
+    
+    <target name="-do-jfxws-profile" depends="-mark-project-state-profiling,-mark-project-needs-jnlp,
+            -check-jdk-7u4or5-mac,jar,-check-jfx-webstart,-resolve-jnlp-file,-check-jfx-runtime,-warn-insufficient-signing">
+        <echo message="Executing ${jfx.deployment.jnlp} in profile mode using ${active.webstart.executable}"/>
+        <property name="run.jvmargs.ide" value=""/>        
+        <exec executable="${active.webstart.executable}">
+            <env key="JAVAWS_VM_ARGS" value="${run.jvmargs.ide}"/>
+            <arg value="-wait"/>
+            <arg file="${jfx.deployment.jnlp}"/>
+        </exec>
+    </target>
+    
+    <target name="jfxws-profile" if="profiler.configured" 
+        depends="-profile-check-1"
+        description="Profile JavaFX javaws project in IDE">
+        <startprofiler/>
+        <antcall target="-do-jfxws-profile"/>
+    </target>
+    
+    <target name="jfxws-run-noscript" depends="-set-fallback-no-javascript, jfxws-run"/>
+
+    <target name="jfxws-debug-noscript" depends="-set-fallback-no-javascript, jfxws-debug"/>
+
+    <target name="jfxws-profile-noscript" depends="-set-fallback-no-javascript, jfxws-profile"/>
+
+
+    <!-- Running/Debugging/Profiling in Browser -->
+
+    <target name="-check-selected-browser-path" depends="-check-default-run-config">
+        <condition property="javafx.run.inbrowser.undefined">
+            <or>
+                <and>
+                    <isset property="javafx.run.inbrowser"/>
+                    <equals arg1="${javafx.run.inbrowser}" arg2="undefined"/>
+                </and>
+                <and>
+                    <isset property="javafx.run.inbrowser.path"/>
+                    <equals arg1="${javafx.run.inbrowser.path}" arg2="undefined"/>
+                </and>
+            </or>
+        </condition>
+        <condition property="javafx.run.inbrowser.path-exists">
+            <and>
+                <isset property="javafx.run.inbrowser.path"/>
+                <available file="${javafx.run.inbrowser.path}"/>
+            </and>
+        </condition>
+        <fail message="Error:${line.separator}Browser selection not recognizable from ${config} run configuration.${line.separator}Please go to Project Properties dialog, category Run, to select a valid browser." unless="javafx.run.inbrowser.path"/>
+        <fail message="Error:${line.separator}No browser defined in ${config} run configuration.${line.separator}Please verify in Tools->Options dialog that NetBeans recognizes a valid browser, then go to Project Properties dialog, category Run, to select a valid browser." if="javafx.run.inbrowser.undefined"/>
+        <fail message="Error:${line.separator}Browser ${javafx.run.inbrowser.path} referred from ${config} run configuration can not be found.${line.separator}(This can happen, e.g, when the JavaFX Project is transferred to another system.)${line.separator}Please go to Project Properties dialog, category Run, to select a valid browser." unless="javafx.run.inbrowser.path-exists"/>
+    </target>
+
+    <target name="-substitute-template-processed-html-file" depends="-check-project" if="html-template-available">
+        <deploy-process-template/>
+    </target>
+    <target name="-check-template-processed-html-file" depends="-substitute-template-processed-html-file">
+        <condition property="html-file-exists">
+            <and>
+                <isset property="html-template-available"/>
+                <available file="${javafx.run.htmltemplate.processed}"/>
+            </and>
+        </condition>
+    </target>
+    
+    <target name="-set-template-processed-html-file" depends="-check-template-processed-html-file" if="html-file-exists">
+        <property name="jfx.deployment.html" location="${javafx.run.htmltemplate.processed}"/>
+    </target>
+    
+    <target name="-set-html-file" depends="-set-template-processed-html-file" unless="html-file-exists">
+        <basename property="jfx.deployment.base" file="${jfx.deployment.jar}" suffix=".jar"/>
+        <property name="jfx.deployment.html" location="${jfx.deployment.dir}${file.separator}${jfx.deployment.base}.html"/>
+        <condition property="html-file-exists">
+            <available file="${jfx.deployment.html}"/>
+        </condition>
+        <condition property="html-file-exists+netbeans.home">
+            <and>
+                <isset property="html-file-exists"/>
+                <isset property="netbeans.home"/>
+            </and>
+        </condition>
+    </target>
+
+    <!-- set property javafx.enable.concurrent.external.runs=true to enable multiple runs of the same WebStart or Run-in-Browser project -->
+    <target name="-check-concurrent-html-runs" depends="-set-html-file">
+        <condition property="disable-concurrent-runs">
+            <or>
+                <not>
+                    <and>
+                        <isset property="javafx.enable.concurrent.external.runs"/>
+                        <equals arg1="${javafx.enable.concurrent.external.runs}" arg2="true" trim="true"/>
+                    </and>
+                </not>
+                <and>
+                    <isset property="html-template-available"/>
+                    <available file="${javafx.run.htmltemplate.processed}"/>
+                </and>
+            </or>
+        </condition>
+        <condition property="temp.run.html" value="${jfx.deployment.html}">
+            <isset property="disable-concurrent-runs"/>
+        </condition>
+    </target>
+    <target name="-warn-concurrent-html-runs" unless="disable-concurrent-runs">
+        <echo message="Note: Concurrent Run in Browser enabled.${line.separator}Temporary directory ${temp.run.dir}${line.separator}will remain unused when execution in browser has finished. Use project Clean to delete unused directories."/>
+    </target>
+
+    <target name="jfxbe-run" if="html-file-exists" depends="-mark-project-state-running,-clean-if-config-changed,-mark-project-needs-jnlp,-check-jdk-7u4or5-mac,jar,
+            -check-selected-browser-path,-set-html-file,-check-jfx-runtime,-check-concurrent-html-runs,-create-temp-run-dir,-warn-insufficient-signing"
+            description="Start JavaFX execution in browser">
+        <echo message="Executing ${temp.run.html} using ${javafx.run.inbrowser}"/>
+        <echo message="(${javafx.run.inbrowser.path})"/>
+        <property name="javafx.run.inbrowser.arguments" value=""/>
+        <exec executable="${javafx.run.inbrowser.path}">
+            <arg line="${javafx.run.inbrowser.arguments}"/>
+            <arg file="${temp.run.html}"/>
+        </exec>
+        <antcall target="-warn-concurrent-html-runs"/>
+    </target>
+    
+    <target name="jfxbe-debug" if="html-file-exists+netbeans.home" depends="-mark-project-state-debugging-in-browser,-init-debug-args,
+            clean,-debug-start-debugger,-mark-project-needs-jnlp,-check-jdk-7u4or5-mac,jar,
+            -check-selected-browser-path,-set-html-file,-check-jfx-runtime,-warn-insufficient-signing,
+            -debug-jfxbe-debuggee" description="Debug JavaFX project in browser">
+        <!-- after the session clean up the jnlp containing debug settings -->
+        <antcall target="clean"/>
+    </target>
+        
+    <target name="-debug-jfxbe-debuggee" depends="-init-debug-args">
+        <echo message="Executing ${jfx.deployment.html} in debug mode using ${javafx.run.inbrowser}"/>
+        <echo message="(${javafx.run.inbrowser.path})"/>
+        <property name="javafx.run.inbrowser.arguments" value=""/>
+        <exec executable="${javafx.run.inbrowser.path}">
+            <arg line="${javafx.run.inbrowser.arguments}"/>
+            <env key="_JPI_VM_OPTIONS" value="-agentlib:jdwp=transport=${debug-transport},address=${jpda.address}"/>
+            <arg file="${jfx.deployment.html}"/>
+        </exec>
+    </target>
+
+    <target if="html-file-exists+netbeans.home" name="-profile-check-html">
+        <antcall target="-profile-check-1"/>
+    </target>
+
+    <target name="-do-jfxbe-profile" depends="-mark-project-state-profiling,-mark-project-needs-jnlp,
+            -check-jdk-7u4or5-mac,jar,-check-selected-browser-path,-set-html-file,-check-jfx-runtime,-warn-insufficient-signing">
+        <echo message="Executing ${jfx.deployment.html} in profile mode using ${javafx.run.inbrowser}"/>
+        <echo message="(${javafx.run.inbrowser.path})"/>
+        <property name="run.jvmargs.ide" value=""/>
+        <property name="javafx.run.inbrowser.arguments" value=""/>
+        <exec executable="${javafx.run.inbrowser.path}">
+            <arg line="${javafx.run.inbrowser.arguments}"/>
+            <env key="_JPI_VM_OPTIONS" value="${run.jvmargs.ide}"/>
+            <arg file="${jfx.deployment.html}"/>
+        </exec>
+    </target>
+
+    <target name="jfxbe-profile" if="profiler.configured"
+        depends="-profile-check-html"
+        description="Profile JavaFX project in browser">
+        <startprofiler/>
+        <antcall target="-do-jfxbe-profile"/>
+    </target>
+
+    <target name="jfxbe-run-noscript" depends="-set-fallback-no-javascript, jfxbe-run"/>
+
+    <target name="jfxbe-debug-noscript" depends="-set-fallback-no-javascript, jfxbe-debug"/>
+
+    <target name="jfxbe-profile-noscript" depends="-set-fallback-no-javascript, jfxbe-profile"/>
+
+
+</project>
diff --git a/Java/Simple Games/Color Game/nbproject/project.properties b/Java/Simple Games/Color Game/nbproject/project.properties
new file mode 100644
index 00000000..5bf83e1e
--- /dev/null
+++ b/Java/Simple Games/Color Game/nbproject/project.properties	
@@ -0,0 +1,113 @@
+annotation.processing.enabled=true
+annotation.processing.enabled.in.editor=false
+annotation.processing.processor.options=
+annotation.processing.processors.list=
+annotation.processing.run.all.processors=true
+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
+application.title=WordColorGame
+application.vendor=rdrgz
+build.classes.dir=${build.dir}/classes
+build.classes.excludes=**/*.java,**/*.form
+# This directory is removed when the project is cleaned:
+build.dir=build
+build.generated.dir=${build.dir}/generated
+build.generated.sources.dir=${build.dir}/generated-sources
+# Only compile against the classpath explicitly listed here:
+build.sysclasspath=ignore
+build.test.classes.dir=${build.dir}/test/classes
+build.test.results.dir=${build.dir}/test/results
+compile.on.save=true
+compile.on.save.unsupported.javafx=true
+# Uncomment to specify the preferred debugger connection transport:
+#debug.transport=dt_socket
+debug.classpath=\
+    ${run.classpath}
+debug.test.classpath=\
+    ${run.test.classpath}
+# This directory is removed when the project is cleaned:
+dist.dir=dist
+dist.jar=${dist.dir}/WordColorGame.jar
+dist.javadoc.dir=${dist.dir}/javadoc
+endorsed.classpath=
+excludes=
+includes=**
+# Non-JavaFX jar file creation is deactivated in JavaFX 2.0+ projects
+jar.archive.disabled=true
+jar.compress=false
+javac.classpath=\
+    ${javafx.classpath.extension}
+# Space-separated list of extra javac options
+javac.compilerargs=
+javac.deprecation=false
+javac.processorpath=\
+    ${javac.classpath}
+javac.source=1.8
+javac.target=1.8
+javac.test.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}
+javac.test.processorpath=\
+    ${javac.test.classpath}
+javadoc.additionalparam=
+javadoc.author=false
+javadoc.encoding=${source.encoding}
+javadoc.noindex=false
+javadoc.nonavbar=false
+javadoc.notree=false
+javadoc.private=false
+javadoc.splitindex=true
+javadoc.use=true
+javadoc.version=false
+javadoc.windowtitle=
+javafx.application.implementation.version=1.0
+javafx.binarycss=false
+javafx.classpath.extension=\
+    ${java.home}/lib/javaws.jar:\
+    ${java.home}/lib/deploy.jar:\
+    ${java.home}/lib/plugin.jar
+javafx.deploy.allowoffline=true
+# If true, application update mode is set to 'background', if false, update mode is set to 'eager'
+javafx.deploy.backgroundupdate=false
+javafx.deploy.embedJNLP=true
+javafx.deploy.includeDT=true
+# Set true to prevent creation of temporary copy of deployment artifacts before each run (disables concurrent runs)
+javafx.disable.concurrent.runs=false
+# Set true to enable multiple concurrent runs of the same WebStart or Run-in-Browser project
+javafx.enable.concurrent.external.runs=false
+# This is a JavaFX project
+javafx.enabled=true
+javafx.fallback.class=com.javafx.main.NoJavaFXFallback
+# Main class for JavaFX
+javafx.main.class=wordcolorgame.ColorTrap
+javafx.preloader.class=
+# This project does not use Preloader
+javafx.preloader.enabled=false
+javafx.preloader.jar.filename=
+javafx.preloader.jar.path=
+javafx.preloader.project.path=
+javafx.preloader.type=none
+# Set true for GlassFish only. Rebases manifest classpaths of JARs in lib dir. Not usable with signed JARs.
+javafx.rebase.libs=false
+javafx.run.height=600
+javafx.run.width=800
+# Pre-JavaFX 2.0 WebStart is deactivated in JavaFX 2.0+ projects
+jnlp.enabled=false
+# Main class for Java launcher
+main.class=com.javafx.main.Main
+# For improved security specify narrower Codebase manifest attribute to prevent RIAs from being repurposed
+manifest.custom.codebase=*
+# Specify Permissions manifest attribute to override default (choices: sandbox, all-permissions)
+manifest.custom.permissions=
+manifest.file=manifest.mf
+meta.inf.dir=${src.dir}/META-INF
+platform.active=default_platform
+run.classpath=\
+    ${dist.jar}:\
+    ${javac.classpath}:\
+    ${build.classes.dir}
+run.test.classpath=\
+    ${javac.test.classpath}:\
+    ${build.test.classes.dir}
+source.encoding=UTF-8
+src.dir=src
+test.src.dir=test
diff --git a/Java/Simple Games/Color Game/nbproject/project.xml b/Java/Simple Games/Color Game/nbproject/project.xml
new file mode 100644
index 00000000..2e31e2b1
--- /dev/null
+++ b/Java/Simple Games/Color Game/nbproject/project.xml	
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://www.netbeans.org/ns/project/1">
+    <type>org.netbeans.modules.java.j2seproject</type>
+    <configuration>
+        <buildExtensions xmlns="http://www.netbeans.org/ns/ant-build-extender/1">
+            <extension file="jfx-impl.xml" id="jfx3">
+                <dependency dependsOn="-jfx-copylibs" target="-post-jar"/>
+                <dependency dependsOn="-rebase-libs" target="-post-jar"/>
+                <dependency dependsOn="jfx-deployment" target="-post-jar"/>
+                <dependency dependsOn="jar" target="debug"/>
+                <dependency dependsOn="jar" target="profile"/>
+                <dependency dependsOn="jar" target="run"/>
+            </extension>
+        </buildExtensions>
+        <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
+            <name>WordColorGame</name>
+            <source-roots>
+                <root id="src.dir"/>
+            </source-roots>
+            <test-roots>
+                <root id="test.src.dir"/>
+            </test-roots>
+        </data>
+    </configuration>
+</project>
diff --git a/Java/Simple Games/Color Game/out/production/ColorTrapGame-master/wordcolorgame/ColorTrap.class b/Java/Simple Games/Color Game/out/production/ColorTrapGame-master/wordcolorgame/ColorTrap.class
new file mode 100644
index 00000000..8b3de51f
Binary files /dev/null and b/Java/Simple Games/Color Game/out/production/ColorTrapGame-master/wordcolorgame/ColorTrap.class differ
diff --git a/Java/Simple Games/Color Game/out/production/ColorTrapGame-master/wordcolorgame/ColorsEnum.class b/Java/Simple Games/Color Game/out/production/ColorTrapGame-master/wordcolorgame/ColorsEnum.class
new file mode 100644
index 00000000..6f7e7029
Binary files /dev/null and b/Java/Simple Games/Color Game/out/production/ColorTrapGame-master/wordcolorgame/ColorsEnum.class differ
diff --git a/Java/Simple Games/Color Game/out/production/ColorTrapGame-master/wordcolorgame/correct.png b/Java/Simple Games/Color Game/out/production/ColorTrapGame-master/wordcolorgame/correct.png
new file mode 100644
index 00000000..1b3b1d42
Binary files /dev/null and b/Java/Simple Games/Color Game/out/production/ColorTrapGame-master/wordcolorgame/correct.png differ
diff --git a/Java/Simple Games/Color Game/out/production/ColorTrapGame-master/wordcolorgame/wrong.png b/Java/Simple Games/Color Game/out/production/ColorTrapGame-master/wordcolorgame/wrong.png
new file mode 100644
index 00000000..0ca7533c
Binary files /dev/null and b/Java/Simple Games/Color Game/out/production/ColorTrapGame-master/wordcolorgame/wrong.png differ
diff --git a/Java/Simple Games/Color Game/path variable setting.PNG b/Java/Simple Games/Color Game/path variable setting.PNG
new file mode 100644
index 00000000..225a7700
Binary files /dev/null and b/Java/Simple Games/Color Game/path variable setting.PNG differ
diff --git a/Java/Simple Games/Color Game/readme.md b/Java/Simple Games/Color Game/readme.md
new file mode 100644
index 00000000..cdaa0179
--- /dev/null
+++ b/Java/Simple Games/Color Game/readme.md	
@@ -0,0 +1,38 @@
+For running the program in IntelliJ IDEA:
+
+Since it is a JavaFX program, We need to setup accordingly (following steps are for windows):
+
+
+1) Download the openjfx-17.0.0.1_windows-x86_bin-sdk zip file and extract it. Remeber its location.
+
+2) Go to File> Settings> Appearance & Beahvior > Path Variables
+
+3) Add Name=PATH_TO_FX with Value=[Download location]\openjfx-17.0.0.1_windows-x86_bin-sdk\javafx-sdk-17.0.0.1\lib
+
+see image below:
+
+![alt text](https://raw.githubusercontent.com/sushant-sinha/Programming-Basics/5259b41bc9c880251e7a16c323592e9480a139c3/Java/Simple%20Games/Color%20Game/path%20variable%20setting.PNG)
+
+4) Go to File> Project Structure> Libraries. Add [Download location]\openjfx-17.0.0.1_windows-x86_bin-sdk\javafx-sdk-17.0.0.1\lib
+
+see image below:
+
+![alt text](https://raw.githubusercontent.com/sushant-sinha/Programming-Basics/5259b41bc9c880251e7a16c323592e9480a139c3/Java/Simple%20Games/Color%20Game/adding%20javafx%20library.PNG)
+
+5) Now Go to Run>Edit Configurations and create a new confiugration. Replace [Directory Location] with your working directory location.
+
+see image below:
+
+![alt text](https://raw.githubusercontent.com/sushant-sinha/Programming-Basics/5259b41bc9c880251e7a16c323592e9480a139c3/Java/Simple%20Games/Color%20Game/run%20configuration.PNG)
+
+You are all set!!
+
+Rules:
+
+See the color of the text in the top of the screen.
+
+Match it with the text showing that color
+
+For the below figure: Since we got YELLOW (text color:red), we need to click on RED (text color:orange)
+
+![alt text](https://raw.githubusercontent.com/sushant-sinha/Programming-Basics/0ddd984dd3a56fa1a170bee0e9299fc5aec92227/Java/Simple%20Games/Color%20Game/ss.PNG)
\ No newline at end of file
diff --git a/Java/Simple Games/Color Game/run configuration.PNG b/Java/Simple Games/Color Game/run configuration.PNG
new file mode 100644
index 00000000..b7a3d081
Binary files /dev/null and b/Java/Simple Games/Color Game/run configuration.PNG differ
diff --git a/Java/Simple Games/Color Game/src/wordcolorgame/ColorTrap.java b/Java/Simple Games/Color Game/src/wordcolorgame/ColorTrap.java
new file mode 100644
index 00000000..d61a522f
--- /dev/null
+++ b/Java/Simple Games/Color Game/src/wordcolorgame/ColorTrap.java	
@@ -0,0 +1,212 @@
+package wordcolorgame;
+
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Random;
+import javafx.animation.KeyFrame;
+import javafx.animation.Timeline;
+import javafx.application.Application;
+import static javafx.application.Application.launch;
+import javafx.geometry.Insets;
+import javafx.geometry.Orientation;
+import javafx.stage.Stage;
+import javafx.scene.Scene;
+import javafx.scene.layout.*;
+import javafx.scene.text.*;
+import javafx.scene.text.Font;
+import javafx.geometry.Pos;
+import javafx.scene.control.Button;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.paint.Color;
+import javafx.util.Duration;
+
+
+public class ColorTrap extends Application
+{
+    private Scene scene;
+    private BorderPane borderPane;
+    private Text txtCountDown;
+    private Text trap;
+    private String rColor;
+    private Text choice;
+    private Text scoreT;
+    private int score;
+    private final ColorsEnum colors[] = ColorsEnum.values();
+    private final List<String> list = new ArrayList(Arrays.asList(colors));
+    private final Text opt[] = new Text[list.size()];
+    private ImageView img = new ImageView();
+    private final Image check = new Image("wordcolorgame/correct.png");
+    private final Image x = new Image("wordcolorgame/wrong.png");
+
+    private Timeline timeline;
+
+    private final int TIMER = 15;
+    private int count = 0;
+
+    @Override
+    public void start(Stage primaryStage)
+    {
+        borderPane = new BorderPane();
+        borderPane.setStyle("-fx-background-color: lightgrey");
+        scene = new Scene(borderPane, 800, 800);
+        primaryStage.setMinHeight(300);
+        primaryStage.setMinWidth(600);
+        initializeGame();
+        startPlay();
+
+        primaryStage.setTitle("Color Confuser");
+        primaryStage.setScene(scene);
+        primaryStage.show();
+    }
+
+     public void startPlay()
+   {
+         chooseTrapWordAndColor();
+         colorNameOptions();
+         
+         count = TIMER;
+         txtCountDown.setText(TIMER + "");
+         timeline = new Timeline(new KeyFrame(
+         Duration.millis(1000), e -> {
+         
+         
+         if(count >= 0)
+         {
+         txtCountDown.setText(count + "");
+         count--;
+         }
+         else
+         {
+         endOfGame();                     }
+         }));
+         timeline.setCycleCount(TIMER + 2);
+         timeline.play();
+ 
+     }
+    
+    public void endOfGame()
+    {       
+        borderPane.getChildren().clear();
+        Text fScore = new Text("Your score: " + score);
+        fScore.setFont(Font.font("Marker Felt", 40));
+        
+        Button play = new Button("Play again");   
+        play.setOnAction(e -> {
+            score = 0;
+            initializeGame();
+            startPlay();
+        });
+
+        VBox end = new VBox(20,fScore, play);
+        end.setAlignment(Pos.CENTER);
+        borderPane.setCenter(end);
+    }
+    
+    
+    public void checkChoice(Text choice)
+    {
+        if(this.choice.getText().equals(rColor)){
+            score++;
+            scoreT.setText("Score: " + score);
+            img.setImage(check);
+        }
+        else{
+            img.setImage(x);
+        }
+        chooseTrapWordAndColor();
+        colorNameOptions();
+    }
+
+    public void chooseTrapWordAndColor()
+    {
+        Random rando = new Random();
+        int size = colors.length;
+        int n = rando.nextInt(colors.length);
+        
+        trap.setText(colors[n].name());
+
+        rColor = colors[rando.nextInt(size)].name();
+        trap.setFill(Color.valueOf(rColor));
+    }
+    
+    public void colorNameOptions()
+    {
+        Collections.shuffle(list);
+        for(int i = 0; i < colors.length; i++){
+            opt[i].setText(String.valueOf(list.get(i)));           
+        }
+        Collections.shuffle(list);
+        for(int i = 0; i < colors.length; i++){
+            opt[i].setFill(Color.valueOf(String.valueOf(list.get(i))));           
+        }
+ 
+        for (Text opt1 : opt) {
+            String s = opt1.getText();
+            choice = new Text();
+            opt1.setOnMouseClicked((MouseEvent e) -> {
+                choice.setText(s);
+                checkChoice(choice);
+            });
+        }  
+    }
+
+    public void initializeGame()
+    {
+        trap = new Text();
+        trap.setFont(Font.font("Marker Felt", 60));
+        
+        borderPane.setTop(trap);
+        BorderPane.setAlignment(trap, Pos.CENTER);
+        
+        
+        
+        FlowPane optionHolder = new FlowPane(Orientation.HORIZONTAL, 10, 10);
+        optionHolder.setAlignment(Pos.CENTER);
+
+        for(int i = 0; i < list.size(); i++){
+            String s = String.valueOf(list.get(i));
+            opt[i] = new Text(s);
+            opt[i].setFont(Font.font("Marker Felt", 40));
+            optionHolder.getChildren().add(opt[i]);
+        }   
+
+        borderPane.setCenter(optionHolder);
+        BorderPane.setAlignment(optionHolder, Pos.CENTER);
+        BorderPane.setMargin(optionHolder, new Insets(0,80,0,80));
+
+        
+        
+        scoreT = new Text("Score: " + score);
+        scoreT.setFont(Font.font(20));
+
+        Region region1 = new Region();
+        HBox.setHgrow(region1, Priority.ALWAYS);
+        
+        img = new ImageView();
+        img.setFitWidth(30);
+        img.setFitHeight(30);
+        
+        Region region2 = new Region();
+        HBox.setHgrow(region2, Priority.ALWAYS);
+  
+        Text t = new Text("Time: ");
+        t.setFont(Font.font(20));
+        txtCountDown = new Text();       
+        txtCountDown.setFont(Font.font(20));
+        HBox right = new HBox(t, txtCountDown);
+
+        HBox statusbar = new HBox(scoreT, region1, img, region2, right);
+
+        borderPane.setBottom(statusbar);
+        BorderPane.setAlignment(statusbar, Pos.CENTER);
+    }
+    public static void main(String[] args)
+    {
+        launch(args);
+    }
+}
\ No newline at end of file
diff --git a/Java/Simple Games/Color Game/src/wordcolorgame/ColorsEnum.java b/Java/Simple Games/Color Game/src/wordcolorgame/ColorsEnum.java
new file mode 100644
index 00000000..5c46d9de
--- /dev/null
+++ b/Java/Simple Games/Color Game/src/wordcolorgame/ColorsEnum.java	
@@ -0,0 +1,6 @@
+package wordcolorgame;
+
+public enum ColorsEnum
+{
+    ORANGE, PURPLE, BLACK, BLUE, YELLOW, RED, BROWN;
+}
diff --git a/Java/Simple Games/Color Game/src/wordcolorgame/correct.png b/Java/Simple Games/Color Game/src/wordcolorgame/correct.png
new file mode 100644
index 00000000..1b3b1d42
Binary files /dev/null and b/Java/Simple Games/Color Game/src/wordcolorgame/correct.png differ
diff --git a/Java/Simple Games/Color Game/src/wordcolorgame/wrong.png b/Java/Simple Games/Color Game/src/wordcolorgame/wrong.png
new file mode 100644
index 00000000..e8aa42c9
Binary files /dev/null and b/Java/Simple Games/Color Game/src/wordcolorgame/wrong.png differ
diff --git a/Java/Simple Games/Color Game/ss.PNG b/Java/Simple Games/Color Game/ss.PNG
new file mode 100644
index 00000000..21e4a549
Binary files /dev/null and b/Java/Simple Games/Color Game/ss.PNG differ
diff --git a/Java/Simple Games/Connect Four/ConnectFour.java b/Java/Simple Games/Connect Four/ConnectFour.java
new file mode 100644
index 00000000..ab9c5ba7
--- /dev/null
+++ b/Java/Simple Games/Connect Four/ConnectFour.java	
@@ -0,0 +1,146 @@
+import java.util.Arrays;
+import java.util.Scanner;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+public class ConnectFour 
+{
+
+  private static final char[] PLAYERS = {'X','O'};
+  private final int width, height;
+  private final char[][] grid;
+  private int lastCol = -1, lastTop = -1;
+  public ConnectFour(int w, int h) 
+  {
+    width = w;
+    height = h;
+    grid = new char[h][];
+    for (int i = 0; i < h; i++) 
+    {
+      Arrays.fill(grid[i] = new char[w], '.');
+    }
+  }
+  public String toString() 
+  {
+     return IntStream.range(0,  width).
+           mapToObj(Integer::toString).
+           collect(Collectors.joining()) + 
+           "\n" +
+           Arrays.stream(grid).
+           map(String::new).
+           collect(Collectors.joining("\n"));
+  }
+  public String horizontal() 
+  {
+    return new String(grid[lastTop]);
+  }
+  public String vertical() 
+  {
+    StringBuilder sb = new StringBuilder(height);
+
+    for (int h = 0; h < height; h++) 
+    {
+      sb.append(grid[h][lastCol]);
+    }
+
+    return sb.toString();
+  }
+  public String slashDiagonal() 
+  {
+    StringBuilder sb = new StringBuilder(height);
+
+    for (int h = 0; h < height; h++) 
+    {
+      int w = lastCol + lastTop - h;
+
+      if (0 <= w && w < width) 
+      {
+        sb.append(grid[h][w]);
+      }
+    }
+    return sb.toString();
+  }
+  public String backslashDiagonal() 
+  {
+    StringBuilder sb = new StringBuilder(height);
+
+    for (int h = 0; h < height; h++) 
+    {
+      int w = lastCol - lastTop + h;
+
+      if (0 <= w && w < width) 
+      {
+        sb.append(grid[h][w]);
+      }
+    }
+    return sb.toString();
+  }
+  public static boolean contains(String str, String substring) 
+  {
+    return str.indexOf(substring) >= 0;
+  }
+  public boolean isWinningPlay() {
+    if (lastCol == -1) 
+    {
+      System.err.println("No move has been made yet");
+      return false;
+    }
+    char sym = grid[lastTop][lastCol];
+    String streak = String.format("%c%c%c%c", sym, sym, sym, sym);
+    return contains(horizontal(), streak) || 
+           contains(vertical(), streak) || 
+           contains(slashDiagonal(), streak) || 
+           contains(backslashDiagonal(), streak);
+  }
+  public void chooseAndDrop(char symbol, Scanner input) 
+  {
+    do 
+    {
+      System.out.println("\nPlayer " + symbol + " turn: ");
+      int col = input.nextInt();
+      if (!(0 <= col && col < width)) 
+      {
+        System.out.println("Column must be between 0 and " + (width - 1));
+        continue;
+      }
+      for (int h = height - 1; h >= 0; h--) 
+      {
+        if (grid[h][col] == '.') {
+          grid[lastTop = h][lastCol = col] = symbol;
+          return;
+        }
+      }
+      System.out.println("Column " + col + " is full.");
+    } while (true);
+  }
+  public static void main(String[] args) 
+  {
+    System.out.println("                       ---------------------------");
+    System.out.println("                       Welcome to ConnectFour Game");
+    System.out.println("                       ---------------------------");
+    System.out.println("The first to form a horizontal, vertical, or diagonal line of four of one�s own discs wins.");
+    System.out.println("               X stands for Player 1 and O stands for Player 2");
+    System.out.println("                       Then let's begin the game!!!");
+      try (Scanner input = new Scanner(System.in)) 
+    {
+      int height = 6; int width = 8; int moves = height * width;
+      ConnectFour board = new ConnectFour(width, height);
+      System.out.println("Use 0-" + (width - 1) + " to choose a column");
+      System.out.println(board);
+      for (int player = 0; moves-- > 0; player = 1 - player) 
+      {
+        char symbol = PLAYERS[player];
+        board.chooseAndDrop(symbol, input);
+        System.out.println(board);
+        if (board.isWinningPlay()) 
+        {
+          System.out.println("\nPlayer " + symbol + " wins!");
+          return;
+          
+        }
+      }
+      System.out.println("Game over. No winner. Try again!");
+    }
+  }
+
+}
\ No newline at end of file
diff --git a/Java/Simple Games/Connect Four/README.md b/Java/Simple Games/Connect Four/README.md
new file mode 100644
index 00000000..782cc552
--- /dev/null
+++ b/Java/Simple Games/Connect Four/README.md	
@@ -0,0 +1,5 @@
+# Summary
+
+![image](https://user-images.githubusercontent.com/91012632/139526793-d7f3986d-8693-4f58-9b43-7bd64b89b6a9.png)
+
+This is a program for the game of Connect Four. This is a two playered game. The first player to form a horizontal, vertical or a diagonal line of 4 X's or O's wins the game.
diff --git a/Java/Simple Games/Hand Cricket/Hand_Cricket.java b/Java/Simple Games/Hand Cricket/Hand_Cricket.java
new file mode 100644
index 00000000..bd3a77f7
--- /dev/null
+++ b/Java/Simple Games/Hand Cricket/Hand_Cricket.java	
@@ -0,0 +1,182 @@
+import java.io.*;
+
+public class Hand_Cricket
+
+{
+
+    public static void main(String args[])throws IOException
+    
+    {
+        
+        InputStreamReader isr=new InputStreamReader(System.in);
+        BufferedReader br=new BufferedReader(isr);
+        
+        String name; // to accept the player's name;
+        int aa; // converting the random real number generated by 'rr' into a random whole number run for the computer;
+        int ii; // used in for loops;
+        int bb; // to accept the player's number;
+        double rr; // to generate a random real number;
+        int cheat; // to end the game if wrong input is entered; to keep a check whilst the game is running as to whether the game has ended or not;
+        int score1; // to store the latest runs scored by the player;
+        int score2; // to store the latest runs scored by the computer;
+        int c; // used in for loops to create a specific design;
+        int choice; // used to decide whether the game needs to be ended or restarted;
+        int infinity=1; // used to keep the game running until the player decides to end the game;
+        while(infinity>0)
+        {
+                name=" ";
+                aa=0;
+                ii=0;
+                bb=0;
+                rr=0;
+                cheat=0;
+                score1=0;
+                score2=0;
+                c=0;
+                choice=0;
+                infinity=1;
+                System.out.println("WELCOME TO THE GAME ");
+                System.out.println("");
+                System.out.print("Enter Your Name: ");
+                name=br.readLine();
+                System.out.println("Hello "+name+",");
+                System.out.println("WELCOME TO THE CRICKET-MANIA");
+                System.out.println("Instructions:");
+                System.out.println("You Will First Bat. Enter Any Number From 1 To 10.");
+                System.out.println("YOU ARE BATTING:");
+                for(ii=1;ii>0;ii++)
+                {
+                    System.out.print("Enter Your Number: ");
+                    bb=Integer.parseInt(br.readLine());
+                    rr=((Math.random())*10);
+                    rr=rr+1;
+                    aa=(int)(rr);
+                    System.out.println("Computer's Number: "+aa);
+                    if(bb==aa)
+                    {
+                        System.out.println("YOU ARE OUT!!!");
+                        System.out.println("YOUR FINAL SCORE = "+score1);
+                        break;
+                    }
+                    
+                    else if(bb>0&&bb<=10) 
+                    { 
+                        score1=score1+bb; 
+                    } 
+                    else if(bb>10||bb<=0)
+                    {
+                        System.out.println("You have entered wrong number. Game Over!");
+                        cheat++;
+                        break;
+                    }
+
+                    System.out.println("Your Current Score Is "+score1);
+                }
+                
+                for(c=0;c<=2;c++) { if(cheat>0)
+                    {
+                        break;
+                    }
+                }
+                
+                for(c=0;c<1;c++) 
+                { 
+                    if(cheat>0)
+                    {
+                        break;
+                    }
+                    System.out.println("YOU ARE BOWLING:");
+                }
+                
+                for(c=0;c<=2;c++) 
+                { 
+                    if(cheat>0)
+                    {
+                        break;
+                    }   
+                }
+                
+                for(ii=1;ii>0;ii++)
+                {
+                    if(cheat>0)
+                    {
+                        break;
+                    }
+                    System.out.print("Enter Your Number: ");
+                    bb=Integer.parseInt(br.readLine());
+                    rr=((Math.random())*10);
+                    rr=rr+1;
+                    aa=(int)(rr);
+                    System.out.println("Computer's Number: "+aa);
+                    if(aa==bb)
+                    {
+                        System.out.println("COMPUTER IS OUTT!!!!");
+                        System.out.println("COMPUTER'S FINAL SCORE = "+score2);
+                        break;
+                    }
+                    
+                    else if(bb>0&&bb<=10) 
+                    { 
+                        score2=score2+aa; 
+                    } 
+                    else if(bb>10||bb<=0)
+                    {
+                        System.out.println("You have entered a wrong number. Game Over!"); 
+                        cheat++; 
+                        break; 
+                    } 
+                    if(score2>score1)
+                    {
+                        System.out.println("THE COMPUTER HAS SCORED MORE THAN YOUU!!!");
+                        System.out.println("COMPUTER'S FINAL SCORE = "+score2);
+                        break;
+                    }
+                    System.out.println("Computer's Current Score Is "+score2);
+                }
+                for(c=0;c<=2;c++) 
+                { 
+                    if(cheat>0)
+                    {
+                        break;
+                    }
+                }
+                for(ii=0;ii<1;ii++) 
+                { 
+                    if(cheat>0)
+                    {
+                        break;
+                    }
+                    System.out.println("YOUR FINAL SCORE = "+score1);
+                    System.out.println("COMPUTER'S FINAL SCORE = "+score2);
+                    if((score1)>(score2))
+                    {
+                        System.out.println("Congratulations "+name+"!! You Have Defeated The Computer!!!");
+                    }
+                    
+                    else if((score1)<(score2))
+                    {
+                        System.out.println("Sorry "+name+", But The Computer Has Defeated You!!!");
+                    }
+                    
+                    else
+                    {
+                        System.out.println("It's a Tie!!!");
+                    }
+                }
+                System.out.println("Enter 1 To Play This Game Again.");
+                System.out.println("Enter 0 Or Any Other Number To Quit.");
+                choice=Integer.parseInt(br.readLine());
+                if(choice==1)
+                {
+                    System.out.print('\f');
+                }
+            
+                else
+                {
+                    System.out.print('\f');
+                    System.out.println("Good Bye!");
+                    break;
+                }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Java/Simple Games/Hand Cricket/README.md b/Java/Simple Games/Hand Cricket/README.md
new file mode 100644
index 00000000..7b620d1d
--- /dev/null
+++ b/Java/Simple Games/Hand Cricket/README.md	
@@ -0,0 +1,6 @@
+# Summary
+
+![image](https://user-images.githubusercontent.com/91012632/139527121-23e05246-f857-43a0-aae9-74c77a476260.png)
+
+ - This is a program for the simple game of Hand Cricket. It is usually played between 2 players but this is vs computer game. 
+ - You can choose a number between 1-10. If the number matches with the one that computer randomly generates, then you are out. Else the numbers add up till you are out. Whoever scores the most, wins.
diff --git a/Java/SmallerNumbers.java b/Java/SmallerNumbers.java
new file mode 100644
index 00000000..32725be2
--- /dev/null
+++ b/Java/SmallerNumbers.java
@@ -0,0 +1,67 @@
+//Write a Program to Count Smaller Numbers after self:
+
+//You are given an integer array and you have to return a new count array. 
+//The counts array has the property where count[i] is the number of smaller elements to the right of nums[i].
+//eg. INPUT: arr:[6,2,5,8]
+// OUTPUT: [2,0,0,0]
+
+
+import java.util.*;
+
+class Main {
+	public static void main (String[] args) {
+		int[] nums={6,2,5,8};
+		int[] res=new int[nums.length];
+		int[] count=new int[nums.length];
+		int[] indexes=new int[nums.length];
+		for(int i=0;i<nums.length;i++){
+		    indexes[i]=i;
+		}
+		mergesort(nums,indexes,count,0,nums.length-1);
+		for(int i=0;i<count.length;i++){
+		    res[i]=count[i];
+		}
+		System.out.print(Arrays.toString(res));
+	}
+	
+	static void mergesort(int[] nums,int[] indexes,int[] count,int start,int end){
+	    if(start>=end) return;
+	    int mid=start+(end-start)/2;
+	    mergesort(nums,indexes,count,start,mid);
+	    mergesort(nums,indexes,count,mid+1,end);
+	    merge(nums,indexes,count,start,mid,end);
+	}
+	
+	static void merge(int[] nums,int[] indexes,int[] count,int start,int mid,int end){
+	    int left_ind=start;
+	    int right_ind=mid+1;
+	    int[]tempInd=new int[end-start+1];
+	    int ind=0;
+	    int cnt=0;
+	    while(left_ind<=mid && right_ind<=end){
+	        if(nums[indexes[left_ind]]>nums[indexes[right_ind]]){
+	            tempInd[ind]=indexes[right_ind];
+	            cnt++;
+	            right_ind++;
+	        }
+	        else{
+	            tempInd[ind]=indexes[left_ind];
+	            count[indexes[left_ind]]+=cnt;
+	            left_ind++;
+	        }
+	        ind++;
+	    }
+	    while(left_ind<=mid){
+	        tempInd[ind++]=indexes[left_ind];
+	        count[indexes[left_ind]]+=cnt;
+	        left_ind++;
+	    }
+	    while(right_ind<=end){
+	        tempInd[ind++]=indexes[right_ind++];
+	    }
+	    int k=start;
+	    for(int i:tempInd){
+	        indexes[k++]=i;
+	    }
+	}
+}
diff --git a/Java/SudokuSolver.java b/Java/SudokuSolver.java
new file mode 100644
index 00000000..be9bd423
--- /dev/null
+++ b/Java/SudokuSolver.java
@@ -0,0 +1,92 @@
+// import java.io.*;
+import java.util.*;
+
+public class SudokuSolver {
+  public static void display(int[][] board){
+    for(int i = 0; i < board.length; i++){
+      for(int j = 0; j < board[0].length; j++){
+        System.out.print(board[i][j] + " ");
+      }
+      System.out.println();
+    }
+  }
+
+  public static void solveSudoku(int[][] board, int i, int j) {
+    // write yopur code here
+    if(i==9){
+        display(board);
+        return;
+    }
+    
+    int nc;
+    int nr;
+    if(j==board.length-1){
+        nc=0;
+        nr=i+1;
+    }else{
+        nr=i;
+        nc=j+1;
+    }
+    
+    
+    if(board[i][j]==0){
+        for(int val=1;val<=9;val++){
+            
+            if(isSafe(board,i,j,val)==true){
+                board[i][j]=val;
+                 solveSudoku(board,nr,nc);
+                 board[i][j]=0;
+            }
+        }
+    }else{
+      
+          solveSudoku(board,nr,nc);
+        
+    }
+    
+    
+    
+  }
+  
+  
+  public static boolean isSafe(int[][] board,int row,int col,int val){
+      
+      for(int i=0,j=col;i<board.length;i++){
+          if(board[i][col]==val){
+              return false;
+          }
+      }
+      
+      for(int j=0,i=row;j<board.length;j++){
+          if(board[i][j]==val){
+              return false;
+          }
+      }
+      
+      int sr=(row/3)*3;
+      int sc=(col/3)*3;
+      
+      for(int r=sr;r<=sr+2;r++){
+          for(int c=sc;c<=sc+2;c++){
+              if(board[r][c]==val){
+                  return false;
+              }
+          }
+      }
+      
+      
+      return true;
+  }
+
+  public static void main(String[] args) throws Exception {
+    Scanner scn = new Scanner(System.in);
+    int[][] arr = new int[9][9];
+    for (int i = 0; i < 9; i++) {
+      for (int j = 0; j < 9; j++) {
+        arr[i][j] = scn.nextInt();
+      }
+    }
+
+    solveSudoku(arr, 0, 0);
+  }
+}
\ No newline at end of file
diff --git a/Java/Temperature_Conversion.java b/Java/Temperature_Conversion.java
new file mode 100644
index 00000000..fa0327ad
--- /dev/null
+++ b/Java/Temperature_Conversion.java
@@ -0,0 +1,54 @@
+import java.util.*;
+public class Temperature_Conversion
+{
+    public static void main(String args[])
+    {
+        Scanner sc=new Scanner(System.in);
+        double c=0.0,k=0.0,f=0.0;
+        int n;
+        System.out.println("Enter the value of the temperature you wish to convert");
+        double value=sc.nextDouble();
+        System.out.println("In which unit do you have the temperature?");
+        System.out.println("Enter 1 for Celsius to Fahrenheit and Kelvin");
+        System.out.println("Enter 2 for Fahrenheit to Celsius and Kelvin");
+        System.out.println("Enter 3 for Kelvin to Celsius and Fahrenheit");
+        n=sc.nextInt();
+        switch(n)
+        {
+            case 1:
+            {
+                System.out.println("The answer in Fahrenheit will be:");
+                f=(value*9/5)+32;
+                System.out.println(f);
+                System.out.println("The answer in Kelvin will be:");
+                k=value+273;
+                System.out.println(k);
+                break;
+            }
+            case 2:
+            {
+                System.out.println("The answer in Celsius will be:");
+                c=(value*5/9)-32;
+                System.out.println(c);
+                System.out.println("The answer in Kelvin will be:");
+                k=c+273;
+                System.out.println(k);
+                break;
+            }
+            case 3:
+            {
+                System.out.println("The answer in Celsius will be:");
+                c=value-273;
+                System.out.println(c);
+                System.out.println("The answer in Fahrenheit will be:");
+                f=(c*9/5)+32;
+                System.out.println(f);
+                break;
+            }
+            default:
+            {
+                System.out.println("Invalid choice");
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Java/_2DArray.java b/Java/_2DArray.java
index 1a52bd88..7c46b523 100644
--- a/Java/_2DArray.java
+++ b/Java/_2DArray.java
@@ -1,4 +1,4 @@
-package JAVA;
+// package JAVA;
 import java.util.Scanner;
 public class _2DArray {
     public static void main(String[] args) {
@@ -48,7 +48,7 @@ public static void main(String[] args) {
             }System.out.println();
         }
 
-
+         sc.close();
     }
 }
 
diff --git a/Java/armstrong.java b/Java/armstrong.java
new file mode 100644
index 00000000..48b7f2a9
--- /dev/null
+++ b/Java/armstrong.java
@@ -0,0 +1,36 @@
+import java.util.Scanner;  
+import java.lang.Math;  
+public class armstrong  
+{  
+static boolean isArmstrong(int n)   
+{   
+int temp, digits=0, last=0, sum=0;   
+temp=n;   
+while(temp>0)    
+{   
+temp = temp/10;   
+digits++;   
+}   
+temp = n;   
+while(temp>0)   
+{   
+last = temp % 10;   
+sum +=  (Math.pow(last, digits));   
+temp = temp/10;   
+}  
+if(n==sum)   
+return true;      
+else return false;   
+}   
+public static void main(String args[])     
+{     
+int num;   
+Scanner sc= new Scanner(System.in);  
+System.out.print("Enter the number: ");  
+num=sc.nextInt();  
+if(isArmstrong(num))  
+System.out.println(num+" is an armstrong number");
+else
+System.out.println(num+" is not armstrong");
+}   
+}  
diff --git a/Java/inverse of a matrix.java b/Java/inverse of a matrix.java
new file mode 100644
index 00000000..163ffd0e
--- /dev/null
+++ b/Java/inverse of a matrix.java	
@@ -0,0 +1,136 @@
+import java.util.Scanner;
+ 
+public class matInv{
+
+    public static void main(String argv[]){
+
+        Scanner sc = new Scanner(System.in);
+
+        // get the dimensions of the matrix
+
+        System.out.println("Enter the size of square matrix ( 'n' of an 'nxn' matrix): ");
+
+        int n = sc.nextInt();
+
+        double a[][]= new double[n][n];
+
+        System.out.println("\nStart entering the elements sequentially: ");
+
+        // populate the matrix
+
+        for(int i=0; i<n; i++)
+            for(int j=0; j<n; j++)
+                a[i][j] = sc.nextDouble();
+ 
+        // call for inverting the matrix and storing the returned output in matrix 'd'
+        double ans[][] = matrixInversion(a);
+ 
+        System.out.println("\nInverse of the given "+n+"x"+n+" matrix is: ");
+        
+        for (int i=0; i<n; ++i){
+
+            for (int j=0; j<n; ++j){
+                System.out.print(ans[i][j]+"  ");
+            }
+
+            System.out.println();
+        }
+    }   
+ 
+    public static double[][] matrixInversion(double a[][]){
+
+        int n = a.length;
+
+        double x[][] = new double[n][n];
+        double b[][] = new double[n][n];
+
+        int index[] = new int[n];
+
+        for (int i=0; i<n; ++i){
+            b[i][i] = 1;
+        }
+ 
+        // matrix is coverted to an upper triangle matrix ( all elements are zeroes below the diagonal)
+        gaussian(a, index);
+ 
+        // update the matrix
+
+        for (int i=0; i<n-1; ++i)
+            for (int j=i+1; j<n; ++j)
+                for (int k=0; k<n; ++k)
+                    b[index[j]][k]-= a[index[j]][i]*b[index[i]][k];
+ 
+        // back substitution
+
+        for (int i=0; i<n; ++i) {
+
+            x[n-1][i] = b[index[n-1]][i]/a[index[n-1]][n-1];
+            
+            for (int j=n-2; j>=0; --j){
+
+                x[j][i] = b[index[j]][i];
+
+                for (int k=j+1; k<n; ++k){
+                    x[j][i] -= a[index[j]][k]*x[k][i];
+                }
+
+                x[j][i] /= a[index[j]][j];
+            }
+        }
+
+        return x;
+    }
+
+    public static void gaussian(double a[][], int index[]){
+
+        int n = index.length;
+        double c[] = new double[n];
+ 
+        for (int i=0; i<n; ++i) 
+            index[i] = i;
+ 
+        for (int i=0; i<n; ++i){
+
+            double c1 = 0;
+
+            for (int j=0; j<n; ++j){
+
+                double c0 = Math.abs(a[i][j]);
+                if (c0 > c1) c1 = c0;
+            }
+
+            c[i] = c1;
+        }
+
+        int k = 0;
+
+        for (int j=0; j<n-1; ++j){
+
+            double pi1 = 0;
+
+            for (int i=j; i<n; ++i){
+
+                double pi0 = Math.abs(a[index[i]][j]);
+                pi0 /= c[index[i]];
+
+                if (pi0 > pi1){
+                    pi1 = pi0;
+                    k = i;
+                }
+            }
+ 
+            int itmp = index[j];
+            index[j] = index[k];
+            index[k] = itmp;
+            for (int i=j+1; i<n; ++i){
+
+                double pj = a[index[i]][j]/a[index[j]][j];
+ 
+                a[index[i]][j] = pj;
+ 
+                for (int l=j+1; l<n; ++l)
+                    a[index[i]][l] -= pj*a[index[j]][l];
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Java/last_word.java b/Java/last_word.java
new file mode 100644
index 00000000..3453e29f
--- /dev/null
+++ b/Java/last_word.java
@@ -0,0 +1,46 @@
+package kshitizjava;
+/*
+ * Given a string s consisting of some words 
+ * separated by some number of spaces, 
+ * return the length of the last word in the string.
+ * 
+ * for example Hello World
+ * will give 5
+ * as The last word is "World" with length 5.
+ * 
+ */
+import java.util.*;
+public class last_word {
+
+	    public static int lengthOfLastWord(String s) {
+	        
+	        String S=s.trim();
+	        int l=S.length();
+	        String str="";
+	        int p=0;
+	        
+	        for(int i=l-1;i>0;i--)
+	        {
+	            if(S.charAt(i)==' ')
+	            {
+	                p=i+1;
+	                break;
+	            }
+	            
+	            
+	        }
+	        str=S.substring(p,l);
+	        int l2=str.length();
+	        return l2;
+	        
+	    }
+
+	public static void main(String[] args) {
+		Scanner in=new Scanner (System.in);
+		System.out.println("Enter a String");
+		String s=in.nextLine();
+		System.out.println(last_word.lengthOfLastWord(s));
+
+	}
+
+}
diff --git a/Java/palindrome.java b/Java/palindrome.java
new file mode 100644
index 00000000..aaed2234
--- /dev/null
+++ b/Java/palindrome.java
@@ -0,0 +1,28 @@
+// Program to check if a number is palindrome number or not
+
+import java.util.Scanner;
+
+public class palindrome {
+
+    public static void main(String argv[]) {
+
+        Scanner sc = new Scanner(System.in);
+
+        System.out.println("Enter the number: ");
+
+        int number = sc.nextInt();
+
+        int duplicate_number = number, remainder = 0, reverse = 0;
+
+        while (duplicate_number > 0) {
+            remainder = duplicate_number % 10;
+            reverse = reverse * 10 + remainder;
+            duplicate_number /= 10;
+        }
+
+        if (reverse == number)
+            System.out.println(number + " is a palindrome number ");
+        else
+            System.out.println(number + " is not a palindrome number ");
+    }
+}
diff --git a/Java/reverse.java b/Java/reverse.java
new file mode 100644
index 00000000..4f7b4b8b
--- /dev/null
+++ b/Java/reverse.java
@@ -0,0 +1,36 @@
+/*The program below is used to reverse an array 
+ * for example an array of {1,2,3,4,5}
+ * will become {5,4,3,2,1} upon reversing
+ */
+
+package kshitizjava;
+import java.util.*;
+public class reverse {
+
+	public static void main(String[] args) {
+		Scanner in=new Scanner(System.in);
+		int size,i;
+		System.out.println("enter size of array");
+		size=in.nextInt();
+		int arr[]=new int[size];
+		System.out.println("enter values in the array");
+		for(i=0;i<size;i++)
+		{
+			arr[i]=in.nextInt();
+		}
+		int temp;
+		for(i=0;i<size/2;i++)
+		{
+			//swapping elements to obtain reversed array
+			temp=arr[i];
+			arr[i]=arr[size-i-1];
+			arr[size-i-1]=temp;
+		}
+		System.out.println("array after reversing is");
+		for(i=0;i<size;i++)
+		{
+			System.out.print(arr[i]+" ");
+		}
+	}
+
+}
diff --git a/Java/transpose.java b/Java/transpose.java
new file mode 100644
index 00000000..06fb7369
--- /dev/null
+++ b/Java/transpose.java
@@ -0,0 +1,33 @@
+// Program to transpose a matrix
+
+import java.util.Scanner;
+
+public class transpose {
+
+  public static void main(String argv[]) {
+
+    Scanner sc = new Scanner(System.in);
+
+    System.out.println("Enter the size of matrix: ");
+    int size = sc.nextInt();
+    int matrix[][] = new int[size][size];
+
+    System.out.println("Enter the elements of the matrix: ");
+    for (int i = 0; i < size; i++) {
+      for (int j = 0; j < size; j++) {
+        matrix[i][j] = sc.nextInt();
+      }
+      System.out.println();
+    }
+
+    int transpose_matrix[][] = new int[size][size];
+
+    for (int i = 0; i < size; i++) {
+      for (int j = 0; j < size; j++) {
+        transpose_matrix[i][j] = matrix[j][i];
+        System.out.print(transpose_matrix[i][j]);
+      }
+      System.out.println();
+    }
+  }
+}
diff --git a/Javascript/Numbers/fibonacci.js b/Javascript/Numbers/fibonacci.js
new file mode 100644
index 00000000..7bb3cb73
--- /dev/null
+++ b/Javascript/Numbers/fibonacci.js
@@ -0,0 +1,13 @@
+// fibonacci method returns the specific Nth fibonacci number
+const fibonacci = (n, memo = {}) => {
+  // firstly, check that input is a number or not.
+  if (typeof n !== 'number') {
+    return 'not a number.'
+  }
+  return (
+    memo[n] ||
+    (n <= 2 ? 1 : (memo[n] = fibonacci(n - 1, memo) + fibonacci(n - 2, memo)))
+  )
+}
+
+console.log(fibonacci(20))
diff --git a/Javascript/README.md b/Javascript/README.md
new file mode 100644
index 00000000..24c56c6c
--- /dev/null
+++ b/Javascript/README.md
@@ -0,0 +1,3 @@
+## Put normal Javascript questions and programs here!
+
+### Make New folder accordingly if needed for any concepts.
diff --git a/Javascript/Strings/CheckCamelCase.js b/Javascript/Strings/CheckCamelCase.js
new file mode 100644
index 00000000..941facc0
--- /dev/null
+++ b/Javascript/Strings/CheckCamelCase.js
@@ -0,0 +1,15 @@
+// CheckCamelCase method checks the given string is in camelCase or not.
+
+const checkCamelCase = varName => {
+  // firstly, check that input is a string or not.
+  if (typeof varName !== 'string') {
+    return 'not a string.'
+  }
+
+  const reg = /^[a-z][A-Za-z]*$/
+  return reg.test(varName)
+}
+
+console.log(checkCamelCase('myVar'))
+console.log(checkCamelCase('MyVar'))
+console.log(checkCamelCase('my-var'))
diff --git a/Javascript/Strings/CheckFlatCase.js b/Javascript/Strings/CheckFlatCase.js
new file mode 100644
index 00000000..098a2663
--- /dev/null
+++ b/Javascript/Strings/CheckFlatCase.js
@@ -0,0 +1,15 @@
+// checkFlatCase method checks if the given string is in flatcase or not.
+
+const checkFlatCase = varname => {
+  // firstly, check that input is a string or not.
+  if (typeof varname !== 'string') {
+    return 'not a string.'
+  }
+
+  const reg = /^[a-z]*$/
+  return reg.test(varname)
+}
+
+console.log(checkFlatCase('myvar'))
+console.log(checkFlatCase('MyVar'))
+console.log(checkFlatCase('my-var'))
diff --git a/Javascript/Strings/CheckKebabCase.js b/Javascript/Strings/CheckKebabCase.js
new file mode 100644
index 00000000..a1d85627
--- /dev/null
+++ b/Javascript/Strings/CheckKebabCase.js
@@ -0,0 +1,15 @@
+// CheckKebabCase method checks the given string is in kebab-case or not.
+
+const checkSnakeCase = varName => {
+  // firstly, check that input is a string or not.
+  if (typeof varName !== 'string') {
+    return 'not a string.'
+  }
+
+  const reg = /(.*?)-([a-zA-Z])*/
+  return reg.test(varName)
+}
+
+console.log(checkSnakeCase('myVar'))
+console.log(checkSnakeCase('my_var'))
+console.log(checkSnakeCase('my-var'))
diff --git a/Javascript/Strings/CheckPalindrome.js b/Javascript/Strings/CheckPalindrome.js
new file mode 100644
index 00000000..dc1dbbba
--- /dev/null
+++ b/Javascript/Strings/CheckPalindrome.js
@@ -0,0 +1,21 @@
+// Palindrome check is case sensitive; i.e. Aba is not a palindrome
+
+const checkPalindrome = str => {
+  // check that input is a string
+  if (typeof str !== 'string') {
+    return 'Not a string'
+  }
+  if (str.length === 0) {
+    return 'Empty string'
+  }
+  // Reverse only works with array, thus convert the string to array, reverse it and convert back to string
+  // return as palindrome if the reversed string is equal to the input string
+  const reversed = [...str].reverse().join('')
+  return str === reversed ? 'Palindrome' : 'Not a Palindrome'
+}
+
+console.log(checkPalindrome('hello'))
+console.log(checkPalindrome(12))
+console.log(checkPalindrome(null))
+console.log(checkPalindrome(undefined))
+console.log(checkPalindrome('level'))
diff --git a/Javascript/Strings/CheckPascalCase.js b/Javascript/Strings/CheckPascalCase.js
new file mode 100644
index 00000000..f8f1215f
--- /dev/null
+++ b/Javascript/Strings/CheckPascalCase.js
@@ -0,0 +1,15 @@
+// CheckPascalCase method checks the given string is in PascalCase or not.
+
+const checkPascalCase = VarName => {
+  // firstly, check that input is a string or not.
+  if (typeof VarName !== 'string') {
+    return 'not a string.'
+  }
+
+  const reg = /^[A-Z][A-Za-z]*$/
+  return reg.test(VarName)
+}
+
+console.log(checkPascalCase('myVar'))
+console.log(checkPascalCase('MyVar'))
+console.log(checkPascalCase('my-var'))
diff --git a/Javascript/Strings/CheckSnakeCase.js b/Javascript/Strings/CheckSnakeCase.js
new file mode 100644
index 00000000..d465497a
--- /dev/null
+++ b/Javascript/Strings/CheckSnakeCase.js
@@ -0,0 +1,15 @@
+// CheckSnakeCase method checks the given string is in snake_case or not.
+
+const checkSnakeCase = varName => {
+  // firstly, check that input is a string or not.
+  if (typeof varName !== 'string') {
+    return 'not a string.'
+  }
+
+  const reg = /(.*?)_([a-zA-Z])*/
+  return reg.test(varName)
+}
+
+console.log(checkSnakeCase('myVar'))
+console.log(checkSnakeCase('my_var'))
+console.log(checkSnakeCase('my-var'))
diff --git a/Javascript/Strings/ConsonantCount.js b/Javascript/Strings/ConsonantCount.js
new file mode 100644
index 00000000..594006a0
--- /dev/null
+++ b/Javascript/Strings/ConsonantCount.js
@@ -0,0 +1,23 @@
+// Given a string of words or phrases, count the number of consonants.
+
+const vowelCount = value => {
+  if (typeof value !== 'string') {
+    return 'not a string'
+  }
+  const vowels = ['a', 'e', 'i', 'o', 'u']
+
+  let countConsonants = 0
+
+  for (let i = 0; i < value.length; i++) {
+    const char = value[i].toLowerCase()
+    if (!vowels.includes(char)) {
+      countConsonants++
+    }
+  }
+  return countConsonants
+}
+
+console.log(vowelCount('hello'))
+console.log(vowelCount('rythm'))
+console.log(vowelCount(20))
+console.log(vowelCount(null))
diff --git a/Javascript/Strings/ReverseString.js b/Javascript/Strings/ReverseString.js
new file mode 100644
index 00000000..6724a4b1
--- /dev/null
+++ b/Javascript/Strings/ReverseString.js
@@ -0,0 +1,19 @@
+// Reverse a given string
+
+function reverseString (string) {
+  if (typeof string !== 'string') {
+    return 'not a string.'
+  }
+  let reversedString = ''
+  let index
+
+  for (index = string.length - 1; index >= 0; index--) {
+    reversedString += string[index]
+  }
+
+  return reversedString
+}
+
+console.log(reverseString('hello'))
+console.log(reverseString(100))
+console.log(reverseString('world'))
diff --git a/Javascript/Strings/VowelCount.js b/Javascript/Strings/VowelCount.js
new file mode 100644
index 00000000..9578b861
--- /dev/null
+++ b/Javascript/Strings/VowelCount.js
@@ -0,0 +1,23 @@
+// Given a string of words or phrases, count the number of vowels.
+
+const vowelCount = value => {
+  if (typeof value !== 'string') {
+    return 'not a string'
+  }
+  const vowels = ['a', 'e', 'i', 'o', 'u']
+
+  let countVowels = 0
+
+  for (let i = 0; i < value.length; i++) {
+    const char = value[i].toLowerCase()
+    if (vowels.includes(char)) {
+      countVowels++
+    }
+  }
+  return countVowels
+}
+
+console.log(vowelCount('hello'))
+console.log(vowelCount('rythm'))
+console.log(vowelCount(20))
+console.log(vowelCount(null))
diff --git a/Python/Alphabet_Rangoli.py b/Python/Alphabet_Rangoli.py
new file mode 100644
index 00000000..e0065b82
--- /dev/null
+++ b/Python/Alphabet_Rangoli.py
@@ -0,0 +1,18 @@
+import string
+alpha = string.ascii_lowercase
+
+def alphabet_rangoli(size):
+    list = []
+    for row in range(size):
+        hypen = "-".join(alpha[row:size])
+        list.append(hypen[::-1] + hypen[1:])
+    width = len(list[0])
+    
+    for row in range(size-1, 0, -1):
+        print(list[row].center(width, '-'))
+        
+    for row in range(size):
+        print(list[row].center(width, '-'))
+
+
+alphabet_rangoli(int(input('Enter n = ')))
diff --git a/Python/Birthday wish calculator.py b/Python/Birthday wish calculator.py
new file mode 100644
index 00000000..7ddfd980
--- /dev/null
+++ b/Python/Birthday wish calculator.py	
@@ -0,0 +1,14 @@
+import datetime
+current_date=datetime.date.today().strftime('%Y-%m-%d')
+current_date_ist=current_date.split('-')
+b_date=input("Enter birthday date in year-month-date format : ")
+name=input("Name of birthday legend : ")
+b_date=b_date.split('-')
+if current_date_ist[1] == b_date[1] and current_date_ist[2] == b_date[2] :
+    age=int(current_date_ist[0]) - int(b_date[0])
+    ordinal_suffix={1 : 'st',2 : 'nd',3 : 'rd',11 : 'th',12 : 'th',13 : 'th'}.get(age % 10 if not 10 < age <= 13 else age % 14,'th' )
+    print(f" it's {name}'s {age}{ordinal_suffix} birthday" )
+else:
+    print("sorry today is not your birthday")
+
+#Please enter your date of birth year-month-date format
diff --git a/Python/Games/The no Guessing game/ThenoGuessinggame.py b/Python/Games/The no Guessing game/ThenoGuessinggame.py
new file mode 100644
index 00000000..67213cee
--- /dev/null
+++ b/Python/Games/The no Guessing game/ThenoGuessinggame.py	
@@ -0,0 +1,36 @@
+#The Number Guessing Game.
+
+
+inp1= input("Welcome to 'The Guessing Number Game!!!'\n"
+            "Press Enter to move forward\n")
+
+print("Do you want to start the game?\n"
+      "Press 1 to start else 2 to quit the game")
+inp2= int(input())
+
+if inp2==2:
+   print("You quit the game")
+
+if inp2==1:
+    print("Let's start the game")
+
+    n = 18
+    i = 0
+    while (i < 9):
+        i = i + 1
+        print("Enter a number")
+        x = int(input())
+        if x == n:
+            print("Congrats!! your number has matched")
+            print("number guesses you took", i)
+            break
+        elif x < 18:
+            print("Try again with a larger number")
+            print("Chances left", 9 - i)
+            continue
+        elif x > 18:
+            print("Try again with a smaller number")
+            print("chances left", 9 - i)
+        elif i > 9:
+            print("OOPS!! U have used all ur chances")
+            break
diff --git a/Python/Games/card_games/black_deck.py b/Python/Games/card_games/black_deck.py
new file mode 100644
index 00000000..a914832d
--- /dev/null
+++ b/Python/Games/card_games/black_deck.py
@@ -0,0 +1,212 @@
+# to stimulate this game you just have to download or paste the code in any your IDE or editor
+# which is compatible with running python codes.
+
+
+import random
+
+suits = ('Hearts', 'Diamonds', 'Spades', 'Clubs')
+ranks = ('Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Jack', 'Queen', 'King', 'Ace')
+values = {'Two':2, 'Three':3, 'Four':4, 'Five':5, 'Six':6, 'Seven':7, 'Eight':8, 'Nine':9, 'Ten':10, 'Jack':10, 'Queen':10, 'King':10, 'Ace':11}
+
+playing = True
+
+class Card:
+    
+    def __init__(self,suit,rank):
+        self.suit = suit
+        self.rank = rank
+        self.value = values[rank]
+    
+    def __str__(self):
+        return self.rank+' of '+self.suit
+
+# two_hearts = Card('Hearts','Two')
+# print(two_hearts)
+
+class Deck:
+    
+    def __init__(self):
+        self.deck = []  # start with an empty list
+        for suit in suits:
+            for rank in ranks:
+                self.deck.append(Card(suit,rank))
+    
+    def __str__(self):
+        return f'{self.deck[7]}'
+
+    def shuffle(self):
+        random.shuffle(self.deck)
+        
+    def deal(self):
+        return self.deck.pop(0)
+        
+class Hand:
+    def __init__(self):
+        self.cards = []  # start with an empty list as we did in the Deck class
+        self.value = 0   # start with zero value
+        self.aces = 0    # add an attribute to keep track of aces
+    
+    def add_card(self,card):
+        self.cards.append(card)
+        self.value += values[card.rank]
+        if 'Ace' in card.rank:
+            self.aces +=1
+
+    def adjust_for_ace(self):
+        if self.aces > 0:
+            while True:
+                if self.value > 21:
+                    self.value -= 10
+                    self.aces -=1
+                    continue
+                else:
+                    break
+                
+class Chips:
+    
+    def __init__(self):
+        self.total = 100  # This can be set to a default value or supplied by a user input
+        self.bet = 0
+        
+    def win_bet(self):
+        self.total += self.bet
+    
+    def lose_bet(self):
+        self.total -= self.bet
+
+def take_bet(chips):
+    while True:
+        try:
+            chips.bet = int(input('enter the amount to bet :'))
+        except ValueError:
+            print('oops ! enter a integer !')
+        else:
+            if chips.bet>chips.total:
+                print("bent can't be placed")
+                continue
+            else:
+                break
+
+def hit(deck,hand):
+    
+    hand.add_card(deck.deal())
+    hand.adjust_for_ace()
+
+def hit_or_stand(deck,hand):
+    global playing  # to control an upcoming while loop
+    
+    while True:
+        Hit = input('do you want to hit or stand : "h" or "s" : ')
+        if Hit[0].lower() == 'h':
+            hit(deck,hand)
+        elif Hit[0].lower() == 's':
+            print('player is standing! dealer is playing.')
+        else:
+            print('Sorry ! please try again . ')
+            continue
+        break
+
+def show_some(player,dealer):
+    
+    print('dealer"s hand :')
+    print('< card hidden >')
+    print('',dealer.cards[1])
+    print('\nplayer"s hand :',*player.cards,sep = '\n')
+    
+def show_all(player,dealer):
+    
+    print('dealer"s hand  :',*dealer.cards,sep = '\n')
+    print('dealer"s value :',*dealer.value)
+    print('player"s hand  :',*player.cards,sep = '\n')
+    print('player"s value :',*player.value)
+
+def player_busts(player,dealer,chips):
+    print('player busted! dealer wins ')
+    chips.lose_bet()
+
+def player_wins(player,dealer,chips):
+    print('player wins !')
+    chips.win_bet()
+   
+def dealer_busts(player,dealer,chips):
+    print('dealer busted ! palyer wins')
+    chips.win_bet()
+    
+def dealer_wins(player,dealer,chips):
+    print('dealer wins !')
+    chips.lose_bet()
+    
+def push():
+    print('dealer and player ties up! it"s a push')
+
+while True:
+    # Print an opening statement
+    print('this a black jet stimulation ! \n reach as close as you can to 21 without going over !')
+    print(' ace can have value 1 or 11 ! \ndealer will stop at 17 !')
+    # Create & shuffle the deck, deal two cards to each player
+    deck = Deck()
+    deck.shuffle()
+    
+    player_hand = Hand()
+    player_hand.add_card(deck.deal())
+    player_hand.adjust_for_ace()
+    player_hand.add_card(deck.deal())
+    player_hand.adjust_for_ace()
+    
+    dealer_hand = Hand()
+    dealer_hand.add_card(deck.deal())
+    dealer_hand.adjust_for_ace()
+    dealer_hand.add_card(deck.deal())
+    dealer_hand.adjust_for_ace()
+        
+    # Set up the Player's chips
+    player_chips = Chips()
+    
+    # Prompt the Player for their bet
+    take_bet(player_chips)
+    
+    # Show cards (but keep one dealer card hidden)
+    show_some(player_hand,dealer_hand)
+    
+    while playing:  # recall this variable from our hit_or_stand function
+        
+        # Prompt for Player to Hit or Stand
+        hit_or_stand(deck,player_hand)
+        
+        # Show cards (but keep one dealer card hidden)
+        show_some(player_hand,dealer_hand)
+        
+        # If player's hand exceeds 21, run player_busts() and break out of loop
+        if player_hand.value > 21 :
+            player_busts(player_hand,dealer_hand,player_chips)
+            
+            break
+
+    # If Player hasn't busted, play Dealer's hand until Dealer reaches 17
+    if player_hand.value <= 21 :
+        if dealer_hand.value < 17 :
+            hit_or_stand(deck,dealer_hand)
+        
+        # Show all cards
+        show_all(player_hand,dealer_hand)
+        # Run different winning scenarios
+        if dealer_hand.value > 21 :
+            dealer_busts(player_hand,dealer_hand,player_chips)
+        
+        elif player_hand.value < dealer_hand : 
+            dealer_wins(player_hand,dealer_hand,player_chips)
+        
+        elif player_hand.value > dealer_hand :
+            player_wins(player_hand,dealer_hand,player_chips)
+            
+        else :
+            push()
+            
+    # Inform Player of their chips total 
+    print('the total chips that player have : ',player_chips.total)
+    # Ask to play again
+    choice = input('would you like to play again : "y" for yes or "n" for no')
+    if choice == 'y' :
+        continue
+    else :
+        break
\ No newline at end of file
diff --git a/Python/Games/card_games/card_game.py b/Python/Games/card_games/card_game.py
new file mode 100644
index 00000000..89b5b7ca
--- /dev/null
+++ b/Python/Games/card_games/card_game.py
@@ -0,0 +1,145 @@
+# import the required libraries....
+# for this project we need only "random" library only
+import random
+
+# create the set of cards...
+# here, if you want to make a single list, it will also work fine(but you might need to change some funtions) 
+# no. of element in suits = 4
+# no. of element in ranks = 13
+# total cards are 4*13 = 52
+suits = ('Hearts','Diamond','spades','Clubs')
+ranks = ('Two','Three','Four','Five','Six','Seven','Eight','Nine','Ten','Jack','Queen','King','Ace')
+values = {'Two':2,'Three':3,'Four':4,'Five':5,'Six':6,'Seven':7,'Eight':8,'Nine':9,'Ten':10,'Jack':11,'Queen':12,'King':13,'Ace':14}
+
+# now generate the cards
+# you can view the card by printing them
+class Card:
+
+    def __init__(self,suit,rank):
+
+        self.suit = suit
+        self.rank = rank
+        self.value = values[rank]
+
+    def __str__(self):
+        return self.rank + 'of' + self.suit
+
+# now this class make decks for the players and it has member functions like shuffle and deal_one
+# to increase its functionality
+class Deck:
+    
+    def __init__(self):
+        self.all_cards = []
+        for suit in suits:
+            for rank in ranks:
+                self.all_cards.append(Card(suit,rank))
+
+    def shuffle(self):
+
+        random.shuffle(self.all_cards)
+
+    def deal_one(self):
+        
+        return self.all_cards.pop()
+
+# this class makes the players and assign them functions that they can perform
+class Player:
+
+    def __init__(self,name):
+        self.name = name
+        self.all_cards = []
+
+    def remove_one(self):
+        return self.all_cards.pop(0)
+
+    def add_cards(self,new_cards):
+        if type(new_cards)==type([]):
+            self.all_cards.extend(new_cards)
+        else:
+            self.all_cards.append(new_cards)
+
+    def __str__(self):
+        return f'Player {self.name} has {[len(self.all_cards)]} cards.'
+
+# making two players 
+player_one = Player('One')
+player_two = Player('Two')
+
+# genterating decks and suffling the cards in it
+new_deck = Deck()
+new_deck.shuffle()
+
+# assigning the cards to the players
+for i in range(26):
+    player_one.add_cards(new_deck.deal_one())
+    player_two.add_cards(new_deck.deal_one())
+
+# this acts as the switch for the game to tune on and off
+game_on = True
+
+# main logic of the game
+round_num = 0
+while game_on:
+
+    round_num +=1
+    print(f'Round {round_num}')
+
+    if len(player_one.all_cards) == 0:
+        print('Player One out of cards! Game over')
+        print('Player Two Wins!')
+        game_on = False
+        break
+
+    if len(player_two.all_cards) == 0:
+        print('Player Two out of cards! Game Over')
+        print('Player One Wins!')
+        game_on = False
+        break
+
+
+    player_one_cards = []
+    player_one_cards.append(player_one.remove_one())
+
+    player_two_cards = []
+    player_two_cards.append(player_two.remove_one())
+
+    at_war = True
+
+    while at_war:
+
+        if player_one_cards[-1].value > player_two_cards[-1].value:
+
+            player_one.add_cards(player_one_cards)
+            player_one.add_cards(player_two_cards)
+
+            at_war = False
+
+        elif player_one_cards[-1].value < player_two_cards[-1].value:
+
+            player_two.add_cards(player_two_cards)
+            player_two.add_cards(player_one_cards)
+
+            at_war = False
+
+        else:
+            
+            print('WAR!')
+
+            if len(player_one.all_cards)<5:
+                
+                print('Player One unable to play war! Game Over at War')
+                print('PLayer Two Wins! Player One Loses!')
+                game_on = False
+
+            elif len(player_two.all_cards)<5:
+                
+                print('Player Two unable to play war! Over at War')
+                print('Player One Wins! Player Two Loses')
+                game_on = False
+                break
+
+            else:
+                for num in range(5):
+                    player_one_cards.append(player_one.remove_one())
+                    player_two_cards.append(player_two.remove_one())
+
diff --git a/Python/Games/card_games/readme.md b/Python/Games/card_games/readme.md
new file mode 100644
index 00000000..0969264f
--- /dev/null
+++ b/Python/Games/card_games/readme.md
@@ -0,0 +1,29 @@
+# to stimulate both of the  game you just have to download or paste the code in any your IDE or editor
+# which is compatible with running python codes.
+
+
+## card game
+
+this is a simple card game in which computer acting as two opponents tries to beat each other.
+
+the logic is, we suffle the cards we generated and than distribute them to the players.
+
+now what is happening is that ....
+they both take turns and at each turn they ramove one card from their deck and 
+compare it with the card of the other player and who so evers' card has greater value wins that round and
+this continues until some one left with no card.
+
+if the compared cards have same value than a situation of war arises,
+in which the take another card and who so ever wins keep the all the card on the war. 
+
+## black deck
+the main logic of the game is as follows...
+1. A standard deck of playing cards has four suits (Hearts, Diamonds, Spades and Clubs) 
+2. thirteen ranks (2 through 10, then the face cards Jack, Queen, King and Ace) for a total of 52 cards per deck.
+3. Jacks, Queens and Kings all have a rank of 10.
+4. Aces have a rank of either 11 or 1 as needed to reach 21 without busting.
+so the game is to reach to a total score of 21 with hitting or standing. If you stand than the result will be decleared 
+and who so ever wins get the total amount on bet. you can change the bet amount and if user win he gets the double of 
+its money.
+
+enjoy :)
\ No newline at end of file
diff --git a/Python/Games/hangman/hangman.py b/Python/Games/hangman/hangman.py
new file mode 100644
index 00000000..35bee434
--- /dev/null
+++ b/Python/Games/hangman/hangman.py
@@ -0,0 +1,84 @@
+import time
+import random
+import math
+from os import system
+
+
+
+def restart():
+    restart = input('''
+Play Again? (Y/N): ''').upper()
+
+    if restart == 'Y':
+        
+        time.sleep(2)
+        system('cls')
+        main()
+
+    else:
+        print('\n[EXITING]')
+        time.sleep(2)
+        exit()
+
+
+def main():
+    turns = 7
+    usedchr = ""
+    addchr = ""
+
+    with open('hangmanwordlist.txt') as hangman:
+        words = list(hangman.read().splitlines())
+ 
+    secret_word = random.choice(words)
+
+    while True:
+        system('cls')
+        print("LET'S PLAY HANGMAN!", end="\n")
+        
+        if turns == 0:
+            print("[GAME OVER, YOU LOSE]")
+            print(f"THE WORD IS '{secret_word}'")
+            time.sleep(5)
+            restart()
+
+        else:
+            blank = 0
+            for char in secret_word:
+                if char in addchr:
+                    print(char, end=" ")
+
+                else:
+                    print("_",end=" ")
+                    blank += 1
+
+            else:
+                if blank == 0:
+                    print("\n[YOU WON]")
+                    time.sleep(5)
+                    restart()
+
+            print(f"\n\nYou have {turns} Guesses.")
+            if len(usedchr) > 0:
+                print(f"[LETTERS TRIED: {usedchr}]")
+            
+            guess = input("\nGuess: ")
+
+            if len(guess) > 1:
+                print("[NO CHEATING, ENTER 1 CHR AT A TIME]")
+                time.sleep(2)
+
+            else:
+                if guess in secret_word:
+                    addchr += guess
+
+                else:
+                    print("[WRONG GUESS]")
+                    time.sleep(0.5)
+                    turns -= 1
+                
+                usedchr += guess + " "
+
+                             
+
+if __name__ == "__main__":
+    main()
\ No newline at end of file
diff --git a/Python/Games/hangman/hangmanwordlist.txt b/Python/Games/hangman/hangmanwordlist.txt
new file mode 100644
index 00000000..cb21b153
--- /dev/null
+++ b/Python/Games/hangman/hangmanwordlist.txt
@@ -0,0 +1,590 @@
+street
+where
+family
+court
+amount
+memory
+general
+staff
+condition
+light
+various
+brother
+anything
+argue
+raise
+suggest
+clearly
+legal
+purpose
+series
+crime
+explain
+church
+class
+relate
+serious
+itself
+arrive
+garden
+moment
+instead
+senior
+defense
+reveal
+attention
+person
+toward
+another
+truth
+couple
+against
+phone
+people
+question
+election
+seven
+still
+among
+health
+product
+those
+whatever
+necessary
+outside
+activity
+interest
+indicate
+allow
+front
+dream
+require
+theory
+capital
+entire
+scientist
+watch
+place
+knowledge
+disease
+maintain
+behavior
+prevent
+Democrat
+perform
+notice
+success
+point
+different
+wrong
+account
+business
+field
+during
+movie
+training
+which
+animal
+later
+history
+material
+century
+somebody
+ready
+rather
+nation
+quite
+security
+although
+employee
+someone
+summer
+design
+guess
+kitchen
+action
+exactly
+something
+apply
+decision
+financial
+continue
+process
+never
+describe
+answer
+position
+building
+force
+sound
+fight
+certain
+teach
+career
+learn
+morning
+lawyer
+political
+increase
+decade
+already
+campaign
+right
+choice
+market
+former
+floor
+issue
+chair
+evening
+likely
+mission
+cancer
+system
+religious
+feeling
+almost
+everyone
+assume
+project
+surface
+Congress
+author
+parent
+service
+claim
+civil
+resource
+thought
+picture
+involve
+focus
+station
+beyond
+concern
+appear
+about
+available
+offer
+thing
+stock
+child
+often
+whether
+American
+finish
+after
+result
+scene
+hotel
+practice
+evidence
+minute
+heavy
+hundred
+party
+great
+expert
+whole
+quickly
+federal
+treat
+option
+second
+according
+prepare
+these
+network
+remain
+support
+green
+important
+statement
+their
+figure
+between
+candidate
+magazine
+specific
+thousand
+doctor
+member
+today
+section
+ground
+natural
+final
+method
+daughter
+public
+article
+violence
+culture
+small
+color
+country
+everybody
+himself
+leader
+mouth
+might
+manager
+character
+reduce
+radio
+though
+victim
+community
+dinner
+believe
+maybe
+black
+analysis
+policy
+media
+prove
+become
+reflect
+student
+machine
+coach
+friend
+other
+ahead
+consumer
+represent
+world
+write
+sexual
+single
+along
+imagine
+agreement
+writer
+break
+interview
+meeting
+southern
+quality
+possible
+could
+decide
+music
+weapon
+economy
+trade
+discover
+society
+affect
+large
+clear
+personal
+popular
+alone
+million
+short
+suffer
+nature
+admit
+consider
+level
+detail
+foreign
+north
+first
+education
+include
+several
+under
+eight
+woman
+compare
+story
+reality
+thank
+order
+catch
+sport
+exist
+there
+enough
+example
+energy
+check
+address
+marriage
+research
+visit
+produce
+accept
+night
+president
+anyone
+range
+protect
+begin
+season
+white
+current
+stuff
+artist
+piece
+realize
+spend
+pressure
+develop
+response
+worker
+better
+establish
+skill
+reason
+create
+three
+number
+father
+price
+manage
+expect
+present
+treatment
+total
+window
+model
+school
+image
+growth
+camera
+change
+teacher
+indeed
+politics
+strong
+trial
+budget
+house
+matter
+official
+reach
+style
+tonight
+water
+officer
+should
+laugh
+within
+operation
+return
+speak
+report
+always
+social
+across
+science
+avoid
+medical
+table
+third
+speech
+forget
+wonder
+group
+stand
+industry
+inside
+authority
+factor
+movement
+improve
+score
+little
+charge
+state
+until
+national
+worry
+agency
+partner
+attorney
+impact
+remember
+occur
+power
+region
+every
+challenge
+enjoy
+ability
+bring
+situation
+study
+agree
+simply
+trouble
+soldier
+event
+future
+course
+source
+think
+structure
+forward
+chance
+majority
+sister
+start
+nearly
+above
+finger
+suddenly
+positive
+benefit
+death
+heart
+respond
+store
+board
+adult
+choose
+recent
+glass
+mention
+peace
+college
+behind
+would
+pretty
+value
+happen
+identify
+recognize
+blood
+enter
+actually
+cultural
+including
+shake
+south
+special
+young
+smile
+effort
+center
+while
+military
+discuss
+plant
+local
+because
+cause
+follow
+program
+weight
+hospital
+subject
+tough
+major
+problem
+painting
+company
+owner
+despite
+director
+determine
+herself
+letter
+space
+private
+threat
+build
+approach
+economic
+period
+mother
+strategy
+either
+usually
+sense
+patient
+around
+cover
+remove
+before
+finally
+carry
+message
+recently
+computer
+whose
+least
+simple
+standard
+nothing
+without
+serve
+western
+newspaper
+beautiful
+share
+certainly
+customer
+control
+direction
+shoulder
+measure
+middle
+effect
+citizen
+audience
+provide
+sometimes
+together
+perhaps
+physical
+difficult
+agent
+voice
+yourself
+since
+common
+player
+leave
+property
+pattern
+close
+language
+early
+myself
+attack
+modern
+receive
+through
+degree
+executive
+probably
+really
+professor
+debate
+police
+husband
+billion
+shoot
+similar
+month
+record
+however
+travel
+again
+spring
+human
+stage
+happy
+throw
+others
+listen
+office
+paper
+drive
+contain
+money
+central
diff --git a/Python/Games/hangman/readme.md b/Python/Games/hangman/readme.md
new file mode 100644
index 00000000..417b1f2c
--- /dev/null
+++ b/Python/Games/hangman/readme.md
@@ -0,0 +1,15 @@
+# Summary
+
+Hangman is a very old and fun word-guessing game. 
+The program selects a word at random for you to guess it. 
+
+You can suggest letter to guess the word within a certain number of guesses.
+
+
+# Setup  
+
+Put `hangman.py` and `hangmanwordlist.txt` in the same directory.
+
+The `hangmanwordlist.txt` contains all the words to be used in the game.  
+
+Run `hangman.py` in Python Shell or from any terminal with python.
\ No newline at end of file
diff --git a/Python/Games/rockpaperscissors.py b/Python/Games/rockpaperscissors.py
new file mode 100644
index 00000000..ee59ed8f
--- /dev/null
+++ b/Python/Games/rockpaperscissors.py
@@ -0,0 +1,209 @@
+# Code by - Siphyshu
+# Last Modified: 07-06-2020
+
+import random
+import time
+from os import system
+
+# Standard Rock, Paper, Scissor Rules apply:
+# 1. Stone > Scissor
+# 2. Stone < Paper
+# 3. Scissor > Paper
+# 
+# Notations:
+# 0 - Nothing,
+# R - Rock,
+# P - Paper,
+# S - Scissor
+
+rock = """
+    _______
+---'   ____)
+      (_____)
+      (_____)
+      (____)
+---.__(___)
+"""
+
+paper = """
+     _______
+---'    ____)____
+           ______)
+          _______)
+         _______)
+---.__________)
+"""
+
+scissor = """
+    _______
+---'   ____)____
+          ______)
+       __________)
+      (____)
+---.__(___)
+"""
+
+def main():
+    choices = {'R':rock, 'P':paper, 'S':scissor}
+    # choices = {'R':'ROCK', 'P':'PAPER', 'S':'SCISSOR'}
+    m_score, p_score = 0, 0
+    while (m_score != 3) and (p_score != 3):
+        system('cls')
+        print("ROCK, PAPER & SCISSORS!")
+        print(f"\n[Player({p_score}) vs. Machine({m_score})]")
+
+        p_choice = ''
+        print("\n[PLAYER'S TURN]")
+        playerturn = input("(R)ock, (P)aper or (S)cissor: ").upper()
+        if playerturn == "R":
+            p_choice = 'R'
+
+        elif playerturn == 'P':
+            p_choice = 'P'
+
+        elif playerturn == "S":
+            p_choice = 'S'
+
+        else:
+            continue
+        
+        m_choice = random.choice(['R','P','S'])
+        print("\n[MACHINE'S TURN]")
+        loading()
+
+        system('cls')
+        print("ROCK, PAPER & SCISSORS!")
+        print(f"\n[Player({p_score}) vs. Machine({m_score})]")
+        print(f"\nYOU DREW: {choices[p_choice]}")
+        print(f"MACHINE DREW: {choices[m_choice]}")
+
+
+
+        outcome = win_checker(p_choice, m_choice)
+
+        if outcome == False:
+            print("\n[NO POINT AWARDED]")
+
+        elif outcome == p_choice:
+            p_score += 1
+            print("\n[POINT TO PLAYER]")
+
+        elif outcome == m_choice:
+            m_score += 1
+            print("\n[POINT TO MACHINE]")
+
+        input("\n[Press ENTER]")
+
+    system('cls')
+    print("ROCK, PAPER & SCISSORS!")
+    print(f"\n[SCORE: Player({p_score}) vs. Machine({m_score})]")
+    
+    if p_score == 3:
+        print("\n[PLAYER WINS!]")
+        print(r'''
+$$$$$$$$$$$$$$$$$$$$$$$$$
+$$$$$$$$$$$$$$$$$$$$$$$$$
+$$$'`$$$$$$$$$$$$$'`$$$$$
+$$$$  $$$$$$$$$$$  $$$$$$
+$$$$. `$' \` \$`  $$$$$$$
+$$$$$. !\  i  i .$$$$$$$$
+$$$$$$   `--`--.$$$$$$$$$
+$$$$$$L        `$$$$$^^$$
+$$$$$$$.   .'   ""~   $$$
+$$$$$$$$.  ;      .e$$$$$
+$$$$$$$$$   `.$$$$$$$$$$$
+$$$$$$$$    .$$$$$$$$$$$$
+$$$$$$$     $$$$$$$$$$$$$''')
+
+    elif m_score == 3:
+        print("\n[MACHINE WINS!]")
+        print(r'''
+              ,---------------------------,
+              |  /---------------------\  |
+              | |                       | |
+              | |     Machines          | |
+              | |       Rules           | |
+              | |         Humans        | |
+              | |                       | |
+              |  \_____________________/  |
+              |___________________________|
+            ,---\_____     []     _______/------,
+          /         /______________\           /|
+        /___________________________________ /  | ___
+        |                                   |   |    )
+        |  _ _ _                 [-------]  |   |   (
+        |  o o o                 [-------]  |  /    _)_
+        |__________________________________ |/     /  /
+    /-------------------------------------/|      ( )/
+  /-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/ /
+/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/ /
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~''')
+        
+    time.sleep(3)
+
+    choose()
+
+
+
+
+def win_checker(p1,p2):
+    if p1 == p2:
+        return False
+
+    if p1 == 'R':
+        if p2 == 'P':
+            return p2
+
+        else:
+            return p1
+
+    if p1 == 'P':
+        if p2 == 'S':
+            return p2
+
+        else:
+            return p1
+
+    if p1 == 'S':
+        if p2 == 'R':
+            return p2
+
+        else:
+            return p1
+
+
+
+
+def choose():
+    while True:      
+        ask = input("\n[Play Again? (Y/N)]: ").upper()
+
+        if ask == 'Y':
+            main()
+            
+        elif ask == 'N':
+            print("\n[EXITING]")
+            time.sleep(3)
+            break
+
+        else:
+            pass
+
+
+
+
+def loading():
+    print("[", end="")
+
+    for _ in range(0,25):
+        time.sleep(0.05)
+        print("█", end="", flush=True)
+
+
+    print("]")
+
+
+
+
+if __name__ == "__main__":
+    main()        
\ No newline at end of file
diff --git a/Python/Games/snakes_ladder_pygame/DATA/1.png b/Python/Games/snakes_ladder_pygame/DATA/1.png
new file mode 100644
index 00000000..d4505109
Binary files /dev/null and b/Python/Games/snakes_ladder_pygame/DATA/1.png differ
diff --git a/Python/Games/snakes_ladder_pygame/DATA/2.png b/Python/Games/snakes_ladder_pygame/DATA/2.png
new file mode 100644
index 00000000..3b16d7a7
Binary files /dev/null and b/Python/Games/snakes_ladder_pygame/DATA/2.png differ
diff --git a/Python/Games/snakes_ladder_pygame/DATA/3.png b/Python/Games/snakes_ladder_pygame/DATA/3.png
new file mode 100644
index 00000000..0aed87ec
Binary files /dev/null and b/Python/Games/snakes_ladder_pygame/DATA/3.png differ
diff --git a/Python/Games/snakes_ladder_pygame/DATA/4.png b/Python/Games/snakes_ladder_pygame/DATA/4.png
new file mode 100644
index 00000000..2134d8be
Binary files /dev/null and b/Python/Games/snakes_ladder_pygame/DATA/4.png differ
diff --git a/Python/Games/snakes_ladder_pygame/DATA/5.png b/Python/Games/snakes_ladder_pygame/DATA/5.png
new file mode 100644
index 00000000..5e5633c7
Binary files /dev/null and b/Python/Games/snakes_ladder_pygame/DATA/5.png differ
diff --git a/Python/Games/snakes_ladder_pygame/DATA/6.png b/Python/Games/snakes_ladder_pygame/DATA/6.png
new file mode 100644
index 00000000..38a620b0
Binary files /dev/null and b/Python/Games/snakes_ladder_pygame/DATA/6.png differ
diff --git a/Python/Games/snakes_ladder_pygame/DATA/board.png b/Python/Games/snakes_ladder_pygame/DATA/board.png
new file mode 100644
index 00000000..f84032be
Binary files /dev/null and b/Python/Games/snakes_ladder_pygame/DATA/board.png differ
diff --git a/Python/Games/snakes_ladder_pygame/DATA/icon.png b/Python/Games/snakes_ladder_pygame/DATA/icon.png
new file mode 100644
index 00000000..e7fb2ea1
Binary files /dev/null and b/Python/Games/snakes_ladder_pygame/DATA/icon.png differ
diff --git a/Python/Games/snakes_ladder_pygame/DATA/pin_b.png b/Python/Games/snakes_ladder_pygame/DATA/pin_b.png
new file mode 100644
index 00000000..3c32961b
Binary files /dev/null and b/Python/Games/snakes_ladder_pygame/DATA/pin_b.png differ
diff --git a/Python/Games/snakes_ladder_pygame/DATA/pin_p.png b/Python/Games/snakes_ladder_pygame/DATA/pin_p.png
new file mode 100644
index 00000000..2258c671
Binary files /dev/null and b/Python/Games/snakes_ladder_pygame/DATA/pin_p.png differ
diff --git a/Python/Games/snakes_ladder_pygame/DATA/pin_r.png b/Python/Games/snakes_ladder_pygame/DATA/pin_r.png
new file mode 100644
index 00000000..5556ab65
Binary files /dev/null and b/Python/Games/snakes_ladder_pygame/DATA/pin_r.png differ
diff --git a/Python/Games/snakes_ladder_pygame/DATA/pin_y.png b/Python/Games/snakes_ladder_pygame/DATA/pin_y.png
new file mode 100644
index 00000000..858b9158
Binary files /dev/null and b/Python/Games/snakes_ladder_pygame/DATA/pin_y.png differ
diff --git a/Python/Games/snakes_ladder_pygame/DATA/pins.png b/Python/Games/snakes_ladder_pygame/DATA/pins.png
new file mode 100644
index 00000000..59563f83
Binary files /dev/null and b/Python/Games/snakes_ladder_pygame/DATA/pins.png differ
diff --git a/Python/Games/snakes_ladder_pygame/DATA/pngfind.com-dice-icon-png-5203108.png b/Python/Games/snakes_ladder_pygame/DATA/pngfind.com-dice-icon-png-5203108.png
new file mode 100644
index 00000000..ffe71216
Binary files /dev/null and b/Python/Games/snakes_ladder_pygame/DATA/pngfind.com-dice-icon-png-5203108.png differ
diff --git a/Python/Games/snakes_ladder_pygame/DATA/roll.png b/Python/Games/snakes_ladder_pygame/DATA/roll.png
new file mode 100644
index 00000000..3080765b
Binary files /dev/null and b/Python/Games/snakes_ladder_pygame/DATA/roll.png differ
diff --git a/Python/Games/snakes_ladder_pygame/main.py b/Python/Games/snakes_ladder_pygame/main.py
new file mode 100644
index 00000000..6bfff631
--- /dev/null
+++ b/Python/Games/snakes_ladder_pygame/main.py
@@ -0,0 +1,348 @@
+import pygame
+import time
+import random
+
+pygame.init()
+
+screen = pygame.display.set_mode((854, 700))
+pygame.display.set_caption("Snakes and Ladders")
+
+black = (0, 0, 0 )
+
+# buttons
+roll_img = pygame.image.load("DATA/roll.png")
+roll_img = pygame.transform.scale(roll_img, (100, 40))
+roll_rect = roll_img.get_rect()
+roll_rect.topleft = (28, 430)
+
+
+
+# load assest
+        # Load board
+board = pygame.image.load("DATA/board.png")
+        # Load dice
+dice1 = pygame.transform.scale(pygame.image.load("DATA/1.png"), (50, 50))
+dice2 = pygame.transform.scale(pygame.image.load("DATA/2.png"), (50, 50))
+dice3 = pygame.transform.scale(pygame.image.load("DATA/3.png"), (50, 50))
+dice4 = pygame.transform.scale(pygame.image.load("DATA/4.png"), (50, 50))
+dice5 = pygame.transform.scale(pygame.image.load("DATA/5.png"), (50, 50))
+dice6 = pygame.transform.scale(pygame.image.load("DATA/6.png"), (50, 50))
+        # Pins
+pin_r = pygame.transform.scale(pygame.image.load("DATA/pin_r.png"), (30, 30))
+pin_y = pygame.transform.scale(pygame.image.load("DATA/pin_y.png"), (30, 30))
+pin_p = pygame.transform.scale(pygame.image.load("DATA/pin_p.png"), (30, 30))
+pin_b = pygame.transform.scale(pygame.image.load("DATA/pin_b.png"), (30, 30))
+
+        # fonts
+player1_font = pygame.font.SysFont('comicsansms', 22)
+
+# ##### LIST of coordinates
+
+red_coord = [(185, 650), (245, 650), (320, 650), (395, 650), (455, 650), (530, 650), (590, 650), (660, 650), (735, 650), (810, 650), 
+            (810, 575), (735, 575), (660, 575), (590, 575), (530, 575), (455, 575), (395, 575), (320, 575), (245, 575), (185, 575),
+            (185, 505), (245, 505), (320, 505), (395, 505), (455, 505), (530, 505), (590, 505), (660, 505), (735, 505), (810, 505),
+            (810, 435), (735, 435), (660, 435), (590, 435), (530, 435), (455, 435), (395, 435), (320, 435), (245, 435), (185, 435),
+            (185, 365), (245, 365), (320, 365), (395, 365), (455, 365), (530, 365), (590, 365), (660, 365), (735, 365), (810, 365),
+            (810, 295), (735, 295), (660, 295), (590, 295), (530, 295), (455, 295), (395, 295), (320, 295), (245, 295), (185, 295),
+            (185, 225), (245, 225), (320, 225), (395, 225), (455, 225), (530, 225), (590, 225), (660, 225), (735, 225), (810, 225),
+            (810, 155), (735, 155), (660, 155), (590, 155), (530, 155), (455, 155), (395, 155), (320, 155), (245, 155), (185, 155),
+            (185, 85), (245, 85), (320, 85), (395, 85), (455, 85), (530, 85), (590, 85), (660, 85), (735, 85), (810, 85),
+            (810, 15), (735, 15), (660, 15), (590, 15), (530, 15), (455, 15), (395, 15), (320, 15), (245, 15), (185, 15)]
+
+yellow_coord = [(185, 650), (245, 650), (320, 650), (395, 650), (455, 650), (530, 650), (590, 650), (660, 650), (735, 650), (810, 650), 
+            (810, 575), (735, 575), (660, 575), (590, 575), (530, 575), (455, 575), (395, 575), (320, 575), (245, 575), (185, 575),
+            (185, 505), (245, 505), (320, 505), (395, 505), (455, 505), (530, 505), (590, 505), (660, 505), (735, 505), (810, 505),
+            (810, 435), (735, 435), (660, 435), (590, 435), (530, 435), (455, 435), (395, 435), (320, 435), (245, 435), (185, 435),
+            (185, 365), (245, 365), (320, 365), (395, 365), (455, 365), (530, 365), (590, 365), (660, 365), (735, 365), (810, 365),
+            (810, 295), (735, 295), (660, 295), (590, 295), (530, 295), (455, 295), (395, 295), (320, 295), (245, 295), (185, 295),
+            (185, 225), (245, 225), (320, 225), (395, 225), (455, 225), (530, 225), (590, 225), (660, 225), (735, 225), (810, 225),
+            (810, 155), (735, 155), (660, 155), (590, 155), (530, 155), (455, 155), (395, 155), (320, 155), (245, 155), (185, 155),
+            (185, 85), (245, 85), (320, 85), (395, 85), (455, 85), (530, 85), (590, 85), (660, 85), (735, 85), (810, 85),
+            (810, 15), (735, 15), (660, 15), (590, 15), (530, 15), (455, 15), (395, 15), (320, 15), (245, 15), (185, 15)]
+
+def ladder_detect(value):
+    if value == 3:
+        value = 55
+        print(value)
+        return value 
+    elif value == 40:
+        value = 78
+        return value 
+    elif value == 11:
+        value = 49
+        return value 
+    elif value == 53:
+        value = 87
+        return value 
+    else:
+        return value
+      
+
+           
+# pins pos x and y
+red_pos = (25,650)
+yellow_pos = (75,650)
+
+# pin pos count according to board
+rp_pos = 0
+yp_pos = 0
+
+# pins insde a board or not
+r_start = False
+y_start = False
+
+# turn defined
+turn = 'red'
+dice = dice6
+p_turn = player1_font.render(turn + ' turn', True, (0,0,0))
+run = True
+while run:
+
+        # coordinates of mouse 
+    mx, my = pygame.mouse.get_pos()
+    
+        # white color of background
+    screen.fill((255, 255, 255))
+
+        # render board
+    screen.blit(board, (150, 0))
+
+        # render pin
+    screen.blit(pin_r, red_pos)
+    screen.blit(pin_y, yellow_pos)
+    
+
+    # Render roll button
+    screen.blit(roll_img, (28,430))
+
+    # render dice
+    screen.blit(dice, (45, 350))
+
+    # player turn display
+    screen.blit(p_turn, (20, 520))
+    
+
+    for event in pygame.event.get():
+        # quit
+        if event.type == pygame.QUIT:
+            run = False
+        
+        if event.type == pygame.MOUSEBUTTONDOWN:
+
+            # get mouse pos
+            pos = pygame.mouse.get_pos()
+
+            # get random number
+            dice_val = random.randint(1,6)
+
+            if roll_rect.collidepoint(pos):
+                time.sleep(0.3)
+                # dice roll
+                if dice_val == 1:
+                    dice = dice1
+                    num = 1
+                elif dice_val == 2:
+                    dice = dice2
+                    num = 2
+                elif dice_val == 3:
+                    dice = dice3
+                    num = 3
+                elif dice_val == 4:
+                    dice = dice4
+                    num = 4
+                elif dice_val == 5:
+                    dice = dice5
+                    num = 5
+                else:
+                    dice = dice6
+                    num = 6
+                
+
+                # red player turn
+                if turn=='red':
+                    p_turn = player1_font.render(turn + ' turn', True, (0,0,0))
+                    turn = 'yellow'
+                    
+                    if num == 6 and r_start == False:
+                        red_pos = red_coord[0]
+                        r_start = True
+                        turn = 'red'
+                        
+                    
+                    else:
+                        if num != 6 and r_start == True:
+                            rp_pos = rp_pos + num
+                            if rp_pos >= 99:
+                                rp_pos = 99
+                                red_pos = red_coord[rp_pos]
+                                print("red won")
+                                time.sleep(1)
+                                run = False
+
+                            if num == 1:
+                                red_pos = red_coord[rp_pos]
+                                turn = 'yellow'
+                                
+                            elif num == 2:                            
+                                red_pos = red_coord[rp_pos]
+                                turn = 'yellow'
+
+                            elif num == 3:
+                                red_pos = red_coord[rp_pos]
+                                turn = 'yellow'
+
+                            elif num == 4:
+                                red_pos = red_coord[rp_pos]
+                                turn = 'yellow'
+
+                            elif num == 5:
+                                red_pos = red_coord[rp_pos]
+                                turn = 'yellow'
+                        else:
+                            if num == 6 and r_start == True:
+                                rp_pos = rp_pos + num
+                                if rp_pos >= 99 and r_start == True:
+                                    rp_pos = 99
+                                    red_pos = red_coord[rp_pos]
+                                    print("red won")
+                                    time.sleep(1)
+                                    run = False
+                                red_pos = red_coord[rp_pos]
+                                turn = 'red'
+                         
+ 
+                # yellow player turn 
+                else:
+                    p_turn = player1_font.render(turn + ' turn', True, (0,0,0))
+                    turn = 'red'
+                    
+                    if num == 6 and y_start == False:
+                        yellow_pos = yellow_coord[0]
+                        y_start = True
+                        turn = 'yellow'
+                        
+                    
+                    else:
+                        if num != 6 and y_start == True:
+                            yp_pos = yp_pos + num
+                            if yp_pos >=99 and y_start == True:
+                                print('yellow won')
+                                yp_pos = 99
+                                yellow_pos = yellow_coord[yp_pos]
+                                time.sleep(1)
+                                run = False
+                            if num == 1:
+                                yellow_pos = yellow_coord[yp_pos]
+                                turn = 'red'
+                            elif num == 2:                            
+                                yellow_pos = yellow_coord[yp_pos]
+                                turn = 'red'
+                            elif num == 3:
+                                yellow_pos = yellow_coord[yp_pos]
+                                turn = 'red'
+                            elif num == 4:
+                                yellow_pos = yellow_coord[yp_pos]
+                                turn = 'red'
+                            elif num == 5:
+                                yellow_pos = yellow_coord[yp_pos]
+                                turn = 'red'
+
+                        else:
+                            if num == 6 and y_start == True:
+                                yp_pos = yp_pos + num
+                                if yp_pos >=99 and y_start == True:
+                                    print('yellow won')
+                                    yp_pos = 99
+                                    yellow_pos = yellow_coord[yp_pos]
+                                    time.sleep(1)
+                                    run = False
+                                yellow_pos = yellow_coord[yp_pos]
+                                turn = 'yellow'
+                if r_start == True:
+                    # ladder
+                    if rp_pos == 3:
+                        rp_pos = 55
+                        red_pos = red_coord[rp_pos]
+                    elif rp_pos == 11:
+                        rp_pos = 49
+                        red_pos = red_coord[rp_pos]
+                    elif rp_pos == 13:
+                        rp_pos = 54
+                        red_pos = red_coord[rp_pos]
+                    elif rp_pos == 21:
+                        rp_pos = 57
+                        red_pos = red_coord[rp_pos]
+                    elif rp_pos == 40:
+                        rp_pos = 78
+                        red_pos = red_coord[rp_pos]
+                    elif rp_pos == 53:
+                        rp_pos = 87
+                        red_pos = red_coord[rp_pos]
+                    
+                    # snake
+                    elif rp_pos == 27:
+                        rp_pos = 9
+                        red_pos = red_coord[rp_pos]
+                    elif rp_pos == 36:
+                        rp_pos = 2
+                        red_pos = red_coord[rp_pos]
+                    elif rp_pos == 46:
+                        rp_pos = 15
+                        red_pos = red_coord[rp_pos]
+                    elif rp_pos == 74:
+                        rp_pos = 31
+                        red_pos = red_coord[rp_pos]
+                    elif rp_pos == 93:
+                        rp_pos = 70
+                        red_pos = red_coord[rp_pos]
+                    elif rp_pos == 95:
+                        rp_pos = 41
+                        red_pos = red_coord[rp_pos]
+                
+                if y_start == True:
+                    if yp_pos == 3:
+                        yp_pos = 55
+                        yellow_pos = yellow_coord[yp_pos]
+                    elif yp_pos == 11:
+                        yp_pos = 49
+                        yellow_pos = yellow_coord[yp_pos]
+                    elif yp_pos == 13:
+                        yp_pos = 54
+                        yellow_pos = yellow_coord[yp_pos]
+                    elif yp_pos == 21:
+                        yp_pos = 57
+                        yellow_pos = yellow_coord[yp_pos]
+                    
+                    elif yp_pos == 40:
+                        yp_pos = 78
+                        yellow_pos = yellow_coord[yp_pos]
+                    elif yp_pos == 53:
+                        yp_pos = 87
+                        yellow_pos = yellow_coord[yp_pos]
+                    
+                    # snake
+                    elif yp_pos == 27:
+                        yp_pos = 9
+                        yellow_pos = yellow_coord[yp_pos]
+                    elif yp_pos == 36:
+                        yp_pos = 2
+                        yellow_pos = yellow_coord[yp_pos]
+                    elif yp_pos == 46:
+                        yp_pos = 15
+                        yellow_pos = yellow_coord[yp_pos]
+                    elif yp_pos == 74:
+                        yp_pos = 31
+                        yellow_pos = yellow_coord[yp_pos]
+                    elif yp_pos == 93:
+                        yp_pos = 70
+                        yellow_pos = yellow_coord[yp_pos]
+                    elif yp_pos == 95:
+                        yp_pos = 41
+                        yellow_pos = yellow_coord[yp_pos]
+
+                
+                
+                    
+                        
+    pygame.display.update()
+pygame.quit()
diff --git a/Python/Games/snakes_ladder_pygame/setup.txt b/Python/Games/snakes_ladder_pygame/setup.txt
new file mode 100644
index 00000000..a866adfa
--- /dev/null
+++ b/Python/Games/snakes_ladder_pygame/setup.txt
@@ -0,0 +1,14 @@
+Python Version (>3.8)
+
+Module used -
+pygame (2.0.1)
+
+---- pip install pygame
+
+
+pygame module is used to make a user interface and to run the game in a loop.
+
+steps - 
+1) install the pygame module from the given command.
+2) open the code in the code editor. (make sure open the snakes_ladder_pygame folder in the editor or else it will show error of assest.)
+3) run the main.py file.
diff --git a/Python/Games/tictactoe.py b/Python/Games/tictactoe.py
new file mode 100644
index 00000000..45cf2f40
--- /dev/null
+++ b/Python/Games/tictactoe.py
@@ -0,0 +1,168 @@
+
+#function with appropriate format for printing the board 
+def printCanvas(canvas):
+    print(canvas[1]+" | "+canvas[2]+" | "+canvas[3]+"        "+"1"+" | "+"2"+" | "+"3")
+    print(canvas[4]+" | "+canvas[5]+" | "+canvas[6]+"  <==>  "+"4"+" | "+"5"+" | "+"6")
+    print(canvas[7]+" | "+canvas[8]+" | "+canvas[9]+"        "+"7"+" | "+"8"+" | "+"9")
+    print("\n")
+
+   
+
+#function to check if position on canvas is empty
+def emptyPos(pos):
+    if (canvas[pos]=='*'):
+        return True
+    else:
+        return False
+#function to insert letter at entered position. It also calls winCheck() and drawCheck() to see if there is a win or draw
+def letterPos(l,pos):
+    if emptyPos(pos):
+        canvas[pos]=l
+        printCanvas(canvas)
+        if winCheck():
+            if l=='X':
+                print("X wins!")
+                exit()
+            else:
+                print("O wins!")
+                exit() 
+        if(drawCheck()):
+           print("It's a draw!")
+           exit() 
+        return
+    else:
+        print("Position is already full!")
+        pos= int(input("Enter a different position: "))
+        letterPos(l,pos)
+        return    
+#fucntion to check all possibilities of winning the game
+def winCheck():
+    #horizontally
+    if   (canvas[1] == canvas[2] and canvas[1] == canvas[3] and canvas[1] != '*'):
+        return True
+    elif (canvas[4] == canvas[5] and canvas[4] == canvas[6] and canvas[4] != '*'):
+        return True
+    elif (canvas[7] == canvas[8] and canvas[7] == canvas[9] and canvas[7] != '*'):
+        return True
+    #vertically    
+    elif (canvas[1] == canvas[4] and canvas[1] == canvas[7] and canvas[1] != '*'):
+        return True
+    elif (canvas[2] == canvas[5] and canvas[2] == canvas[8] and canvas[2] != '*'):
+        return True
+    elif (canvas[3] == canvas[6] and canvas[3] == canvas[9] and canvas[3] != '*'):
+        return True
+    #diagonally    
+    elif (canvas[1] == canvas[5] and canvas[1] == canvas[9] and canvas[1] != '*'):
+        return True
+    elif (canvas[7] == canvas[5] and canvas[7] == canvas[3] and canvas[7] != '*'):
+        return True
+    else:
+        return False 
+#function with letter argument which checks win , necessary for engine
+def letterwinCheck(let):
+    if   (canvas[1] == canvas[2] and canvas[1] == canvas[3] and canvas[1] == let):
+        return True
+    elif (canvas[4] == canvas[5] and canvas[4] == canvas[6] and canvas[4] == let):
+        return True
+    elif (canvas[7] == canvas[8] and canvas[7] == canvas[9] and canvas[7] == let):
+        return True
+    elif (canvas[1] == canvas[4] and canvas[1] == canvas[7] and canvas[1] == let):
+        return True
+    elif (canvas[2] == canvas[5] and canvas[2] == canvas[8] and canvas[2] == let):
+        return True
+    elif (canvas[3] == canvas[6] and canvas[3] == canvas[9] and canvas[3] == let):
+        return True
+    elif (canvas[1] == canvas[5] and canvas[1] == canvas[9] and canvas[1] == let):
+        return True
+    elif (canvas[7] == canvas[5] and canvas[7] == canvas[3] and canvas[7] == let):
+        return True
+    else:
+        return False 
+#function which checks draw condition
+def drawCheck():
+    for y in range(1,10):
+        if canvas[y]=='*':
+          return False  
+    return True
+
+
+#function to input user move
+def userMove():
+    pos=int(input("Enter the position for {} : ".format(user)))
+    letterPos(user,pos)
+    return
+#function to enter engine move
+def engineMove():
+    topScore= -500
+    bestPos= 0
+    
+    for y in range(1,10):
+       if (canvas[y]=='*'):
+           canvas[y]= engine  ##check
+           score= minimaxAlgo(canvas,False)
+           canvas[y] = '*'
+           if (score > topScore):
+              topScore = score
+              bestPos = y 
+    letterPos(engine,bestPos)
+    return   
+#minimax algorithm to calculate high score engine move
+def minimaxAlgo(canvas,maximizer):
+
+    if (letterwinCheck(engine)):#checks win for engine
+       return 1
+    elif (letterwinCheck(user)):#checks win for user
+       return -1
+    elif (drawCheck()):#checks draw
+       return 0
+    #maximizing engine move
+    if (maximizer):
+        topScore= -500 #assigning any value as base topscore
+    
+    
+        for y in range(1,10): #traversing the canvas
+            if (canvas[y]=='*'):
+                canvas[y]= engine #placing engine move at the checked empty position
+                score= minimaxAlgo(canvas,False)
+                canvas[y] = '*' #undoing the move so board does not get filled and all conditions are checked
+                if (score>topScore): #if score is more than topscore we get a new topscore to compare with
+                    topScore=score
+        return topScore             
+    #minimizing user move
+    else:
+        topScore=500
+
+        for y in range(1,10): 
+            if (canvas[y]=='*'):
+                canvas[y]= user #placing user move at the checked empty position
+                score= minimaxAlgo(canvas,True)
+                canvas[y] = '*'
+                if (score<topScore):
+                    topScore=score
+        return topScore  
+canvas = ['*' for _ in range(10)]
+
+printCanvas(canvas) #prints canvas once so user can understand
+
+user='O' 
+engine='X' 
+
+print("Computer plays first!")
+print("Enter your letter: ",end=" ")
+user=input() #lets user select the letter he wants to play with
+if user=='X'or user=='x':
+    engine='O'
+    user='X'
+elif user=='O' or user=='o':
+    engine='X'
+    user='O'
+else:
+    print("Wrong letter selected! Please choose between 'X' & 'O'! Please run the program again.")
+    exit()   #exits if the letter selected is not X or O
+
+
+
+while not winCheck(): #main game loop 
+    engineMove()
+    userMove()
+
diff --git a/Python/Pattern Programs/Alphabet_Pattern_02.py b/Python/Pattern Programs/Alphabet_Pattern_02.py
new file mode 100644
index 00000000..dc702501
--- /dev/null
+++ b/Python/Pattern Programs/Alphabet_Pattern_02.py	
@@ -0,0 +1,27 @@
+# Print the following pattern for the given N number of rows.
+# Pattern for N = 3
+
+#  A
+#  BC
+#  CDE
+
+# Input format :
+# Integer N (Total no. of rows)
+# Output format :
+# Pattern in N lines
+
+
+n = int(input())
+
+i = 1
+start_chr = chr(ord("A") + i - 1)
+while i <= n:
+    j = 1
+    while j <= i:
+        x = ord(chr(ord("A") + i - 1))
+        chra = chr(x + j - 1)
+        print(chra, end="")
+        x += 1
+        j += 1
+    print()
+    i += 1
diff --git a/Python/Pattern Programs/Alphabet_Pattern_03.py b/Python/Pattern Programs/Alphabet_Pattern_03.py
new file mode 100644
index 00000000..58acb3b0
--- /dev/null
+++ b/Python/Pattern Programs/Alphabet_Pattern_03.py	
@@ -0,0 +1,29 @@
+# Print the following pattern for the given number of rows.
+# Pattern for N = 5
+
+# E
+# DE
+# CDE
+# BCDE
+# ABCDE
+
+# Input format :
+# N (Total no. of rows)
+# Output format :
+# Pattern in N lines
+
+
+n = int(input())
+
+i = 1
+# start_chr = chr(ord("A") +n-i)
+while i <= n:
+    j = 1
+    while j <= i:
+        x = ord("A") + n - i + j - 1
+        CHR = chr(x)
+        print(CHR, end="")
+        j += 1
+
+    i += 1
+    print()
diff --git a/Python/Pattern Programs/Alphabet_pattern_01.py b/Python/Pattern Programs/Alphabet_pattern_01.py
new file mode 100644
index 00000000..2bc5a801
--- /dev/null
+++ b/Python/Pattern Programs/Alphabet_pattern_01.py	
@@ -0,0 +1,23 @@
+# Print the following pattern for the given N number of rows.
+# Pattern for N = 3
+
+#  A
+#  BB
+#  CCC
+
+# Input format :
+# Integer N (Total no. of rows)
+# Output format :
+# Pattern in N lines
+
+
+n = int(input())
+i = 1
+while i <= n:
+    j = 1
+    while j <= i:
+        chra = chr(ord("A") + i - 1)
+        print(chra, end="")
+        j += 1
+    print()
+    i += 1
diff --git a/Python/Pattern Programs/Arrow_Pattern.py b/Python/Pattern Programs/Arrow_Pattern.py
new file mode 100644
index 00000000..1e9359d6
--- /dev/null
+++ b/Python/Pattern Programs/Arrow_Pattern.py	
@@ -0,0 +1,48 @@
+# Print the following pattern for the given number of rows. Assume N is always odd.
+# Pattern for N = 7
+
+# Note : There is space after every star.
+
+# *
+#  * *
+#   * * *
+#    * * * *
+#   * * *
+#  * *
+# *
+
+# Input format :
+# Integer N (Total no. of rows)
+# Output format :
+# Pattern in N lines
+
+
+n = int(input())
+i = 1
+m = n // 2 + 1
+# for increasing pattern
+while i <= m:
+
+    spaces = 1
+    while spaces <= (i - 1):
+        print(" ", end="")
+        spaces += 1
+    stars = 1
+    while stars <= i:
+        print("* ", end="")
+        stars += 1
+    print()
+    i += 1
+# for decreasing pattern
+j = 1
+while j <= m:
+    spaces = m - j - 1
+    while spaces > 0:
+        print(" ", end="")
+        spaces -= 1
+    stars = m - j
+    while stars > 0:
+        print("* ", end="")
+        stars -= 1
+    print()
+    j += 1
diff --git a/Python/Pattern Programs/Diamond_Star_Pattern.py b/Python/Pattern Programs/Diamond_Star_Pattern.py
new file mode 100644
index 00000000..92d4b856
--- /dev/null
+++ b/Python/Pattern Programs/Diamond_Star_Pattern.py	
@@ -0,0 +1,59 @@
+# Print the following pattern for the given number of rows. Assume N is always odd.
+# Pattern for N = 7
+
+# Note : There is space after every star.
+
+
+#    *
+#   ***
+#  *****
+# *******
+#  *****
+#   ***
+#    *
+
+# Input format :
+# Integer N (Total no. of rows)
+# Output format :
+# Pattern in N lines
+
+
+n = int(input())
+
+i = 1
+m = n // 2 + 1
+
+# upper part
+while i <= m:
+    spaces = 1
+    while spaces <= (m - i):
+        print(" ", end="")
+        spaces += 1
+    stars = 1
+    while stars <= i:
+        print("*", end="")
+        stars += 1
+    p = 1
+    while p < i:
+        print("*", end="")
+        p += 1
+    print()
+    i += 1
+
+# lower part
+j = 1
+while j <= m:
+    spaces = 1
+    while spaces <= j:
+        print(" ", end="")
+        spaces += 1
+    stars = m - j
+    while stars > 0:
+        print("*", end="")
+        stars -= 1
+    p = m - j - 1
+    while p >= 1:
+        print("*", end="")
+        p -= 1
+    print()
+    j += 1
diff --git a/Python/Pattern Programs/Inverted_number_Pattern.py b/Python/Pattern Programs/Inverted_number_Pattern.py
new file mode 100644
index 00000000..9a1e6416
--- /dev/null
+++ b/Python/Pattern Programs/Inverted_number_Pattern.py	
@@ -0,0 +1,24 @@
+# Print the following pattern for the given N number of rows.
+# Pattern for N = 4
+
+# 4444
+# 333
+# 22
+# 1
+
+# Input format :
+# Integer N (Total no. of rows)
+# Output format :
+# Pattern in N lines
+
+n = int(input())
+
+i = 1
+while i <= n:
+    j = 1
+    m = n - i + 1
+    while j <= m:
+        print(m, end="")
+        j += 1
+    print()
+    i += 1
diff --git a/Python/Pattern Programs/Mirror_number_Pattern.py b/Python/Pattern Programs/Mirror_number_Pattern.py
new file mode 100644
index 00000000..8fecbb1d
--- /dev/null
+++ b/Python/Pattern Programs/Mirror_number_Pattern.py	
@@ -0,0 +1,32 @@
+# Print the following pattern for the given N number of rows.
+# Pattern for N = 4
+
+# 1      1
+# 12    21
+# 123  321
+# 12344321
+
+# Input format :
+# Integer N (Total no. of rows)
+# Output format :
+# Pattern in N lines
+
+n = int(input())
+
+i = 1
+while i <= n:
+    j = 1
+    while j <= i:
+        print(j, end="")
+        j += 1
+    # mirror part
+    spaces = 2 * (n - i)
+    while spaces > 0:
+        print(" ", end="")
+        spaces -= 1
+    p = i
+    while p > 0:
+        print(p, end="")
+        p -= 1
+    i += 1
+    print()
diff --git a/Python/Pattern Programs/Number_Pattern_01.py b/Python/Pattern Programs/Number_Pattern_01.py
new file mode 100644
index 00000000..6a206151
--- /dev/null
+++ b/Python/Pattern Programs/Number_Pattern_01.py	
@@ -0,0 +1,23 @@
+# Print the following pattern for the given N number of rows.
+# Pattern for N = 4
+
+# 4444
+# 4444
+# 4444
+# 4444
+
+# Input format :
+# Integer N (Total no. of rows)
+# Output format :
+# Pattern in N lines
+
+
+n = int(input())
+i = 1
+while i <= n:
+    j = 1
+    while j <= n:
+        print(n, end="")
+        j += 1
+    i += 1
+    print("")
diff --git a/Python/Pattern Programs/Number_Pattern_02.py b/Python/Pattern Programs/Number_Pattern_02.py
new file mode 100644
index 00000000..7cb2fba9
--- /dev/null
+++ b/Python/Pattern Programs/Number_Pattern_02.py	
@@ -0,0 +1,22 @@
+# Print the following pattern for the given N number of rows.
+# Pattern for N = 4
+
+# 1
+# 22
+# 333
+# 4444
+
+# Input format :
+# Integer N (Total no. of rows)
+# Output format :
+# Pattern in N lines
+
+n = int(input())
+i = 1
+while i <= n:
+    j = 1
+    while j <= i:
+        print(i, end="")
+        j += 1
+    i += 1
+    print("")
diff --git a/Python/Pattern Programs/Number_Pattern_03.py b/Python/Pattern Programs/Number_Pattern_03.py
new file mode 100644
index 00000000..69eec435
--- /dev/null
+++ b/Python/Pattern Programs/Number_Pattern_03.py	
@@ -0,0 +1,26 @@
+# Print the following pattern for the given N number of rows.
+# Pattern for N = 4
+
+# 1
+# 21
+# 321
+# 4321
+
+# Input format :
+# Integer N (Total no. of rows)
+# Output format :
+# Pattern in N lines
+
+n = int(input())
+i = 1
+
+
+while i <= n:
+    j = 1
+    p = i
+    while j <= i:
+        print(p, end="")
+        j += 1
+        p -= 1
+    i += 1
+    print("")
diff --git a/Python/Pattern Programs/Number_Pattern_04.py b/Python/Pattern Programs/Number_Pattern_04.py
new file mode 100644
index 00000000..06956da5
--- /dev/null
+++ b/Python/Pattern Programs/Number_Pattern_04.py	
@@ -0,0 +1,27 @@
+# Print the following pattern for the given N number of rows.
+# Pattern for N = 4
+
+# 1
+# 11
+# 202
+# 3003
+
+# Input format :
+# Integer N (Total no. of rows)
+# Output format :
+# Pattern in N lines
+
+
+n = int(input())
+print(1)
+i = 1
+while i < n:
+    j = 0
+    while j < i + 1:
+        if j == 0 or j == i:
+            print(i, end="")
+        else:
+            print(0, end="")
+        j = j + 1
+    i = i + 1
+    print()
diff --git a/Python/Pattern Programs/Number_Pattern_06.py b/Python/Pattern Programs/Number_Pattern_06.py
new file mode 100644
index 00000000..8f2e1478
--- /dev/null
+++ b/Python/Pattern Programs/Number_Pattern_06.py	
@@ -0,0 +1,23 @@
+# Print the following pattern for the given N number of rows.
+# Pattern for N = 4
+
+# 1234
+# 123
+# 12
+# 1
+
+# Input format :
+# Integer N (Total no. of rows)
+# Output format :
+# Pattern in N lines
+
+
+n = int(input())
+i = 1
+while i <= n:
+    j = 1
+    while j <= (n - i + 1):
+        print(j, end="")
+        j += 1
+    i += 1
+    print()
diff --git a/Python/Pattern Programs/Number_Pattern_07.py b/Python/Pattern Programs/Number_Pattern_07.py
new file mode 100644
index 00000000..50432605
--- /dev/null
+++ b/Python/Pattern Programs/Number_Pattern_07.py	
@@ -0,0 +1,27 @@
+# Print the following pattern for the given N number of rows.
+# Pattern for N = 4
+
+#    1
+#   12
+#  123
+# 1234
+
+# Input format :
+# Integer N (Total no. of rows)
+# Output format :
+# Pattern in N lines
+
+n = int(input())
+
+i = 1
+while i <= n:
+    spaces = n - i
+    while spaces > 0:
+        print(" ", end="")
+        spaces -= 1
+    p = 1
+    while p <= i:
+        print(p, end="")
+        p += 1
+    i += 1
+    print()
diff --git a/Python/Pattern Programs/Number_pattern_05.py b/Python/Pattern Programs/Number_pattern_05.py
new file mode 100644
index 00000000..2b78d001
--- /dev/null
+++ b/Python/Pattern Programs/Number_pattern_05.py	
@@ -0,0 +1,30 @@
+# Print the following pattern for the given N number of rows.
+# Pattern for N = 4
+
+# 1
+# 11
+# 121
+# 1221
+
+# Input format :
+# Integer N (Total no. of rows)
+# Output format :
+# Pattern in N lines
+
+
+n = int(input())
+if n == 0:
+    print()
+else:
+    print(1)
+i = 1
+while i < n:
+    j = 0
+    while j < i + 1:
+        if j == 0 or j == i:
+            print(1, end="")
+        else:
+            print(2, end="")
+        j = j + 1
+    i = i + 1
+    print()
diff --git a/Python/Pattern Programs/Pyramid_Number_Pattern_01.py b/Python/Pattern Programs/Pyramid_Number_Pattern_01.py
new file mode 100644
index 00000000..48eaa6ea
--- /dev/null
+++ b/Python/Pattern Programs/Pyramid_Number_Pattern_01.py	
@@ -0,0 +1,31 @@
+# Print the following pattern for the given N number of rows.
+# Pattern for N = 4
+
+#    1
+#   212
+#  32123
+# 4321234
+
+# Input format :
+# Integer N (Total no. of rows)
+# Output format :
+# Pattern in N lines
+
+n = int(input())
+
+i = 1
+while i <= n:
+    spaces = n - i
+    while spaces > 0:
+        print(" ", end="")
+        spaces -= 1
+    p = i
+    while p > 0:
+        print(p, end="")
+        p -= 1
+    p = 2
+    while p <= i:
+        print(p, end="")
+        p += 1
+    i += 1
+    print()
diff --git a/Python/Pattern Programs/Pyramid_Number_Pattern_02.py b/Python/Pattern Programs/Pyramid_Number_Pattern_02.py
new file mode 100644
index 00000000..080c70b5
--- /dev/null
+++ b/Python/Pattern Programs/Pyramid_Number_Pattern_02.py	
@@ -0,0 +1,31 @@
+# Print the following pattern for the given N number of rows.
+# Pattern for N = 4
+
+#    1
+#   232
+#  34543
+# 4567654
+
+# Input format :
+# Integer N (Total no. of rows)
+# Output format :
+# Pattern in N lines
+
+n = int(input())
+
+i = 1
+while i <= n:
+    spaces = n - i
+    while spaces > 0:
+        print(" ", end="")
+        spaces -= 1
+    p = i
+    while p <= (2 * i - 1):
+        print(p, end="")
+        p += 1
+    p -= 2
+    while p >= i:
+        print(p, end="")
+        p -= 1
+    i += 1
+    print()
diff --git a/Python/Pattern Programs/Pyramid_star_Pattern.py b/Python/Pattern Programs/Pyramid_star_Pattern.py
new file mode 100644
index 00000000..4393b9f7
--- /dev/null
+++ b/Python/Pattern Programs/Pyramid_star_Pattern.py	
@@ -0,0 +1,31 @@
+# Print the following pattern for the given N number of rows.
+# Pattern for N = 4
+
+#    *
+#   ***
+#  *****
+# *******
+
+# Input format :
+# Integer N (Total no. of rows)
+# Output format :
+# Pattern in N lines
+
+n = int(input())
+
+i = 1
+while i <= n:
+    spaces = n - i
+    while spaces > 0:
+        print(" ", end="")
+        spaces -= 1
+    p = i
+    while p <= (2 * i - 1):
+        print("*", end="")
+        p += 1
+    p -= 2
+    while p >= i:
+        print("*", end="")
+        p -= 1
+    i += 1
+    print()
diff --git a/Python/Pattern Programs/README.md b/Python/Pattern Programs/README.md
new file mode 100644
index 00000000..80e1d023
--- /dev/null
+++ b/Python/Pattern Programs/README.md	
@@ -0,0 +1,17 @@
+## 🧐 What are Pattern Programs?
+
+Pattern programs are nothing just patterns which consists of numbers, alphabets, symbols which are printed in a particular form. The solutions to these kind of programs are listed out using conditional loops.
+
+## 📕 Why to study Pattern Programs?
+
+* Pattern programs best means to study the working of looping structures in general purpose programming languages.
+
+* It helps beginners to visualise how every iteration in a loop works.
+
+* Also popularly asked in campus placements & job interviews.
+
+## Links to find Python Pattern Programs 
+
+Refer to the below videos 
+
+* [Video](https://www.youtube.com/playlist?list=PLzgPDYo_3xuliFyI5dZKgYB99SMUscGyp)
diff --git a/Python/Pattern Programs/Star_And_Zero_Pattern.py b/Python/Pattern Programs/Star_And_Zero_Pattern.py
new file mode 100644
index 00000000..f47b7e4e
--- /dev/null
+++ b/Python/Pattern Programs/Star_And_Zero_Pattern.py	
@@ -0,0 +1,28 @@
+# Print the following pattern for the given N number of rows.
+# Pattern for N = 4
+
+# *000*000*
+# 0*00*00*0
+# 00*0*0*00
+# 000***000
+
+# Input format :
+# Integer N (Total no. of rows)
+# Output format :
+# Pattern in N lines
+
+
+n = int(input())
+i = 1
+
+while i <= n:
+    j = 1
+    m = 2 * n + 1
+    while j <= m:
+        if j == i or j == n + 1 or j == (m - i + 1):
+            print("*", end="")
+        else:
+            print("0", end="")
+        j += 1
+    print()
+    i += 1
diff --git a/Python/Pattern Programs/Star_Pattern_01.py b/Python/Pattern Programs/Star_Pattern_01.py
new file mode 100644
index 00000000..763c2d9d
--- /dev/null
+++ b/Python/Pattern Programs/Star_Pattern_01.py	
@@ -0,0 +1,26 @@
+# Print the following pattern for the given N number of rows.
+# Pattern for N = 4
+
+# *
+# **
+# ***
+# ****
+
+# Note : There are no spaces between the stars (*).
+
+# Input format :
+# Integer N (Total no. of rows)
+# Output format :
+# Pattern in N lines
+
+
+n = int(input())
+i = 1
+
+while i <= n:
+    j = 1
+    while j <= i:
+        print("*", end="")
+        j += 1
+    i += 1
+    print()
diff --git a/Python/Pattern Programs/ZigZagPattern.py b/Python/Pattern Programs/ZigZagPattern.py
new file mode 100644
index 00000000..9357ce13
--- /dev/null
+++ b/Python/Pattern Programs/ZigZagPattern.py	
@@ -0,0 +1,46 @@
+#Concept :
+#Take input from user
+#Input no. of rows
+#Input no. of columns
+#Output :
+#no. from one to n , till the given no, of column
+#stop the line at the given row and start the pattern again from the next column.
+
+rows = int(input("Enter number of rows - "))
+cols = int(input("Enter number of columns - "))
+arr = np.zeros([7,16],dtype = int)
+num = 0
+flag = 0
+i = 0
+j = 0
+
+while j <= cols-1:
+    if i<=rows-1 and flag == 0:
+        num = num + 1
+        arr[i][j] = num
+        if i == rows - 1 :
+            i = i - 1
+            j = j + 1
+            flag = 1
+        else:
+            i = i + 1
+            j = j + 1
+
+    elif (i<rows-1 and i>=0) and flag == 1:
+        num = num + 1
+        arr[i][j] = num
+        if i == 0:
+            i = i + 1
+            j = j + 1
+            flag = 0
+        else:
+            i = i - 1
+            j = j + 1 
+
+for i in range(rows):
+    for j in range(cols):
+        if(arr[i][j] == 0):
+            print(" ",end =" ")
+        else:
+            print(arr[i][j],end =" ")
+    print()
diff --git a/Python/Projects/Comment_Section_Automation/EmailAndPhoneNumExtractor.py b/Python/Projects/Comment_Section_Automation/EmailAndPhoneNumExtractor.py
new file mode 100644
index 00000000..9c3bf503
--- /dev/null
+++ b/Python/Projects/Comment_Section_Automation/EmailAndPhoneNumExtractor.py
@@ -0,0 +1,45 @@
+import re
+
+# Read the text file from which you need to extract email ids and phone no.s 
+file = open("your_text_file.txt","r")
+reading = file.read()
+
+a=reading.split("\n\n")
+
+emails = []
+phone = []
+mobile = []
+
+for i in a:
+    emailRegex = re.compile(r'[\w\.]+@[\w\.]+')
+    em = emailRegex.findall(i)
+    phoneRegex = re.compile(r'\d\d\d-\d\d\d\d-\d\d\d\d')
+    ph = phoneRegex.findall(i)
+    mobileRegex = re.compile(r'\d{10}')
+    mob = mobileRegex.findall(i)
+    if em:
+        emails.append(em)
+    else:
+        emails.append(None)
+    if ph:
+        phone.append(ph)
+    else:
+        phone.append(None)
+    if mob:
+        mobile.append(mob)
+    else:
+        mobile.append(None)
+    
+maping = zip(emails, phone, mobile)
+maping = list(maping)
+print(maping)
+    
+# Write all the extracted info into a separate text file
+fptr = open("PhoneandEmail.txt", "w")
+for i in range(0, len(maping)) :
+    a = str(maping[i])
+    print(maping[i])
+    fptr.write(a + '\n')
+
+fptr.close()
+file.close()
diff --git a/Python/Projects/Comment_Section_Automation/README.md b/Python/Projects/Comment_Section_Automation/README.md
new file mode 100644
index 00000000..bd88e469
--- /dev/null
+++ b/Python/Projects/Comment_Section_Automation/README.md
@@ -0,0 +1,84 @@
+# Comment Section Automation
+
+Say you have the boring task of finding every phone number and email address in a comments section of a popular blog. If you manually scroll through the page, you might end up searching for a long time. But if you had a program that could search the text in your clipboard for phone numbers and email addresses, you could simply press ctrl-A to select all the text, press ctrl-C to copy it to a .txt file, and then run your program. It would fetch just the phone numbers and email addresses it finds and write them to another .txt file.
+
+## Working and Output
+
+I've fetched a few comments(ctrl-A) from a LinkedIn post and pasted them(ctrl-V) in a text file.
+```
+Pranay Raj Parisha  1st degree connection1st
+Actively Looking forward to Summer Internships 2019
+parishapranayraj97@gmail.com , 9833991285 Thank you for sharing!
+Like Like Pranay Raj Parisha’s comment Reply
+2d
+
+MAYANK WADHWANI
+MAYANK WADHWANI  1st degree connection1st
+Events Executive at CSEA
+please share a copy
+mayank343@gmail.com
+Like Like MAYANK WADHWANI’S comment Reply
+6d
+
+Priyam Sareen
+Priyam Sareen  1st degree connection1st
+Student at Indian Institute of Technology, Kanpur
+please mail to sareenpriyam@gmail.com and call me at 022-2085-7292
+Like Like Priyam Sareen’s comment Reply
+3d
+
+Hansa Maheshwari
+Hansa Maheshwari  1st degree connection1st
+Student at Indian Statistical Institute
+furious.hansa@gmail.com
+Like Like Hansa Maheshwari’s comment Reply
+6d
+
+Ayush Agarwala
+Ayush Agarwala  1st degree connection1st
+Tech enthusiast | Android app developer | Backend developer | BTECH CSE at NIT SILCHAR
+ayush.code.05@gmail.com
+Like Like Ayush Agarwala’s comment Reply
+1w
+
+Mayank Sharma
+Mayank Sharma  1st degree connection1st
+Student at SRM University
+Pls share with me also  mayanksharma1902@gmail.com  (edited)
+
+Like Like Mayank Sharma’s comment Reply
+2h
+
+Oindrila Choudhury
+Oindrila Choudhury  2nd degree connection2nd
+Student at SRM University
+Hi , I would like to have a copy of it.  Email I'd oindie3@gmail.com
+Like Like Oindrila Choudhury’s comment Reply
+6h
+
+Aravind Muthukrishnan
+Aravind Muthukrishnan  3rd degree connection3rd
+Quality Analyst at PM AM IT Services
+Kindly share 1 copy with me at m_arvind93@yahoo.com
+Thanks in advance
+Like Like Aravind Muthukrishnan’s comment Reply
+```
+#### Output Obtained after running the script:
+
+```
+(['parishapranayraj97@gmail.com'], None, ['9833991285'])
+(['mayank343@gmail.com'], None, None)
+(['sareenpriyam@gmail.com'], ['022-2085-7292'], None)
+(['furious.hansa@gmail.com'], None, None)
+(['ayush.code.05@gmail.com'], None, None)
+(['mayanksharma1902@gmail.com'], None, None)
+(None, None, None)
+(['oindie3@gmail.com'], None, None)
+(['m_arvind93@yahoo.com'], None, None)
+```
+The script will create `PhoneandEmail.txt` file in the same directory and write the above output into it.
+
+## Libraries Used:
+
+`re — Regular expression operations`.  
+For more information, refer this documentation: https://docs.python.org/3/library/re.html
diff --git a/Python/Projects/Discord Stock BOT/Discord_Bot.py b/Python/Projects/Discord Stock BOT/Discord_Bot.py
new file mode 100644
index 00000000..3425eac5
--- /dev/null
+++ b/Python/Projects/Discord Stock BOT/Discord_Bot.py	
@@ -0,0 +1,165 @@
+#-------------Importing all packages Package---------
+import discord
+from discord.ext import commands
+from pandas_datareader import data as pdr
+import datetime as dt
+import yfinance as yf
+import pandas as pd
+import matplotlib.pyplot as plt
+from bs4 import BeautifulSoup
+import bs4
+import ssl
+import io
+import requests
+%matplotlib inline
+
+
+#---------Using it to allow nested event loops---------------
+#-------Using it so that multiple functions can be called together/It manages running of all coroutines, tasks, callbacks.-----------------
+#-------async- allowing the code after the asynchronous call to be executed immediately without waiting-------------
+import nest_asyncio
+nest_asyncio.apply()
+
+#-----activates workaround-------------
+#----using pdr to create dataframe from various internet resources---------
+yf.pdr_override() 
+
+#------Creating a client or a handle to connect to our bot & a prefix-----
+client=commands.Bot(command_prefix=".")
+    
+
+#---------------Giving 6 months history---------------------------------
+@client.command(name='history')
+async def history(ctx,arg):
+    #-----------Today's date--------------
+    date=dt.date.today()
+    nowy=date.year
+    nowm=date.month
+    nowd=date.day
+
+    #------start date-----------
+    syear=nowy+(nowm-7)//12
+    smonth=(nowm-7)%12+1
+    sday=nowd
+
+    start=dt.datetime(syear,smonth,sday)
+    now=dt.datetime.now()
+    
+    df=pdr.get_data_yahoo(arg,start,now,interval="1mo")
+    df=df.reset_index()
+    df_close=df[['Date','Close']]
+    df_close.set_index('Date',inplace=True)
+    f=plt.figure()
+    plt.plot(df_close,'b')
+    plt.plot(df_close,'ro')
+    plt.grid(True)
+    plt.title(arg+" "+"Close Price Representation")
+    plt.xlabel('Trading Months')
+    plt.ylabel("Close Price")
+
+    #-------Setting the bg as white--------------
+    rect = f.patch
+    rect.set_facecolor("white")
+    #-----------Generating the html link & setting bg as white--------------
+    fig = plt.gcf()
+    buf = io.BytesIO()
+    fig.savefig(buf, format='png',facecolor=f.get_facecolor())
+    #buf.seek(0)
+    #string = base64.b64encode(buf.read())
+    #uri = 'data:image/png;base64,' + urllib.parse.quote(string)
+    #html='<img src = "%s"/>' % uri
+
+    #----------Saving the plot------------------
+    #plt.plot(df_close)
+    plt.savefig('plot_history_6.png')
+    #plt.show()
+
+    await ctx.send(file=discord.File("plot_history_6.png"))
+    
+
+    
+#----------------Current OHLC Price of a stock--------------------------
+@client.command(name='stock')
+async def stock(ctx,arg):
+    #-------Getting channel/server info----------
+    guild=ctx.guild
+    #---------Getting info of the members--------------
+    member = ctx.message.author
+    
+    stck=yf.Ticker(arg)
+    curr=stck.history(period='1d',interval='1m')
+    curr=curr.reset_index()
+    df_curr=curr[['Datetime','Open','High','Low','Close']]
+    df_curr=df_curr.values.tolist()
+    df_curr=df_curr[-1]
+    stk=str(stck)
+    embed=discord.Embed(
+        title=f"{arg} OHLC Price",
+        color=0xa200ff,
+        timestamp=dt.datetime.utcnow()
+    )
+    embed.add_field(name="Open",value=df_curr[1],inline=False)
+    embed.add_field(name="High",value=df_curr[2],inline=False)
+    embed.add_field(name="Low",value=df_curr[3],inline=False)
+    embed.add_field(name="Close",value=df_curr[4],inline=False)
+    embed.set_author(name="RS-Updates",icon_url=guild.icon_url)
+    embed.set_thumbnail(url=member.avatar_url)
+    embed.set_footer(text=f"Requested by {member.name}")
+    
+    await ctx.send(embed=embed)
+    
+#----------TOP 25 Gainers---------------  
+@client.command(name="gainers")
+async def gain(ctx):
+    #-------Getting channel/server info----------
+    guild=ctx.guild
+    #-------------Incase SSL Certificate error occurs-------------
+    ct=ssl.create_default_context()
+    ct.check_hostname=False
+    ct.verify_made=ssl.CERT_NONE
+
+    url=('https://www.moneycontrol.com/stocks/marketstats/nsegainer/index.php')
+    r=requests.get(url)
+
+
+
+    soup=BeautifulSoup(r.content,'html.parser')
+    company=soup.find_all('a',style="color:#333")
+    high=soup.find_all('td',align="right",width="75")
+    low=soup.find_all('td',align="right",width="80")
+    lPrice=soup.find_all('td',align="right",width="85")
+    PClose=soup.find_all('td',align="right",width="80")
+
+    h=list()
+    l=list()
+    lP=list()
+    PC=list()
+    com=list()
+    
+    for i in high:
+        h.append(i.text)
+    for i in low:
+        l.append(i.text)
+    for i in lPrice:
+        lP.append(i.text)
+    for i in PClose:
+        PC.append(i.text)
+    for c in company:
+        com.append(c.text)
+
+    lw=list()
+    for i in range(0,len(l),2):
+        lw.append(l[i])
+    pc=list()
+    for i in range(1,len(PC),2):
+        pc.append(PC[i])
+    df=pd.DataFrame(list(zip(com,h,lw,lP,pc)),columns=['Company Name','High','Low','Last Price','Previous Price'])
+    embed = discord.Embed(title="Top 25 Gainers", color=0x03f8fc,timestamp=dt.datetime.utcnow())
+    embed.set_thumbnail(url=guild.icon_url)
+    embed.set_footer(text="Daily Updates")
+    for i in range(len(df)):
+        embed.add_field(name=f'**{df.loc[i, "Company Name"]}**',value=f'> High: {df.loc[i,"High"]}\n> Low: {df.loc[i,"Low"]}\n> Last Price: {df.loc[i,"Last Price"]}',inline=False)
+    await ctx.send(embed=embed)
+        
+#----Connecting to our bot using its token key---------
+client.run('----------------------------------------------------')
\ No newline at end of file
diff --git a/Python/Projects/Discord Stock BOT/README.MD b/Python/Projects/Discord Stock BOT/README.MD
new file mode 100644
index 00000000..c5d1ea10
--- /dev/null
+++ b/Python/Projects/Discord Stock BOT/README.MD	
@@ -0,0 +1,30 @@
+# Discord Stock Bot -----Stocky
+
+Pls note: Make sure to generate token key of your bot via discord developer portal
+  ## DESCRIPTION
+    1. This Discord Stock Bot is designed to give users updates on the stocks they wish to see.
+    2. Used 
+      a. Python (Jupyter Notebook)
+      b. Web-Scraping 
+      c. Discord API
+  
+### This is a Custom Stock Bot can do lot of things like
+    1. Can give you current OHLC Price of stock symbol/ticker you enter
+    2. Gives you list of Top 25 Gainers in the National Stock Market.
+    3. Can give you a 6 months history plot of a stock symbol/ticker you enter
+    4. Much more to come..
+ 
+### Libraries Used
+    1. import discord
+    2. from discord.ext import commands
+    3. from pandas_datareader import data as pdr
+    4. import datetime as dt
+    5. import yfinance as yf
+    6. import pandas as pd
+    7. import numpy as np
+    8. import matplotlib.pyplot as plt
+    9. from bs4 import BeautifulSoup
+    10. import bs4
+    11. import ssl
+    12. import requests
+
diff --git a/Python/Projects/Image to sketch/main.py b/Python/Projects/Image to sketch/main.py
new file mode 100644
index 00000000..f6123423
--- /dev/null
+++ b/Python/Projects/Image to sketch/main.py	
@@ -0,0 +1,11 @@
+import cv2 # pip install cv2
+image = cv2.imread("fireball.jpg") # downloaded image
+cv2.imshow("image", image)
+grey_img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
+invert = cv2.bitwise_not(grey_img)
+blur = cv2.GaussianBlur(invert, (21, 21), 0)
+inverted_blur = cv2.bitwise_not(blur)
+sketch = cv2.divide(grey_img, inverted_blur, scale=256.0)
+
+cv2.imwrite("sketch.png", sketch)
+quit()
diff --git a/Python/Projects/MoviePy Projects/Video to Audio (mp4 to mp3)/README.md b/Python/Projects/MoviePy Projects/Video to Audio (mp4 to mp3)/README.md
new file mode 100644
index 00000000..4d099419
--- /dev/null
+++ b/Python/Projects/MoviePy Projects/Video to Audio (mp4 to mp3)/README.md	
@@ -0,0 +1,6 @@
+# Video to Audio (mp4 to mp3)
+
+video-to-audio.py is a python script which converts VIDEO files into AUDIO files using a very powerful python library known as [MoviePy](https://pypi.org/project/moviepy/)
+
+You can convert various video formats into an audio file using this python script.
+If you haven't installed MoviePy, then open your terminal and type in 'pip install moviepy' & the latest version of moviepy would be installed.
diff --git a/Python/Projects/MoviePy Projects/Video to Audio (mp4 to mp3)/sample-audio-output.mp3 b/Python/Projects/MoviePy Projects/Video to Audio (mp4 to mp3)/sample-audio-output.mp3
new file mode 100644
index 00000000..f1f716f9
Binary files /dev/null and b/Python/Projects/MoviePy Projects/Video to Audio (mp4 to mp3)/sample-audio-output.mp3 differ
diff --git a/Python/Projects/MoviePy Projects/Video to Audio (mp4 to mp3)/sample-video.mp4 b/Python/Projects/MoviePy Projects/Video to Audio (mp4 to mp3)/sample-video.mp4
new file mode 100644
index 00000000..98a37fb7
Binary files /dev/null and b/Python/Projects/MoviePy Projects/Video to Audio (mp4 to mp3)/sample-video.mp4 differ
diff --git a/Python/Projects/MoviePy Projects/Video to Audio (mp4 to mp3)/video-to-audio.py b/Python/Projects/MoviePy Projects/Video to Audio (mp4 to mp3)/video-to-audio.py
new file mode 100644
index 00000000..1212c158
--- /dev/null
+++ b/Python/Projects/MoviePy Projects/Video to Audio (mp4 to mp3)/video-to-audio.py	
@@ -0,0 +1,15 @@
+# install the module 'moviepy' first if you haven't
+# pip install moviepy
+
+from moviepy.editor import *
+
+video_mp4= input("Enter video file's name along with extension- ")
+
+audio_mp3= input("Enter file name for the converted audio (without extension)- ")
+
+clip= VideoFileClip(video_mp4)
+audio= clip.audio
+audio.write_audiofile(audio_mp3+".mp3")
+
+clip.close()
+audio.close()
\ No newline at end of file
diff --git a/Python/Projects/MoviePy Projects/Video to GIF/README.md b/Python/Projects/MoviePy Projects/Video to GIF/README.md
new file mode 100644
index 00000000..58a51e62
--- /dev/null
+++ b/Python/Projects/MoviePy Projects/Video to GIF/README.md	
@@ -0,0 +1,6 @@
+# Video to GIF
+
+video-to-gif.py is a python script which converts VIDEO files into GIF (Graphics Interchange Format) files using a very powerful python library known as [MoviePy](https://pypi.org/project/moviepy/)
+
+You can convert various video formats into GIF file using this python script.
+If you haven't installed MoviePy, then open your terminal and type in 'pip install moviepy' & the latest version of moviepy would be installed.
diff --git a/Python/Projects/MoviePy Projects/Video to GIF/sample-gif-output-10fps.gif b/Python/Projects/MoviePy Projects/Video to GIF/sample-gif-output-10fps.gif
new file mode 100644
index 00000000..866671cb
Binary files /dev/null and b/Python/Projects/MoviePy Projects/Video to GIF/sample-gif-output-10fps.gif differ
diff --git a/Python/Projects/MoviePy Projects/Video to GIF/sample-video.mp4 b/Python/Projects/MoviePy Projects/Video to GIF/sample-video.mp4
new file mode 100644
index 00000000..d6a4994e
Binary files /dev/null and b/Python/Projects/MoviePy Projects/Video to GIF/sample-video.mp4 differ
diff --git a/Python/Projects/MoviePy Projects/Video to GIF/video-to-gif.py b/Python/Projects/MoviePy Projects/Video to GIF/video-to-gif.py
new file mode 100644
index 00000000..d5609b31
--- /dev/null
+++ b/Python/Projects/MoviePy Projects/Video to GIF/video-to-gif.py	
@@ -0,0 +1,17 @@
+# install the module 'moviepy' first if you haven't
+# pip install moviepy
+
+from moviepy.editor import VideoFileClip
+
+video= input("Enter video file's name along with extension- ")
+
+print("Choose FPS rate from anywhere between 5 to 20.")
+fpsrate= int(input("Enter FPS- "))
+while fpsrate<5 or fpsrate>20:
+	fpsrate= int(input("Enter FPS rate accordingly- "))
+
+savedgif= input("Enter file name for the converted GIF image (without extension)- ")
+savedgif= savedgif+".gif"
+
+clip= VideoFileClip(video)
+clip.write_gif(savedgif, fps= fpsrate)
\ No newline at end of file
diff --git a/Python/Projects/Music Player/ace07.py b/Python/Projects/Music Player/ace07.py
new file mode 100644
index 00000000..173570d7
--- /dev/null
+++ b/Python/Projects/Music Player/ace07.py	
@@ -0,0 +1,62 @@
+#importing necessary modules
+import pygame
+import tkinter as tkr
+from tkinter.filedialog import askdirectory
+import os
+#creating application window
+musicplayer = tkr.Tk()
+#setting the title name
+musicplayer.title("Music Player")
+#setting the dimensions
+musicplayer.geometry("450x350")
+
+directory = askdirectory()
+
+os.chdir(directory)
+
+songlist =os.listdir()
+
+playlist =tkr.Listbox(musicplayer, font="sans-serif 14 bold",bg="green",selectmode=tkr.SINGLE)
+
+for item in songlist:
+    pos=0
+    playlist.insert(pos,item)
+    pos=pos+1
+
+pygame.init()
+pygame.mixer.init()
+
+def play():
+    pygame.mixer.music.load(playlist.get(tkr.ACTIVE))
+    var.set(playlist.get(tkr.ACTIVE))
+    pygame.mixer.music.play()
+
+def ExitMusicPlayer():
+    pygame.mixer.music.stop()
+
+def pause():
+    pygame.mixer.music.pause()
+
+def resume():
+    pygame.mixer.music.unpause()
+def next_song():
+    next_one= song_box.curselection()
+
+Button_play =tkr.Button(musicplayer,height=3,width=5,text="Play",font="sans-serif 10 bold",command=play,bg="orange",fg="yellow")
+
+Button_pause =tkr.Button(musicplayer,height=3,width=5,text="Pause",font="sans-serif 10 bold",command=pause,bg="black",fg="white")
+Button_resume =tkr.Button(musicplayer,height=3,width=5,text="Resume",font="sans-serif 10 bold",command=resume,bg="black",fg="white")
+Button_stop =tkr.Button(musicplayer,height=3,width=5,text="Stop",font="sans-serif 10 bold",command=ExitMusicPlayer,bg="black",fg="white")
+Button_next =tkr.Button(musicplayer,height=3,width=5,text="Next",font="sans-serif 10 bold",command=next,bg="black",fg="white")
+Button_play.pack(fill="x")
+
+Button_pause.pack(fill="x")
+Button_resume.pack(fill="x")
+Button_stop.pack(fill="x")
+Button_next.pack(fill="x")
+playlist.pack(fill="both",expand="yes")
+
+var=tkr.StringVar()
+songtitle=tkr.Label(musicplayer,font="sans-serif 20 italic",textvariable=var)
+songtitle.pack()
+musicplayer.mainloop()
diff --git a/Python/Projects/Notepad using Python/README.MD b/Python/Projects/Notepad using Python/README.MD
new file mode 100644
index 00000000..1fd41a20
--- /dev/null
+++ b/Python/Projects/Notepad using Python/README.MD	
@@ -0,0 +1,23 @@
+# Notepad using Python's tkinter
+
+> Made a Notepad like application using [tkinter](https://docs.python.org/3/library/tk.html)
+
+# Features
+
+1. Can do following functionalities:
+   1. Type the text
+   2. Save the file as .txt only (you may change it to any file type, check [here]() how to do it)
+2. Different look of dark theme.
+
+:warning: Never put the output in full screen mode.
+
+# How to change savefileextension
+
+*Simple steps:*
+1. Go to the code in line 15.
+2. Change the code, replace the value of `defaultextension` from `.txt` to `*,*`.
+3. Save the code & rerun.
+
+# Author:
+
+[Nitin Kumar](https://github.com/nitinkumar30/)
diff --git a/Python/Projects/Notepad using Python/notepad-using-python.py b/Python/Projects/Notepad using Python/notepad-using-python.py
new file mode 100644
index 00000000..1faea51f
--- /dev/null
+++ b/Python/Projects/Notepad using Python/notepad-using-python.py	
@@ -0,0 +1,52 @@
+from tkinter import *
+from tkinter import filedialog, messagebox
+
+# imported all modules
+
+root = Tk()
+root.geometry("520x600")
+root.title("Nitin's Notepad")
+
+
+# ---------------------------------------------------
+# define methods for button functionality
+
+def save_file():
+    open_file = filedialog.asksaveasfile(mode='w', defaultextension=".txt") # change defaultextension's value to '*.*'
+    if open_file is None:
+        return
+    text = str(entry.get(1.0, END))
+    open_file.write(text)
+    open_file.close()
+
+
+def clear():
+    messagebox.showinfo("Cleared", "Cleared all contents !")
+    entry.delete(1.0, END)
+
+
+def open_file():
+    file = filedialog.askopenfile(mode='r', filetype=[('text files', '*.txt')])
+    if file is not None:
+        content = file.read()
+    entry.insert(INSERT, content)
+
+
+# --------------------------------------------
+
+# Buttons & Textbox placement
+
+b1 = Button(root, text="Save File", command=save_file)
+b1.place(x=10, y=10)
+
+b2 = Button(root, text="Clear", command=clear)
+b2.place(x=70, y=10)
+
+b3 = Button(root, text="Open File", command=open_file)
+b3.place(x=120, y=10)
+
+entry = Text(root, height=60, width=70, wrap=WORD, bg="black", fg="yellow", selectbackground="blue",
+             font="Courier 15", insertbackground="violet")
+entry.place(x=10, y=50)
+
+root.mainloop()
diff --git a/Python/Projects/Office Attendance System/README.md b/Python/Projects/Office Attendance System/README.md
new file mode 100644
index 00000000..780f3359
--- /dev/null
+++ b/Python/Projects/Office Attendance System/README.md	
@@ -0,0 +1,53 @@
+# Office Attendance System
+
+**Problem statement** : Implemeting modern technology to remove old style attendace system of attendance in government offices.
+
+## Features:-
+  - Create a new employee profile.
+  - Update old employee profile
+  - Store all that in a separate file
+  - Easy to use interface
+  - Unique id generation features for attendance
+  - View all details page
+
+## Instructions
+
+**Step 1**
+Install the TKinter using the below command 
+
+```
+pip install tk
+
+```
+
+**Step 2**
+Then make a copy or download the **main.py** file and run using python compiler.
+
+
+## Libraries used
+
+```
+import os  
+import ast
+import random
+from tkinter import *
+import tkinter as tk
+from functools import partial
+import os
+
+```
+
+
+## 📸 Screenshots:-
+
+<img src="https://github.com/m0hit-kumar/Programming-Basics/blob/main/Python/Projects/Office%20Attendance%20System/images/1.png"></img>
+<img src="https://github.com/m0hit-kumar/Programming-Basics/blob/main/Python/Projects/Office%20Attendance%20System/images/5.png"></img>
+<img src="https://github.com/m0hit-kumar/Programming-Basics/blob/main/Python/Projects/Office%20Attendance%20System/images/3.png"></img>
+<img src="https://github.com/m0hit-kumar/Programming-Basics/blob/main/Python/Projects/Office%20Attendance%20System/images/4.png"></img>
+<img src="https://github.com/m0hit-kumar/Programming-Basics/blob/main/Python/Projects/Office%20Attendance%20System/images/2.png"></img>
+
+
+
+
+# Contributor
+Mohit kumar(https://github.com/m0hit-kumar)
diff --git a/Python/Projects/Office Attendance System/data.txt b/Python/Projects/Office Attendance System/data.txt
new file mode 100644
index 00000000..00898a6c
--- /dev/null
+++ b/Python/Projects/Office Attendance System/data.txt	
@@ -0,0 +1 @@
+{'1029': {'name': 'sakshi', 'age': '20', 'position': '', 'address': 'delhi', 'salary': '', 'attendance': 1}}
\ No newline at end of file
diff --git a/Python/Projects/Office Attendance System/images/1.png b/Python/Projects/Office Attendance System/images/1.png
new file mode 100644
index 00000000..9447d081
Binary files /dev/null and b/Python/Projects/Office Attendance System/images/1.png differ
diff --git a/Python/Projects/Office Attendance System/images/2.png b/Python/Projects/Office Attendance System/images/2.png
new file mode 100644
index 00000000..9908395b
Binary files /dev/null and b/Python/Projects/Office Attendance System/images/2.png differ
diff --git a/Python/Projects/Office Attendance System/images/3.png b/Python/Projects/Office Attendance System/images/3.png
new file mode 100644
index 00000000..d9e203ef
Binary files /dev/null and b/Python/Projects/Office Attendance System/images/3.png differ
diff --git a/Python/Projects/Office Attendance System/images/4.png b/Python/Projects/Office Attendance System/images/4.png
new file mode 100644
index 00000000..2a8704b4
Binary files /dev/null and b/Python/Projects/Office Attendance System/images/4.png differ
diff --git a/Python/Projects/Office Attendance System/images/5.png b/Python/Projects/Office Attendance System/images/5.png
new file mode 100644
index 00000000..4bb70dc9
Binary files /dev/null and b/Python/Projects/Office Attendance System/images/5.png differ
diff --git a/Python/Projects/Office Attendance System/main.py b/Python/Projects/Office Attendance System/main.py
new file mode 100644
index 00000000..fc515801
--- /dev/null
+++ b/Python/Projects/Office Attendance System/main.py	
@@ -0,0 +1,318 @@
+import os  # import libraries like open,close and more for file handeling
+import ast
+import random
+from tkinter import *
+import tkinter as tk
+from functools import partial
+#import tkMessageBox
+import os
+##
+##
+
+
+def change_color():
+    if window["background"] == "white":
+        window["background"] = "black"
+        # print(window)
+        # tk.mycolor["text"] = "black theme"
+
+    else:
+        window["background"] = "white"
+        # tk.mycolor["text"] = "black theme"
+
+
+def data_update(userid):
+    update_data1 = tk.Tk()
+    update_data1.configure(bg="black")
+    update_data1.title("update data")
+
+    def update_entry(name, age, address, user_id):
+        name = name.get()
+        age = age.get()
+        address = address.get()
+        myfile = open("data.txt", "r")
+        dic = myfile.read()
+        user1 = ast.literal_eval(dic)
+        myfile.close()
+        user1[userid]['name'] = name
+        user1[userid]['age'] = age
+        user1[userid]['address'] = address
+        myfile = open("data.txt", "w")
+        myfile.write(str(user1))
+        myfile.close()
+        tk.Label(master=update_data1, text="your data updated").grid()
+
+    name = tk.StringVar(update_data1)
+    age = tk.StringVar(update_data1)
+    address = tk.StringVar(update_data1)
+
+    # username
+    tk.Label(master=update_data1, text="Update Profile",
+             font="none 20 bold", fg='white', bg="black").grid()
+
+    tk.Label(master=update_data1, text="name",
+             width=10, bg="black", fg="red").grid(row=1)
+    tk.Entry(master=update_data1, textvariable=name,
+             bg="red").grid(column=1, row=1)
+    # age
+    tk.Label(master=update_data1, text="age", width=10,
+             bg="black", fg="red").grid(row=2)
+    tk.Entry(master=update_data1, textvariable=age,
+             bg="red").grid(column=1, row=2)
+    # address
+    tk.Label(master=update_data1, text="address", width=10,
+             bg="black", fg="red", font="none 10 bold").grid(row=4)
+    tk.Entry(master=update_data1, textvariable=address,
+             bg="red").grid(column=1, row=4)
+    update_entry1 = partial(update_entry, name, age, address, userid)
+    tk.Button(master=update_data1, text="Proceed",
+              command=update_entry1, width=10).grid(row=6, column=1, pady=2)
+    tk.Button(master=update_data1, text="Exit",
+              command=update_data1.destroy, width=10).grid(row=6, column=2, pady=2)
+
+
+def userInfo():
+    def call_result(n1):
+        num1 = (n1.get())
+        myfile = open("data.txt", "r")
+        dic = myfile.read()
+        user1 = ast.literal_eval(dic)
+        myfile.close()
+        print(user1)
+
+        if num1 not in user1.keys():
+            tk.Label(master=profile, text='Invalid ID. Try Again!').grid()
+            print('$$$$$', num1)
+        else:
+            tk.Label(master=profile, text="Name", width=20, bg="black",
+                     fg="red", font="none 12 bold", justify=LEFT).grid(row=6, pady=3)
+            tk.Label(master=profile, text=user1[num1]['name'], bg="black", fg="white",
+                     font="none 9", justify=LEFT).grid(column=1, row=6, pady=3, padx=4)
+          # age
+            tk.Label(master=profile, text="Age", width=20, bg="black",
+                     fg="red", font="none 12 bold", justify=LEFT).grid(row=7, pady=3)
+            tk.Label(master=profile, text=user1[num1]['age'], bg="black",
+                     fg="white", font="none 9", justify=LEFT).grid(column=1, row=7, pady=3)
+          # address
+            tk.Label(master=profile, text="Address", width=20, bg="black",
+                     fg="red", font="none 12 bold", justify=LEFT).grid(row=8, pady=3)
+            tk.Label(master=profile, text=user1[num1]['address'], bg="black",
+                     fg="white", font="none 9", justify=LEFT).grid(column=1, row=8, pady=3)
+           # salary
+            tk.Label(master=profile, text="Salary", width=20, bg="black",
+                     fg="red", font="none 12 bold", justify=LEFT).grid(row=10, pady=3)
+            tk.Label(master=profile, text=user1[num1]['salary'], bg="black", fg="white",
+                     font="none 12 bold", justify=LEFT).grid(column=1, row=10, pady=3)
+          # attendance
+            tk.Label(master=profile, text="Attendance", width=20, bg="black",
+                     fg="red", font="none 12 bold", justify=LEFT).grid(row=9, pady=3)
+            tk.Label(master=profile, text=user1[num1]['attendance'], bg="black",
+                     fg="white", font="none 9", justify=LEFT).grid(column=1, row=9, pady=3)
+            data_update1 = partial(data_update, num1)
+
+            tk.Button(master=profile, text="Update Data",
+                      command=data_update1, width=10).grid(row=12, column=1, pady=3)
+            tk.Button(master=profile, text="Exit", command=profile.destroy, width=10).grid(
+                row=12, column=2, pady=3)
+
+    profile = tk.Tk()
+    numberr = tk.StringVar(profile)
+    profile.geometry('720x450')
+    profile.title("View Logs")
+    profile.configure(bg='black')
+    tk.Label(master=profile, text="User  Profile", font="none 20 bold",
+             fg='white', bg="black").grid(row=1, column=2)
+    tk.Label(master=profile, text="UserId", width=10,
+             bg="black", fg="red").grid(row=2, column=2)
+    username = tk.Entry(master=profile, textvariable=numberr,
+                        bg="red").grid(column=3, row=2)
+
+    call_result11 = partial(call_result, numberr)
+
+    buttonCal = tk.Button(master=profile, text="Enter",
+                          command=call_result11).grid(row=2, column=4, padx=6)
+
+
+def exitWindow():
+    notice = tk.Tk("Admin Portaal")
+
+    def destroy_all():
+        notice.destroy()
+        window.destroy()
+
+    notice.title("exit")
+    tk.Label(notice, text="do you really want to exit?").grid()
+    tk.Button(notice, text="Yes", command=destroy_all).grid(column=1, row=6)
+    tk.Button(notice, text="NO", command=notice.destroy).grid(row=6, column=2)
+
+
+def create_profile():
+
+    def call_result(name, age, address):
+        name = (name.get())
+        age = (age.get())
+        address = (address.get())
+        uni = random.randrange(1000, 2000)
+        uni_id = []
+
+        while(uni in uni_id):
+            uni = random.randrange(1000, 2000)
+            uni_id.append(uni)
+        uni_print = "Your unique id :" + str(uni)
+        tk.Label(master=create_profile, text=uni_print,
+                 font="none 10 bold", fg="black").grid(row=8, column=3)
+        file_logs(name, age, address, uni)
+
+    create_profile = tk.Tk()
+    create_profile.title("Create Profile")
+
+    name = tk.StringVar(create_profile)
+    age = tk.StringVar(create_profile)
+    address = tk.StringVar(create_profile)
+    create_profile.geometry('720x600')
+    create_profile.configure(bg='black')
+
+    # username
+    tk.Label(master=create_profile, text="Create Profile",
+             font="none 20 bold", justify=LEFT, fg='white', bg="black").grid()
+
+    tk.Label(master=create_profile, text="Name", width=10, height=2,
+             font="none 10", bg="black", fg="red").grid(row=1, pady=2)
+    tk.Entry(master=create_profile, textvariable=name,
+             font="none 8", bg="red").grid(column=1, row=1)
+    # age
+    tk.Label(master=create_profile, text="Age", font="none 10",
+             width=10, height=2, bg="black", fg="red").grid(row=2, pady=2)
+    tk.Entry(master=create_profile, textvariable=age,
+             bg="red", font="none 8").grid(column=1, row=2)
+    # address
+    tk.Label(master=create_profile, text="Address", width=10, height=2,
+             bg="black", fg="red", font="none 10").grid(row=4, pady=2)
+    tk.Entry(master=create_profile, textvariable=address,
+             bg="red", font="none 8").grid(column=1, row=4)
+
+    call_result11 = partial(call_result, name, age, address)
+
+    instructions = 'Instruction to create a profile:- \n \n 1)Fill your name,age,postion and address.(All fields are required)\n 2)Then click generate id  \n 3) this will create your profile \n 4)To create another profile just fill the new details and click generate unique id.'
+    tk.Label(master=create_profile, text=instructions, bg="black",
+             fg="white", font="none 8", justify=LEFT).grid(row=8, pady=20)
+
+    buttonCal = tk.Button(master=create_profile, text="Generate unique id",
+                          command=call_result11).grid(row=5, column=3)
+    buttonCal = tk.Button(master=create_profile, text="Home",
+                          command=create_profile.destroy).grid(row=9, pady=2, column=0)
+
+
+window = tk.Tk()
+window.configure(bg='black')
+window.title("mainScreen")
+heading = tk.Label(master=window, text="Welcome to the Admin Panel !!",
+                   font="none 20 bold", fg='white', bg="black").grid()
+
+
+def attend():
+    def attendance_update():
+        att = ID.get()
+        myfile = open("data.txt", "r")
+        dic = myfile.read()
+        user1 = ast.literal_eval(dic)
+        myfile.close()
+        if att not in user1.keys():
+            tk.Label(master=popup, text='Invalid ID. Try Again!').grid()
+            # print('$$$$$',num1)
+        else:
+            user1[att]['attendance'] = user1[att]['attendance']+1
+            if user1[att]['attendance'] == 0:
+                user1[att]['salary'] = 10000
+                user1[att]['position'] = 'employee'
+            elif user1[att]['attendance'] == 3:
+                user1[att]['salary'] = 20000
+                user1[att]['position'] = 'senior employee'
+            elif user1[att]['attendance'] == 5:
+                user1[att]['salary'] = 30000
+                user1[att]['position'] = 'team manager'
+            elif user1[att]['attendance'] == 7:
+                user1[att]['salary'] = 40000
+                user1[att]['position'] = 'senior manager'
+
+            tk.Label(master=popup, text="Attendance Marked").grid()
+            myfile = open("data.txt", "w")
+            myfile.write(str(user1))
+            myfile.close()
+
+    popup = tk.Tk()
+    popup.configure(bg="black")
+    popup.title("Mark Attendance")
+    ID = tk.StringVar(popup)
+    tk.Label(master=popup, text="enter user id", font="none 10 bold",
+             fg="white", bg="black").grid(row=2, padx=3, pady=3)
+    tk.Entry(master=popup, textvariable=ID, bg="red").grid(row=2, column=1)
+    Button = tk.Button(popup, text="Mark", command=attendance_update).grid(
+        row=3, column=1, padx=3, pady=3)
+    Button = tk.Button(popup, text="Exit", command=popup.destroy).grid(
+        row=3, column=2, padx=3, pady=3)
+
+
+diccc = tk.Button(master=window, text="Create Profile", font="none 10 ",
+                  command=create_profile, width=20, height=4).grid(row=6, pady=15)
+
+print(diccc)
+tk.Button(master=window, text="View Logs", font="none 10 ",
+          width=20, height=4, command=userInfo).grid(row=8, pady=15)
+tk.Button(master=window, text="Mark attendence", font="none 10 ",
+          width=20, height=4, command=attend).grid(row=2, pady=15)
+top = tk.Button(master=window, text="QUIT", fg="red", font="none 10 ",
+                command=exitWindow, width=20, height=4).grid(row=10, pady=15)
+mycolor = tk.Button(master=window, text="change theme",
+                    command=change_color, width=10).grid(row=20, pady=25)
+
+user1 = {}
+
+
+def file_logs(name_in, age_in, address_in, unique_gen):
+    unique_gen = str(unique_gen)
+
+    user1 = {}
+    myfile = open("data.txt", "w+")
+    myfile.close()
+    myfile = open("data.txt", "r+")
+    dic = myfile.read()
+    print("########", name_in, dic)
+    if dic != '':
+        user1 = ast.literal_eval(dic)
+        print("%%%%%%%%%")
+        user1[unique_gen] = {}
+        user1[unique_gen]['name'] = name_in
+        user1[unique_gen]['age'] = age_in
+        user1[unique_gen]['position'] = ''
+        user1[unique_gen]['address'] = address_in
+        user1[unique_gen]['salary'] = ''
+        user1[unique_gen]['attendance'] = 0
+        myfile.close()
+        myfile = open("data.txt", "w")
+        print("$$$$$$$$")
+        myfile.write(str(user1))
+        myfile.close()
+    else:
+        myfile.close()
+        myfile = open("data.txt", "w")
+        myfile.write(str(user1))
+        myfile.close()
+        myfile = open("data.txt", "r")
+        dic = myfile.read()
+        user1 = ast.literal_eval(dic)
+        user1[unique_gen] = {}
+        user1[unique_gen]['name'] = name_in
+        user1[unique_gen]['age'] = age_in
+        user1[unique_gen]['position'] = ''
+        user1[unique_gen]['address'] = address_in
+        user1[unique_gen]['salary'] = ''
+        user1[unique_gen]['attendance'] = 0
+        myfile.close()
+        myfile = open("data.txt", "w")
+        print("$$$$$$$$")
+        myfile.write(str(user1))
+        myfile.close()
+
+
+window.mainloop()
diff --git a/Python/Projects/README.md b/Python/Projects/README.md
new file mode 100644
index 00000000..d933f5d8
--- /dev/null
+++ b/Python/Projects/README.md
@@ -0,0 +1 @@
+## Put Python projects by making folder with project name.
diff --git a/Python/Projects/Steganography Project/README.MD b/Python/Projects/Steganography Project/README.MD
new file mode 100644
index 00000000..f98b025a
--- /dev/null
+++ b/Python/Projects/Steganography Project/README.MD	
@@ -0,0 +1,31 @@
+# Steganography
+
+> Steganography is the practice of concealing a message within another message or a physical object.  
+> In computing/electronic contexts, a computer file, message, image, or video is concealed within another file, message, image, or video.  
+> Stealing messages from main source is very common these days.  
+
+## Features:
+
+1. It'll help to encrypt the message even without letting any third-person knowing this image is actually a text message
+2. This is very easy to set up
+
+## Prerequisites
+
+1. PyCharm Community (preferred by me)
+2. pip installed
+3. An image & the message
+
+## Modules needed
+
+1. stepic  
+    `pip install stepic`  
+2. PIP  
+    `pip install PIP`  
+
+## How to run
+
+- **We've 2 files here in order to encrypt the image & then decrypt the message hidden inside that image :**
+    1. One for encrypting the file. File can be found [here](https://github.com/nitin30kumar/Programming-Basics/blob/main/Python/Projects/Steganography%20Project/encrypt_steganography.py)
+    2. One for decrypting the file. File can be found [here](https://github.com/nitin30kumar/Programming-Basics/blob/main/Python/Projects/Steganography%20Project/decrypt_steganography.py)
+
+__One information - File should be encrypted with .png extension only__
diff --git a/Python/Projects/Steganography Project/decrypt_steganography.py b/Python/Projects/Steganography Project/decrypt_steganography.py
new file mode 100644
index 00000000..be91f0c4
--- /dev/null
+++ b/Python/Projects/Steganography Project/decrypt_steganography.py	
@@ -0,0 +1,13 @@
+# Import necessary libraries
+from PIL import Image
+import stepic
+# Open the image from which the secret message is to be extracted:
+# image = Image.open("C:\\Users\\Nitin Kumar\\OneDrive\\Documents\\encrypted.png")
+img = input("Enter your picture with which you want to decrypt your message:\n")
+image = Image.open(img)
+# Pass the above image into the decode() function.
+# This function returns the secret message in the form of a string:
+decoded_msg = stepic.decode(image)
+print("Decryption Completed!\n")
+# Display the message
+print("Decoded Message:", decoded_msg)
diff --git a/Python/Projects/Steganography Project/encrypt_steganography.py b/Python/Projects/Steganography Project/encrypt_steganography.py
new file mode 100644
index 00000000..ec39077a
--- /dev/null
+++ b/Python/Projects/Steganography Project/encrypt_steganography.py	
@@ -0,0 +1,25 @@
+# Import necessary libraries
+from PIL import Image
+import stepic
+
+
+# image = input("Enter your picture inside which you want to encrypt your message\n")
+# new_img = input("Enter the new picture path where the output image should be placed:\n")
+
+# Open the image within which the secret message is to be stored:
+# img = Image.open("C:\\Users\\Nitin Kumar\\OneDrive\\Documents\\clg life-pics\\nitinPic.jpg")
+image = input("Enter your picture inside which you want to encrypt your message:\n")
+img = Image.open(image)
+# Specify the secret message:
+message = "Hey there! This is my encrypted message inside an image."
+# Convert the message into UTF-8 format:
+message = message.encode()
+# Pass the image and message into the encode() function.
+# This function returns a new image within which the message is hidden:
+encoded_img = stepic.encode(img, message)
+# Specify the name and extension for the new image generated:
+
+# encoded_img.save("C:\\Users\\Nitin Kumar\\OneDrive\\Documents\\encrypted.png")
+new_img = input("Enter the new picture path where the output image should be placed:\n")
+encoded_img.save(new_img)
+print("Encryption Completed!")
diff --git a/Python/Projects/Tkinter-todo-app/setup.txt b/Python/Projects/Tkinter-todo-app/setup.txt
new file mode 100644
index 00000000..291ad8cc
--- /dev/null
+++ b/Python/Projects/Tkinter-todo-app/setup.txt
@@ -0,0 +1,14 @@
+Python Version (>3.8)
+
+Module used -
+tkinter (8.6.9)
+
+---- pip install tk
+
+
+tkinter module is used to create a gui.
+
+steps - 
+1) install the tkinter module from the given command.
+2) open the code in the code editor.
+3) run the todoapp.py file.
\ No newline at end of file
diff --git a/Python/Projects/Tkinter-todo-app/todoapp.py b/Python/Projects/Tkinter-todo-app/todoapp.py
new file mode 100644
index 00000000..a5353e1f
--- /dev/null
+++ b/Python/Projects/Tkinter-todo-app/todoapp.py
@@ -0,0 +1,47 @@
+from tkinter import *
+
+root = Tk()
+root.geometry("800x550")
+root.resizable(False, False)
+root.title("Toothless todo")
+
+heading = Label(root, text="Todo app", font=("Goudy old style", 24, 'bold'), fg="#007AFF").pack()
+
+def add_task():
+    global textVar
+    if textVar.get() != "":
+        todo_tasks.insert("end", textVar.get())
+        textVar.set("")
+        root.update()
+        
+    else:
+        print("please enter")
+
+def del_task():
+    selected = todo_tasks.curselection()
+    if selected != ():
+        todo_tasks.delete(selected)
+        root.update()
+    else:
+        print("No")
+
+        
+ 
+textVar = StringVar()   
+    
+scroll = Scrollbar(root, orient="vertical")
+todo_tasks = Listbox(root, font="cursive 15", width="700", height="17", yscrollcommand=scroll.set)
+scroll.config(command=todo_tasks.yview)
+
+scroll.pack(side="right", fill="y")
+
+todo_tasks.pack(padx = 10)
+
+task_input = Entry(root, font="arial 16", textvariable=textVar)
+task_input.pack(fill=X, padx=15)
+add_btn = Button(root, text="Add task", command=add_task, font=("cursive", 15), fg="white", bg="green").place(x=80, y=500, width="200", height="40")
+del_btn = Button(root, text="Delete task", command=del_task, font=("cursive", 15), fg="white", bg="red").place(x=500, y=500, width="200", height="40")
+
+
+
+root.mainloop()
diff --git a/Python/Projects/Whatsapp_automation/Whatsapp_automation.py b/Python/Projects/Whatsapp_automation/Whatsapp_automation.py
new file mode 100644
index 00000000..a55ed180
--- /dev/null
+++ b/Python/Projects/Whatsapp_automation/Whatsapp_automation.py
@@ -0,0 +1,59 @@
+from selenium import webdriver
+import time
+
+PATH = 'PATH OF CHROME DRIVER LOCATED IN YOUR MACHINE'
+
+driver = webdriver.Chrome(PATH)
+driver.get('https://web.whatsapp.com/')
+print('----------------------------------------------------------------\n'
+      '|                  WELCOME TO WHATSAPP AUTOMATION             |\n'
+      '----------------------------------------------------------------\n')
+time.sleep(10)
+
+chatting = True
+while chatting:
+    time.sleep(2)
+    print('OPTIONS :\n'
+          '1.chat\n'
+          '00.Quit')
+    chat_option = input('Enter your choice : ')
+    if chat_option == '1':
+        select_chat = True
+        time.sleep(2)
+        while select_chat:
+            print('---------------\n'
+                  '|  ALL CHATS  |\n'
+                  '---------------')
+            time.sleep(2)
+            all_chats = driver.find_elements_by_xpath('/html/body/div/div[1]/div[1]/div[3]/div/div[2]/div[1]/div/div/div')
+            for i in range(len(all_chats)):
+                chatname = driver.find_element_by_xpath(f'/html/body/div/div[1]/div[1]/div[3]/div/div[2]/div[1]/div/div/div[{str(i+1)}]/div/div/div[2]/div[1]/div[1]/span').text
+                print(f' ==>  {i+1} . {chatname}')
+            print(f' ==>  00 . EXIT')
+            option = input('\nEnter the chat index given above : ')
+            time.sleep(2)
+            if option != '00':
+                driver.find_element_by_xpath(f'/html/body/div/div[1]/div[1]/div[3]/div/div[2]/div[1]/div/div/div[{str(int(option))}]').click()
+                in_chat = True
+                while in_chat:
+                    print('Type of messaging : \n'
+                          '  choice-1 : single message\n'
+                          '  choice-2 : spam with a message\n'
+                          '  choice-3 : BACK TO ALL CHATS')
+                    choice_in = input('Enter your choice(number) : ')
+                    if choice_in == '1':
+                        message = input('Enter a messsage : ')
+                        driver.find_element_by_xpath('/html/body/div/div[1]/div[1]/div[4]/div[1]/footer/div[1]/div[2]/div/div[2]').send_keys(f'{message} \n')
+                    elif choice_in == '2':
+                        message = input('Enter a messsage : ')
+                        number = int(input('Enter No.of messages : '))
+                        for i in range(number):
+                            driver.find_element_by_xpath('/html/body/div/div[1]/div[1]/div[4]/div[1]/footer/div[1]/div[2]/div/div[2]').send_keys(f'{message} \n')
+                    elif choice_in == '3':
+                        driver.get('https://web.whatsapp.com/')
+                        in_chat = False
+            else:
+                select_chat = False
+    else:
+        chatting = False
+        driver.quit()
diff --git a/Python/Projects/Whatsapp_automation/docs/1.jpg b/Python/Projects/Whatsapp_automation/docs/1.jpg
new file mode 100644
index 00000000..c19074ec
Binary files /dev/null and b/Python/Projects/Whatsapp_automation/docs/1.jpg differ
diff --git a/Python/Projects/Whatsapp_automation/docs/2.jpg b/Python/Projects/Whatsapp_automation/docs/2.jpg
new file mode 100644
index 00000000..d4539189
Binary files /dev/null and b/Python/Projects/Whatsapp_automation/docs/2.jpg differ
diff --git a/Python/Projects/Whatsapp_automation/docs/3.jpg b/Python/Projects/Whatsapp_automation/docs/3.jpg
new file mode 100644
index 00000000..9600656a
Binary files /dev/null and b/Python/Projects/Whatsapp_automation/docs/3.jpg differ
diff --git a/Python/Projects/Whatsapp_automation/docs/4.jpg b/Python/Projects/Whatsapp_automation/docs/4.jpg
new file mode 100644
index 00000000..3325c5b4
Binary files /dev/null and b/Python/Projects/Whatsapp_automation/docs/4.jpg differ
diff --git a/Python/Projects/Whatsapp_automation/docs/README.md b/Python/Projects/Whatsapp_automation/docs/README.md
new file mode 100644
index 00000000..4fa7c65b
--- /dev/null
+++ b/Python/Projects/Whatsapp_automation/docs/README.md
@@ -0,0 +1,30 @@
+# System Requirements 
+- Python Version (>3.8)
+
+> Modules used :
+- Selenium (version - 4.0.0)
+
+> Additional Tools :
+- Chrome WebDriver(version - 94.0.4606.61)
+# workflow
+
+``` bash
+First replace the PATH with the path of the chrome driver.
+```
+<img src='./1.jpg' />
+
+``` bash
+list of all contacts will appear on the command line
+```
+<img src='./2.jpg' />
+
+``` bash
+On choosing choice-1 : single message command
+```
+<img src='./3.jpg' />
+
+``` bash
+On choosing choice-2 : spamming with message command
+```
+<img src='./4.jpg' />
+
diff --git a/Python/Projects/Whatsapp_automation/setup.txt b/Python/Projects/Whatsapp_automation/setup.txt
new file mode 100644
index 00000000..6d2712cf
--- /dev/null
+++ b/Python/Projects/Whatsapp_automation/setup.txt
@@ -0,0 +1,6 @@
+Python Version (>3.8)
+Modules used :
+      - Selenium (version - 4.0.0)
+
+Additional Tools :
+      - Chrome WebDriver(version - 94.0.4606.61)
diff --git a/Python/Projects/calculator/calculator_QT5.py b/Python/Projects/calculator/calculator_QT5.py
new file mode 100644
index 00000000..63c62b11
--- /dev/null
+++ b/Python/Projects/calculator/calculator_QT5.py
@@ -0,0 +1,147 @@
+# to run this file on your IDE or editor the first thing to keep in mind is that 
+# your IDE or editor should be compatible in running python code.
+
+# the next thing is to have he PyQt5 library in your root libraries and if you don't 
+# have it than you can just surf the internet to do so.
+
+
+import sys
+
+from PyQt5.QtWidgets import QApplication
+from PyQt5.QtWidgets import QMainWindow
+from PyQt5.QtWidgets import QWidget
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import QGridLayout
+from PyQt5.QtWidgets import QLineEdit
+from PyQt5.QtWidgets import QPushButton
+from PyQt5.QtWidgets import QVBoxLayout
+from functools import partial
+
+__version__ = '0.1'
+__author__ = 'abhishek kumar'
+
+ERROR_MSG = 'ERROR'
+
+class PyCalcUI(QMainWindow):
+    def __init__(self):
+        super().__init__()
+        
+        self.setWindowTitle('Python Calculator')
+        self.setFixedSize(350,450)
+
+        self._centralWidget = QWidget(self)
+        self.setCentralWidget(self._centralWidget)
+
+        self.generalLayout = QVBoxLayout()
+        self._centralWidget.setLayout(self.generalLayout)
+
+        self._createDisplay()
+        self._createButtons()
+
+    def _createDisplay(self):
+
+        self.display = QLineEdit()
+
+        self.display.setFixedHeight(80)
+        self.display.setAlignment(Qt.AlignRight)
+        self.display.setReadOnly(True)
+
+        self.generalLayout.addWidget(self.display)
+
+    def _createButtons(self):
+        self.buttons = {}
+        buttonsLayout = QGridLayout()
+        buttons = {
+                    '7':(0,0),
+                    '8':(0,1),
+                    '9':(0,2),
+                    '/':(0,3),
+                    'C':(0,4),
+                    '4':(1,0),
+                    '5':(1,1),
+                    '6':(1,2),
+                    '*':(1,3),
+                    '(':(1,4),
+                    '1':(2,0),
+                    '2':(2,1),
+                    '3':(2,2),
+                    '-':(2,3),
+                    ')':(2,4),
+                    '0':(3,0),
+                    '00':(3,1),
+                    '.':(3,2),
+                    '+':(3,3),
+                    '=':(3,4),
+                }
+        
+        for btnText,pos in buttons.items():
+            self.buttons[btnText] = QPushButton(btnText)
+            self.buttons[btnText].setFixedSize(60,60)
+            buttonsLayout.addWidget(self.buttons[btnText],pos[0],pos[1])
+        self.generalLayout.addLayout(buttonsLayout)
+
+    def setDisplayText(self,text):
+
+        self.display.setText(text)
+        self.display.setFocus()
+    
+    def displayText(self):
+        return self.display.text()
+
+    def clearDisplay(self):
+        self.setDisplayText('')
+        
+class PyCalcCtrl:
+    def __init__(self,model,view):
+
+        self._view = view
+        self._evaluate = model
+
+        self._connectSignals()
+
+    def _calculateResult(self):
+
+        result = self._evaluate(expression = self._view.displayText())
+        self._view.setDisplayText(result)
+
+    def _buildExpression(self,sub_exp):
+
+        if self._view.displayText() == ERROR_MSG:
+            self._view.clearDisplay()
+
+        expression = self._view.displayText()+sub_exp
+        self._view.setDisplayText(expression)
+
+    def _connectSignals(self):
+
+        for btnText,btn in self._view.buttons.items():
+            if btnText not in {'=','C'}:
+                btn.clicked.connect(partial(self._buildExpression,btnText))
+        
+        self._view.buttons['='].clicked.connect(self._calculateResult)
+        self._view.display.returnPressed.connect(self._calculateResult)
+        self._view.buttons['C'].clicked.connect(self._view.clearDisplay)
+        
+def evaluateExpression(expression):
+    
+    try:
+        result = str(eval(expression,{},{}))
+    except Exception:
+        result = ERROR_MSG
+
+    return result
+
+def main():
+
+    pycalc = QApplication(sys.argv)
+    
+    view = PyCalcUI()
+    view.show()
+
+    model = evaluateExpression
+    PyCalcCtrl(model=model,view=view)
+   
+    sys.exit(pycalc.exec_())
+
+if __name__ =='__main__':
+    main()
\ No newline at end of file
diff --git a/Python/Projects/ftp_file_uploader/README b/Python/Projects/ftp_file_uploader/README
new file mode 100644
index 00000000..86cd3a92
--- /dev/null
+++ b/Python/Projects/ftp_file_uploader/README
@@ -0,0 +1,57 @@
+ _____ _____ ____    _____ ___   ___  _     
+|  ___|_   _|  _ \  |_   _/ _ \ / _ \| |    
+| |_    | | | |_) |   | || | | | | | | |    
+|  _|   | | |  __/    | || |_| | |_| | |___ 
+|_|     |_| |_|       |_| \___/ \___/|_____|
+  ## FTP-Tool is a tool that uploads specific files in an specific folder in ftp server 
+	made with <3 by Koddi Angelo Evangelista.
+
+  Note: The use of Python3 is highly preferred over Python2. Consider upgrading Python if
+				you find yourself still using Python2 today.
+
+	Note: This tool automates the installation of all dependencies.
+				So you don't need to manually install python modules. :)))
+
+	## SETTING UP THE FTP SERVER
+	- put your hostname in the configs.ini
+	- put your ideal working directory in the ftp server
+
+  ## SETTING UP AUTHENTICATION CREDENTIALS
+	- encrypt your username and password to base64 here: https://www.base64encode.org/
+	- put the encrypted credentials on the configs.ini
+
+	## SETTING UP GLOBAL VARIABLES
+	- In src/variables.py:
+		- Put the filenames(w/extension) of the file that you want to upload in FILES_TO_GATHER variable.
+		- Put the directory path where it belongs in the SPECIFIC_DIRECTORIES variable.
+			note: There is two SPECIFIC_DIRECTORIES variable with different path implementations.
+						One is for windows/DOS users and one is for unix/unix-like(linux and mac) users. Just uncomment the one that you are working with.
+
+
+  ## USAGE
+	- Run the main.py
+		sample usage:
+			- python3 main.py
+	- Wait until the task is completed and view the outputs in the outputs folder.
+
+
+	## FILE STRUCTURE
+	Note: don't try to modify the file structure of the system.
+
+	|_ outputs/
+	|  |_ {date}/ (contains the gathered files)
+	|  
+	|_ main.py (The one that runs the program.)
+	|_ src/ (Where all the business logic goes.)
+	|  |_ *.py
+	|_ configs.ini (Where you can put all the key-value pairs that need on the ftp athentication)
+
+	## ERRORS
+	  1.) 530 User cannot log in
+		      - login credentials is incorrect. make sure your username and password is correct.
+		2.) 'utf-8' codec can't decode byte 0xb1 in position 0: invalid start byte
+		      - make sure your username and password is encrypted in base64
+		3.) Error: Incorrect Argument!!
+				- your argument is incorrect. check the allowed arguments above.
+		4.) Error: Only 1 argument is allowed'
+				- you can use more than 1 argument in each run of the tool.
\ No newline at end of file
diff --git a/Python/Projects/ftp_file_uploader/configs.ini b/Python/Projects/ftp_file_uploader/configs.ini
new file mode 100644
index 00000000..6bbf833f
--- /dev/null
+++ b/Python/Projects/ftp_file_uploader/configs.ini
@@ -0,0 +1,7 @@
+[FTP]
+hostname = ftp.sample.com
+working_dir = _SAMPLE
+
+; BASE64 ENCRYPTED VALUES
+username = c2FtcGxl
+password = c2FtcGxl
\ No newline at end of file
diff --git a/Python/Projects/ftp_file_uploader/main.py b/Python/Projects/ftp_file_uploader/main.py
new file mode 100644
index 00000000..318ce1cf
--- /dev/null
+++ b/Python/Projects/ftp_file_uploader/main.py
@@ -0,0 +1,30 @@
+import sys
+import subprocess
+import pkg_resources
+
+# Install all the project dependencies
+
+
+def check_dependencies():
+    required = {'pyfiglet', 'colorama'}
+    installed = {pkg.key for pkg in pkg_resources.working_set}
+    missing = required - installed
+
+    if missing:
+        python = sys.executable
+        print('installing dependencies....')
+        subprocess.check_call([python, '-m', 'pip', 'install', *missing])
+
+
+if __name__ == '__main__':
+    try:
+        from src.ftp_upload import *
+    except ModuleNotFoundError:
+        check_dependencies()
+    finally:
+        from src.ftp_upload import *
+        try:
+            folder_upload()
+        except Exception as error:
+            print(Fore.RED, error)
+            print(Fore.GREEN, '---> Go to the README file for the possible solution.')
diff --git a/Python/Projects/ftp_file_uploader/src/__pycache__/ftp_upload.cpython-39.pyc b/Python/Projects/ftp_file_uploader/src/__pycache__/ftp_upload.cpython-39.pyc
new file mode 100644
index 00000000..6ff73212
Binary files /dev/null and b/Python/Projects/ftp_file_uploader/src/__pycache__/ftp_upload.cpython-39.pyc differ
diff --git a/Python/Projects/ftp_file_uploader/src/__pycache__/variables.cpython-39.pyc b/Python/Projects/ftp_file_uploader/src/__pycache__/variables.cpython-39.pyc
new file mode 100644
index 00000000..be4138a2
Binary files /dev/null and b/Python/Projects/ftp_file_uploader/src/__pycache__/variables.cpython-39.pyc differ
diff --git a/Python/Projects/ftp_file_uploader/src/ftp_upload.py b/Python/Projects/ftp_file_uploader/src/ftp_upload.py
new file mode 100644
index 00000000..35718eb5
--- /dev/null
+++ b/Python/Projects/ftp_file_uploader/src/ftp_upload.py
@@ -0,0 +1,114 @@
+from configparser import ConfigParser
+from src.variables import *
+import os
+import time
+import sys
+import ftplib
+import base64
+import shutil
+import pyfiglet
+import ntpath
+from colorama import Fore
+from os.path import expanduser
+
+
+def folder_upload(argument=''):
+    # PRINT HEADER
+    header = pyfiglet.figlet_format("FTP TOOL")
+    print(header)
+
+    there_is_files_to_be_uploaded = gather_files(argument)
+    if there_is_files_to_be_uploaded == True:
+        ftp_upload()
+    else:
+        print('THere is no file to be uploaded')
+
+
+def ftp_upload():
+    config = ConfigParser()
+    config.read('./configs.ini')
+
+    HOSTNAME = config['FTP']['hostname']
+    DIRECTORY = '/' + config['FTP']['working_dir']
+    USERNAME = decode_base64(config['FTP']['username'])
+    PASSWORD = decode_base64(config['FTP']['password'])
+
+    try:
+        with ftplib.FTP_TLS(HOSTNAME, USERNAME, PASSWORD, encoding='ISO-8859-1') as ftp:
+            ftp.cwd(DIRECTORY)
+            if not OUTPUT_DIR in ftp.nlst():
+                ftp.mkd(OUTPUT_DIR)
+            ftp.cwd(OUTPUT_DIR)
+
+            path = PARENT_DIR + OUTPUT_DIR
+
+            files = os.listdir(path)
+            print(Fore.MAGENTA, 'Uploading files to the FTP Server...')
+            for filename in files:
+                with open(filename, "rb") as file:
+                    # use FTP's STOR command to upload the file
+                    ftp.storbinary(f"STOR {filename}", file)
+    except Exception as error:
+        print(Fore.RED, error)
+        print(Fore.GREEN, '---> Go to the README file for the possible solution.')
+        return
+
+    print(Fore.GREEN, 'files succesfully uploaded')
+    print(Fore.GREEN, '--> VIEW ALL THE OUTPUTS IN THE OUTPUTS FOLDER <--')
+
+
+def gather_files(argument):
+    # CREATING THE OUTPUT FOLDER
+    path = PARENT_DIR + OUTPUT_DIR
+    try:
+        os.mkdir(path)
+    except FileExistsError:
+        # directory already exists, clean the directory
+        for filename in os.listdir(path):
+            file_path = os.path.join(path, filename)
+            try:
+                if os.path.isfile(file_path) or os.path.islink(file_path):
+                    os.unlink(file_path)
+                elif os.path.isdir(file_path):
+                    shutil.rmtree(file_path)
+            except Exception as e:
+                print('Failed to delete %s. Reason: %s' % (file_path, e))
+            return find_files_in_specific_directory(path)
+
+
+def find_files_in_specific_directory(path):
+    gathered_files = []
+
+    # GATHER THE NEEDED FILES IN EACH SPECIFIC DIRECTORIES
+    for directory in SPECIFIC_DIRECTORIES.items():
+        directory_path = directory[1]
+        print(Fore.MAGENTA, f'SCANNING: {directory_path}')
+        if os.path.isdir(directory_path):
+            directory_files = os.listdir(directory_path)
+            for file in directory_files:
+                if file in FILES_TO_GATHER:
+                    gathered_files.append(os.path.join(directory_path, file))
+        else:
+            print(Fore.RED, f'{directory_path} is not existing..')
+
+    # COPY ALL THE GATHERED FILES IN THE OUTPUT FOLDER
+    if len(gathered_files):
+        print(Fore.MAGENTA, 'Copying files to the output directory...')
+        print(Fore.RESET, '', end="")
+        for file in gathered_files:
+            # filename = file.split('\\')[-1]
+            filename = ntpath.basename(file)
+            output_file = os.path.join(path, filename)
+            print(output_file)
+            shutil.copyfile(file, output_file)
+        return True
+    else:
+        print(Fore.RED, 'THERE ARE NO FILES TO BE UPLOADED!')
+        return False
+
+
+def decode_base64(value):
+    val = " " + value + " =="
+    base64_bytes = val.encode("utf-8")
+    string_bytes = base64.b64decode(base64_bytes)
+    return string_bytes.decode("utf-8")
diff --git a/Python/Projects/ftp_file_uploader/src/variables.py b/Python/Projects/ftp_file_uploader/src/variables.py
new file mode 100644
index 00000000..c1507e9d
--- /dev/null
+++ b/Python/Projects/ftp_file_uploader/src/variables.py
@@ -0,0 +1,26 @@
+from datetime import datetime, timedelta
+
+# GET THE DATE YESTERDAY
+DATE = datetime.now()
+
+# TURN THE DATETIME TO STRING
+DATE = datetime.strftime(DATE, '%Y-%m-%d')
+
+PARENT_DIR = './outputs/'
+OUTPUT_DIR = datetime.strftime(DATE, '%m-%d-%Y(%H_%M)')
+FILES_TO_GATHER = [
+    'sample1.csv',
+    'sample2.xlsx',
+    'sample3.txt',
+]
+
+# for windows/DOS users
+# SPECIFIC_DIRECTORIES = {
+#   'dir1': r"D:\AUTOMATION\GITHUB\samples\",
+#   'dir2': r"D:\AUTOMATION\LEETCODE\samples\"
+# }
+
+# for unix/ unix-like users (mac and linux)
+SPECIFIC_DIRECTORIES = {
+    'dir1': r'/home/use/Code/work/AUTOMATION/GITHUB/samples/',
+}
diff --git a/Python/Projects/login-form/bg_img.jpg b/Python/Projects/login-form/bg_img.jpg
new file mode 100644
index 00000000..e2329e30
Binary files /dev/null and b/Python/Projects/login-form/bg_img.jpg differ
diff --git a/Python/Projects/login-form/login.py b/Python/Projects/login-form/login.py
new file mode 100644
index 00000000..35f9c7b6
--- /dev/null
+++ b/Python/Projects/login-form/login.py
@@ -0,0 +1,78 @@
+from tkinter import *
+from tkinter import messagebox
+from PIL import ImageTk, Image
+
+
+
+def submit():
+    print("submitted")
+    
+def forget():
+    print("forget")
+    
+is_on = True
+    
+class Login:
+    def __init__(self, root):
+        self.root = root
+        self.root.geometry("1199x600+200+100")
+        self.root.title("Login")
+        self.root.resizable(False, False)
+        
+        # Image
+        self.bg = Image.open("bg_img.jpg")
+        
+        resized = self.bg.resize((1199,600), Image.ANTIALIAS)
+        self.new_bg_img= ImageTk.PhotoImage(resized)
+        self.bg_img = Label(self.root, image=self.new_bg_img).pack()
+        
+        
+        
+        # Frame
+        f_login = Frame(self.root, bg='white', relief=RAISED)
+        f_login.place(x=328, y=99, height=410, width=545)
+        
+        label_Head = Label(f_login, text="Login Here!", font="Impact 30 bold", fg="#d77377", bg="white").place(x=90,y=30)
+        label_desc = Label(f_login, text="Hey welcome back!", font=("goudy old style", 15 , "bold"), fg="grey", bg="white").place(x=110,y=80)
+        
+        
+        label_User = Label(f_login, text="Username:", font="Impact 20 bold", fg="#d77377", bg="white").place(x=40,y=150)
+        self.txt_user = Entry(f_login, font="cosmic 15", bg="#dcdcdc")
+        self.txt_user.place(x=210,y=160)
+        label_pass = Label(f_login, text="Password:", font=("Impact", 20 , "bold"), fg="#d77377", bg="white").place(x=40,y=200)
+        self.txt_pass = Entry(f_login, font="cosmic 15", bg="#dcdcdc", show='*')
+        self.txt_pass.place(x=210,y=210, width=225, height=30)
+        self.btn_eye = Button(self.txt_pass, text="s", command=self.show,  cursor="hand2", bd=0).pack(side=RIGHT, ipadx=5)
+        
+        forget_btn = Button(f_login, text="Forget password.", command=forget,cursor="hand2", font="sansherif 15", fg="#d77377", bg="white",bd=0, relief=SUNKEN).place(x=130, y=290)
+        submit_btn = Button(f_login, text="Submit", command=self.login_msg, cursor="hand2", font="cosmic 15", fg="white" , bg="#d77377", relief=RAISED).place(x=360, y=290, width=120, height=40)
+        
+    
+    def login_msg(self):
+        if self.txt_user.get() == "" or self.txt_pass.get() == "":
+             messagebox.showerror("error", "All fields are required.", parent=self.root)
+        elif self.txt_user.get()!="user123" or self.txt_pass.get()!="password@123":
+             messagebox.showerror("error", "username/password invalid!", parent=self.root)
+        else:
+            user = self.txt_user.get()
+            self.root.destroy()
+            root=Tk()
+            root.geometry("1199x600+200+100")
+            Lable_home = Label(root, text=f"Welcome, {user}", font="Impact 20 bold", fg="#d37737").pack()
+            
+            logOut_btn = Button(root, text="Logout", font="sans-sherif 10", fg="white", bg="#d37737").place(x=1000, y=10, width=100, height=40)
+            root.mainloop()
+            
+        # show password 
+    def show(self):
+        global is_on
+        if is_on:
+            self.txt_pass.config(show="")
+            is_on = False
+        else:
+            self.txt_pass.config(show="*")
+            is_on = True
+            
+root = Tk()
+obj = Login(root)
+root.mainloop()
diff --git a/Python/Projects/login-form/setup.txt b/Python/Projects/login-form/setup.txt
new file mode 100644
index 00000000..88368d3a
--- /dev/null
+++ b/Python/Projects/login-form/setup.txt
@@ -0,0 +1,21 @@
+Python Version (>3.8)
+
+Module used -
+tkinter (8.6.9)
+Pillow (8.1.2)
+
+
+---- pip install tk
+---- pip install Pillow
+
+
+tkinter module is used to create a gui.
+Pillow module imported as PIL is used to add image in the gui
+
+-- install the given python modules above. 
+-- Open this folder vs code or any other IDE and click run.
+-- enter username and pasword. 
+username = user123
+password = password@123
+-- from the 's' button in the password field you can view the entered password
+-- click on submit.
diff --git a/Python/Projects/text to audio converter/README.md b/Python/Projects/text to audio converter/README.md
new file mode 100644
index 00000000..b69c7694
--- /dev/null
+++ b/Python/Projects/text to audio converter/README.md	
@@ -0,0 +1,17 @@
+# A simple text to audio converter using python.
+It is a simple project to convert text (.txt) files to audio (.mp3) using python3.
+
+## Instructions
+You will need following applications/ packages installed to run it in your machine:
+
+1. python3 or the latest version of python you can simply download it from python.org and install it and check it as python --version
+
+2. pip3 or the latest version of pip However pip is directly installed while installing python, if not then manually install it and check it as pip --version
+
+3.gTTS :use the command below to install it:
+
+pip install gTTS
+
+Note:- The Project is best implemented in a professionali IDE like IntelliJ or PyCharm. 
+
+And you are ready to go!
diff --git a/Python/Projects/text to audio converter/text_to_audio.py b/Python/Projects/text to audio converter/text_to_audio.py
new file mode 100644
index 00000000..563bc156
--- /dev/null
+++ b/Python/Projects/text to audio converter/text_to_audio.py	
@@ -0,0 +1,24 @@
+#Convert text file into audio
+
+from gtts import gTTS
+import os
+
+print("Enter the full path of your text file to convert into audio: ")
+location = input() #Taking the path of text file as input from user
+
+basename = os.path.basename(location) #Getting filename (with extension i.e, filename.txt) to produce output as filename.mp3
+basename = basename[:-4] # removing '.txt' extension from filename to produce output result as filename.mp3
+
+yourFile = open(location, "r")
+myText = yourFile.read().replace("\n", " ") #replaces new line (\n) of text with a space ( )
+
+language = 'en'     #to convert text in English to English audio
+#if your file is in other language and want the output audio in that language replace 'en' with your
+#language example: 'ne' for Nepali, 'fr' for French and so on
+output = gTTS(text=myText, lang=language, slow=False)
+
+print("Converting text to audio...")
+output.save(basename + ".mp3")
+
+yourFile.close()
+print("Finally! Your text is converted to audio.")
diff --git a/Python/Projects/tkinter-calculator/cal.py b/Python/Projects/tkinter-calculator/cal.py
new file mode 100644
index 00000000..fd51f347
--- /dev/null
+++ b/Python/Projects/tkinter-calculator/cal.py
@@ -0,0 +1,147 @@
+from tkinter import *
+from tkinter import messagebox
+
+SCREEN = Tk()
+
+
+# variable
+hist = []
+# method
+def click(event):
+    global cal_val
+    text = event.widget.cget("text")
+    if text == 'C':
+        cal_val.set("")
+        inp.update()
+        
+    elif text == '=':
+        if cal_val.get() != "":
+            if cal_val.get().isdigit():
+                value = int(cal_val.get())
+            else:
+                value = eval(inp.get())
+            cal_val.set(value)
+            hist.append(value)
+            print(hist)
+            inp.update()
+        else:
+            pass
+    
+    elif text == "\u232b":
+        val_len = len(cal_val.get())
+        inp.delete(val_len - 1, 'end')
+        
+    else:
+        cal_val.set(cal_val.get()+ text)
+        
+
+def histr():
+    root = Tk()
+    i =0
+    l = Listbox ( root )
+    for his in hist:
+        l.insert(i, his)
+        i+=1
+    l.pack()
+    root.mainloop()
+
+# main screen
+SCREEN.geometry("360x560")
+a,b = 360,560
+SCREEN.minsize(a,b)
+SCREEN.maxsize(a,b)
+
+# title and icon
+SCREEN.title("Toothless Calculator")
+
+# Heading
+heading = Label(text="Toothless Calculator", font="arial 14 bold")
+heading.pack(fill="x")
+
+# INPUT
+cal_val = StringVar()
+cal_val.set("")
+inp = Entry(SCREEN, textvar= cal_val, justify='right', font="lucida 30 bold", relief=RIDGE)
+inp.pack(fill="x", ipady=5)
+
+# frames
+f_maintop = Frame(SCREEN, bg='lightblue')
+b= Button(f_maintop, text="C", padx= 10,  font="lucida 25 bold")
+b.pack(side=LEFT, padx=10, pady= 10)
+b.bind("<Button-1>", click)
+b = Button(f_maintop, text="\u232b", padx= 8,  font="lucida 25 bold")
+b.pack(side=LEFT, padx=10, pady= 10)
+b.bind("<Button-1>", click)
+b = Button(f_maintop, text="/", padx= 10,  font="lucida 25 bold")
+b.pack(side=LEFT, padx=10, pady= 10)
+b.bind("<Button-1>", click)
+b = Button(f_maintop, text="*", padx= 10,  font="lucida 25 bold")
+b.pack(side=LEFT, padx=10, pady= 10)
+b.bind("<Button-1>", click)
+f_maintop.pack(pady=5)
+
+
+# top
+f1_top = Frame(SCREEN, bg='lightblue')
+b= Button(f1_top, text="7", padx= 10,  font="lucida 25 bold")
+b.pack(side=LEFT, padx=10, pady= 10)
+b.bind("<Button-1>", click)
+b = Button(f1_top, text="8", padx= 10,  font="lucida 25 bold")
+b.pack(side=LEFT, padx=10, pady= 10)
+b.bind("<Button-1>", click)
+b = Button(f1_top, text="9", padx= 10,  font="lucida 25 bold")
+b.pack(side=LEFT, padx=10, pady= 10)
+b.bind("<Button-1>", click)
+b = Button(f1_top, text="-", padx= 10,  font="lucida 25 bold")
+b.pack(side=LEFT, padx=10, pady= 10)
+b.bind("<Button-1>", click)
+f1_top.pack(pady=5)
+
+# mid
+f2_mid = Frame(SCREEN, bg='lightblue')
+b= Button(f2_mid, text="4", padx= 10,  font="lucida 25 bold")
+b.pack(side=LEFT, padx=10, pady= 10)
+b.bind("<Button-1>", click)
+b = Button(f2_mid, text="5", padx= 10,  font="lucida 25 bold")
+b.pack(side=LEFT, padx=10, pady= 10)
+b.bind("<Button-1>", click)
+b = Button(f2_mid, text="6", padx= 10,  font="lucida 25 bold")
+b.pack(side=LEFT, padx=10, pady= 10)
+b.bind("<Button-1>", click)
+b = Button(f2_mid, text="+", padx= 10,  font="lucida 25 bold")
+b.pack(side=LEFT, padx=10, pady= 10)
+b.bind("<Button-1>", click)
+f2_mid.pack(pady=5)
+
+# bottom
+f3_bottom = Frame(SCREEN, bg='lightblue')
+b= Button(f3_bottom, text="1", padx= 10,  font="lucida 25 bold")
+b.pack(side=LEFT, padx=10, pady= 10)
+b.bind("<Button-1>", click)
+b = Button(f3_bottom, text="2", padx= 10,  font="lucida 25 bold")
+b.pack(side=LEFT, padx=10, pady= 10)
+b.bind("<Button-1>", click)
+b = Button(f3_bottom, text="3", padx= 10,  font="lucida 25 bold")
+b.pack(side=LEFT, padx=10, pady= 10)
+b.bind("<Button-1>", click)
+b_eq = Button(f3_bottom, text="=", padx= 10,  font="lucida 25 bold")
+b_eq.pack(side=LEFT, padx=10, pady= 10)
+b_eq.bind("<Button-1>", click)
+f3_bottom.pack(pady=5)
+
+# main_end
+f4_end = Frame(SCREEN, bg='lightblue')
+b= Button(f4_end, text="0", padx= 10,  font="lucida 25 bold")
+b.pack(side=LEFT, padx=10, pady= 10)
+b.bind("<Button-1>", click)
+b = Button(f4_end, text="00", padx= 10,  font="lucida 25 bold")
+b.pack(side=LEFT, padx=10, pady= 10)
+b.bind("<Button-1>", click)
+b = Button(f4_end, text=".", padx= 10,  font="lucida 25 bold")
+b.pack(side=LEFT, padx=10, pady= 10)
+b.bind("<Button-1>", click)
+b1 = Button(f4_end, text="Hist", command=histr , padx= 10,  font="lucida 25 bold").pack(side=LEFT, padx=10, pady= 10)
+f4_end.pack(pady=5)
+
+
+SCREEN.mainloop()
diff --git a/Python/Projects/tkinter-calculator/setup.txt b/Python/Projects/tkinter-calculator/setup.txt
new file mode 100644
index 00000000..f75e8721
--- /dev/null
+++ b/Python/Projects/tkinter-calculator/setup.txt
@@ -0,0 +1,14 @@
+Python Version (>3.8)
+
+Module used -
+tkinter (8.6.9)
+
+---- pip install tk
+
+
+tkinter module is used to create a gui.
+
+-- download the above given module
+-- open the cal.py 
+-- click on run. 
+-- start calculating and from Hist button you can view the results history in list format.
\ No newline at end of file
diff --git a/Python/Projects/web_scraping/web_scraping.ipynb b/Python/Projects/web_scraping/web_scraping.ipynb
new file mode 100644
index 00000000..4bc8508f
--- /dev/null
+++ b/Python/Projects/web_scraping/web_scraping.ipynb
@@ -0,0 +1,751 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "933925a7",
+   "metadata": {},
+   "source": [
+    "# Web Scraping\n",
+    "**this is a simple illustration of web scraping for http://quotes.toscrape.com/. so follow along the steps and \n",
+    "enjoy learning :) **\n",
+    "\n",
+    "you can run this file in jupiter notebook in anaconda or you can just copy the code and paste them into your IDE or editor.\n",
+    "but be carefull you might need to install some libraries to make this program work.\n",
+    "you can surf internet for more instruction for installing libraries in python.\n",
+    "\n",
+    "## Go through the Tasks Below"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "f1d15078",
+   "metadata": {},
+   "source": [
+    "**TASK: Import any libraries you think you'll need to scrape a website.**"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "id": "102d1f1b",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# CODE HERE"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "id": "f264e147",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import requests\n",
+    "import bs4"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "dbb1ff00",
+   "metadata": {},
+   "source": [
+    "**TASK: Use requests library and BeautifulSoup to connect to http://quotes.toscrape.com/ and get the HMTL text from the homepage.**"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 30,
+   "id": "6cba488d",
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "# CODE HERE"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 31,
+   "id": "4ae1ca9e",
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "res = requests.get(\"http://quotes.toscrape.com/\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 32,
+   "id": "77858b5d",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'<!DOCTYPE html>\\n<html lang=\"en\">\\n<head>\\n\\t<meta charset=\"UTF-8\">\\n\\t<title>Quotes to Scrape</title>\\n    <link rel=\"stylesheet\" href=\"/static/bootstrap.min.css\">\\n    <link rel=\"stylesheet\" href=\"/static/main.css\">\\n</head>\\n<body>\\n    <div class=\"container\">\\n        <div class=\"row header-box\">\\n            <div class=\"col-md-8\">\\n                <h1>\\n                    <a href=\"/\" style=\"text-decoration: none\">Quotes to Scrape</a>\\n                </h1>\\n            </div>\\n            <div class=\"col-md-4\">\\n                <p>\\n                \\n                    <a href=\"/login\">Login</a>\\n                \\n                </p>\\n            </div>\\n        </div>\\n    \\n\\n<div class=\"row\">\\n    <div class=\"col-md-8\">\\n\\n    <div class=\"quote\" itemscope itemtype=\"http://schema.org/CreativeWork\">\\n        <span class=\"text\" itemprop=\"text\">“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”</span>\\n        <span>by <small class=\"author\" itemprop=\"author\">Albert Einstein</small>\\n        <a href=\"/author/Albert-Einstein\">(about)</a>\\n        </span>\\n        <div class=\"tags\">\\n            Tags:\\n            <meta class=\"keywords\" itemprop=\"keywords\" content=\"change,deep-thoughts,thinking,world\" /    > \\n            \\n            <a class=\"tag\" href=\"/tag/change/page/1/\">change</a>\\n            \\n            <a class=\"tag\" href=\"/tag/deep-thoughts/page/1/\">deep-thoughts</a>\\n            \\n            <a class=\"tag\" href=\"/tag/thinking/page/1/\">thinking</a>\\n            \\n            <a class=\"tag\" href=\"/tag/world/page/1/\">world</a>\\n            \\n        </div>\\n    </div>\\n\\n    <div class=\"quote\" itemscope itemtype=\"http://schema.org/CreativeWork\">\\n        <span class=\"text\" itemprop=\"text\">“It is our choices, Harry, that show what we truly are, far more than our abilities.”</span>\\n        <span>by <small class=\"author\" itemprop=\"author\">J.K. Rowling</small>\\n        <a href=\"/author/J-K-Rowling\">(about)</a>\\n        </span>\\n        <div class=\"tags\">\\n            Tags:\\n            <meta class=\"keywords\" itemprop=\"keywords\" content=\"abilities,choices\" /    > \\n            \\n            <a class=\"tag\" href=\"/tag/abilities/page/1/\">abilities</a>\\n            \\n            <a class=\"tag\" href=\"/tag/choices/page/1/\">choices</a>\\n            \\n        </div>\\n    </div>\\n\\n    <div class=\"quote\" itemscope itemtype=\"http://schema.org/CreativeWork\">\\n        <span class=\"text\" itemprop=\"text\">“There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”</span>\\n        <span>by <small class=\"author\" itemprop=\"author\">Albert Einstein</small>\\n        <a href=\"/author/Albert-Einstein\">(about)</a>\\n        </span>\\n        <div class=\"tags\">\\n            Tags:\\n            <meta class=\"keywords\" itemprop=\"keywords\" content=\"inspirational,life,live,miracle,miracles\" /    > \\n            \\n            <a class=\"tag\" href=\"/tag/inspirational/page/1/\">inspirational</a>\\n            \\n            <a class=\"tag\" href=\"/tag/life/page/1/\">life</a>\\n            \\n            <a class=\"tag\" href=\"/tag/live/page/1/\">live</a>\\n            \\n            <a class=\"tag\" href=\"/tag/miracle/page/1/\">miracle</a>\\n            \\n            <a class=\"tag\" href=\"/tag/miracles/page/1/\">miracles</a>\\n            \\n        </div>\\n    </div>\\n\\n    <div class=\"quote\" itemscope itemtype=\"http://schema.org/CreativeWork\">\\n        <span class=\"text\" itemprop=\"text\">“The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.”</span>\\n        <span>by <small class=\"author\" itemprop=\"author\">Jane Austen</small>\\n        <a href=\"/author/Jane-Austen\">(about)</a>\\n        </span>\\n        <div class=\"tags\">\\n            Tags:\\n            <meta class=\"keywords\" itemprop=\"keywords\" content=\"aliteracy,books,classic,humor\" /    > \\n            \\n            <a class=\"tag\" href=\"/tag/aliteracy/page/1/\">aliteracy</a>\\n            \\n            <a class=\"tag\" href=\"/tag/books/page/1/\">books</a>\\n            \\n            <a class=\"tag\" href=\"/tag/classic/page/1/\">classic</a>\\n            \\n            <a class=\"tag\" href=\"/tag/humor/page/1/\">humor</a>\\n            \\n        </div>\\n    </div>\\n\\n    <div class=\"quote\" itemscope itemtype=\"http://schema.org/CreativeWork\">\\n        <span class=\"text\" itemprop=\"text\">“Imperfection is beauty, madness is genius and it&#39;s better to be absolutely ridiculous than absolutely boring.”</span>\\n        <span>by <small class=\"author\" itemprop=\"author\">Marilyn Monroe</small>\\n        <a href=\"/author/Marilyn-Monroe\">(about)</a>\\n        </span>\\n        <div class=\"tags\">\\n            Tags:\\n            <meta class=\"keywords\" itemprop=\"keywords\" content=\"be-yourself,inspirational\" /    > \\n            \\n            <a class=\"tag\" href=\"/tag/be-yourself/page/1/\">be-yourself</a>\\n            \\n            <a class=\"tag\" href=\"/tag/inspirational/page/1/\">inspirational</a>\\n            \\n        </div>\\n    </div>\\n\\n    <div class=\"quote\" itemscope itemtype=\"http://schema.org/CreativeWork\">\\n        <span class=\"text\" itemprop=\"text\">“Try not to become a man of success. Rather become a man of value.”</span>\\n        <span>by <small class=\"author\" itemprop=\"author\">Albert Einstein</small>\\n        <a href=\"/author/Albert-Einstein\">(about)</a>\\n        </span>\\n        <div class=\"tags\">\\n            Tags:\\n            <meta class=\"keywords\" itemprop=\"keywords\" content=\"adulthood,success,value\" /    > \\n            \\n            <a class=\"tag\" href=\"/tag/adulthood/page/1/\">adulthood</a>\\n            \\n            <a class=\"tag\" href=\"/tag/success/page/1/\">success</a>\\n            \\n            <a class=\"tag\" href=\"/tag/value/page/1/\">value</a>\\n            \\n        </div>\\n    </div>\\n\\n    <div class=\"quote\" itemscope itemtype=\"http://schema.org/CreativeWork\">\\n        <span class=\"text\" itemprop=\"text\">“It is better to be hated for what you are than to be loved for what you are not.”</span>\\n        <span>by <small class=\"author\" itemprop=\"author\">André Gide</small>\\n        <a href=\"/author/Andre-Gide\">(about)</a>\\n        </span>\\n        <div class=\"tags\">\\n            Tags:\\n            <meta class=\"keywords\" itemprop=\"keywords\" content=\"life,love\" /    > \\n            \\n            <a class=\"tag\" href=\"/tag/life/page/1/\">life</a>\\n            \\n            <a class=\"tag\" href=\"/tag/love/page/1/\">love</a>\\n            \\n        </div>\\n    </div>\\n\\n    <div class=\"quote\" itemscope itemtype=\"http://schema.org/CreativeWork\">\\n        <span class=\"text\" itemprop=\"text\">“I have not failed. I&#39;ve just found 10,000 ways that won&#39;t work.”</span>\\n        <span>by <small class=\"author\" itemprop=\"author\">Thomas A. Edison</small>\\n        <a href=\"/author/Thomas-A-Edison\">(about)</a>\\n        </span>\\n        <div class=\"tags\">\\n            Tags:\\n            <meta class=\"keywords\" itemprop=\"keywords\" content=\"edison,failure,inspirational,paraphrased\" /    > \\n            \\n            <a class=\"tag\" href=\"/tag/edison/page/1/\">edison</a>\\n            \\n            <a class=\"tag\" href=\"/tag/failure/page/1/\">failure</a>\\n            \\n            <a class=\"tag\" href=\"/tag/inspirational/page/1/\">inspirational</a>\\n            \\n            <a class=\"tag\" href=\"/tag/paraphrased/page/1/\">paraphrased</a>\\n            \\n        </div>\\n    </div>\\n\\n    <div class=\"quote\" itemscope itemtype=\"http://schema.org/CreativeWork\">\\n        <span class=\"text\" itemprop=\"text\">“A woman is like a tea bag; you never know how strong it is until it&#39;s in hot water.”</span>\\n        <span>by <small class=\"author\" itemprop=\"author\">Eleanor Roosevelt</small>\\n        <a href=\"/author/Eleanor-Roosevelt\">(about)</a>\\n        </span>\\n        <div class=\"tags\">\\n            Tags:\\n            <meta class=\"keywords\" itemprop=\"keywords\" content=\"misattributed-eleanor-roosevelt\" /    > \\n            \\n            <a class=\"tag\" href=\"/tag/misattributed-eleanor-roosevelt/page/1/\">misattributed-eleanor-roosevelt</a>\\n            \\n        </div>\\n    </div>\\n\\n    <div class=\"quote\" itemscope itemtype=\"http://schema.org/CreativeWork\">\\n        <span class=\"text\" itemprop=\"text\">“A day without sunshine is like, you know, night.”</span>\\n        <span>by <small class=\"author\" itemprop=\"author\">Steve Martin</small>\\n        <a href=\"/author/Steve-Martin\">(about)</a>\\n        </span>\\n        <div class=\"tags\">\\n            Tags:\\n            <meta class=\"keywords\" itemprop=\"keywords\" content=\"humor,obvious,simile\" /    > \\n            \\n            <a class=\"tag\" href=\"/tag/humor/page/1/\">humor</a>\\n            \\n            <a class=\"tag\" href=\"/tag/obvious/page/1/\">obvious</a>\\n            \\n            <a class=\"tag\" href=\"/tag/simile/page/1/\">simile</a>\\n            \\n        </div>\\n    </div>\\n\\n    <nav>\\n        <ul class=\"pager\">\\n            \\n            \\n            <li class=\"next\">\\n                <a href=\"/page/2/\">Next <span aria-hidden=\"true\">&rarr;</span></a>\\n            </li>\\n            \\n        </ul>\\n    </nav>\\n    </div>\\n    <div class=\"col-md-4 tags-box\">\\n        \\n            <h2>Top Ten tags</h2>\\n            \\n            <span class=\"tag-item\">\\n            <a class=\"tag\" style=\"font-size: 28px\" href=\"/tag/love/\">love</a>\\n            </span>\\n            \\n            <span class=\"tag-item\">\\n            <a class=\"tag\" style=\"font-size: 26px\" href=\"/tag/inspirational/\">inspirational</a>\\n            </span>\\n            \\n            <span class=\"tag-item\">\\n            <a class=\"tag\" style=\"font-size: 26px\" href=\"/tag/life/\">life</a>\\n            </span>\\n            \\n            <span class=\"tag-item\">\\n            <a class=\"tag\" style=\"font-size: 24px\" href=\"/tag/humor/\">humor</a>\\n            </span>\\n            \\n            <span class=\"tag-item\">\\n            <a class=\"tag\" style=\"font-size: 22px\" href=\"/tag/books/\">books</a>\\n            </span>\\n            \\n            <span class=\"tag-item\">\\n            <a class=\"tag\" style=\"font-size: 14px\" href=\"/tag/reading/\">reading</a>\\n            </span>\\n            \\n            <span class=\"tag-item\">\\n            <a class=\"tag\" style=\"font-size: 10px\" href=\"/tag/friendship/\">friendship</a>\\n            </span>\\n            \\n            <span class=\"tag-item\">\\n            <a class=\"tag\" style=\"font-size: 8px\" href=\"/tag/friends/\">friends</a>\\n            </span>\\n            \\n            <span class=\"tag-item\">\\n            <a class=\"tag\" style=\"font-size: 8px\" href=\"/tag/truth/\">truth</a>\\n            </span>\\n            \\n            <span class=\"tag-item\">\\n            <a class=\"tag\" style=\"font-size: 6px\" href=\"/tag/simile/\">simile</a>\\n            </span>\\n            \\n        \\n    </div>\\n</div>\\n\\n    </div>\\n    <footer class=\"footer\">\\n        <div class=\"container\">\\n            <p class=\"text-muted\">\\n                Quotes by: <a href=\"https://www.goodreads.com/quotes\">GoodReads.com</a>\\n            </p>\\n            <p class=\"copyright\">\\n                Made with <span class=\\'sh-red\\'>❤</span> by <a href=\"https://scrapinghub.com\">Scrapinghub</a>\\n            </p>\\n        </div>\\n    </footer>\\n</body>\\n</html>'"
+      ]
+     },
+     "execution_count": 32,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "res.text"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "ff07d93d",
+   "metadata": {},
+   "source": [
+    "**TASK: Get the names of all the authors on the first page.**"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 33,
+   "id": "f214f287",
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "# CODE HERE"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 34,
+   "id": "d9b4efdd",
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "soup = bs4.BeautifulSoup(res.text,'lxml')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 35,
+   "id": "98d3204b",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[<small class=\"author\" itemprop=\"author\">Albert Einstein</small>,\n",
+       " <small class=\"author\" itemprop=\"author\">J.K. Rowling</small>,\n",
+       " <small class=\"author\" itemprop=\"author\">Albert Einstein</small>,\n",
+       " <small class=\"author\" itemprop=\"author\">Jane Austen</small>,\n",
+       " <small class=\"author\" itemprop=\"author\">Marilyn Monroe</small>,\n",
+       " <small class=\"author\" itemprop=\"author\">Albert Einstein</small>,\n",
+       " <small class=\"author\" itemprop=\"author\">André Gide</small>,\n",
+       " <small class=\"author\" itemprop=\"author\">Thomas A. Edison</small>,\n",
+       " <small class=\"author\" itemprop=\"author\">Eleanor Roosevelt</small>,\n",
+       " <small class=\"author\" itemprop=\"author\">Steve Martin</small>]"
+      ]
+     },
+     "execution_count": 35,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "soup.select(\".author\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 36,
+   "id": "a014267d",
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "# I used a set to not worry about repeat authors.\n",
+    "authors = set() \n",
+    "for name in soup.select(\".author\"):\n",
+    "    authors.add(name.text)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 37,
+   "id": "1862ff1b",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'Albert Einstein',\n",
+       " 'André Gide',\n",
+       " 'Eleanor Roosevelt',\n",
+       " 'J.K. Rowling',\n",
+       " 'Jane Austen',\n",
+       " 'Marilyn Monroe',\n",
+       " 'Steve Martin',\n",
+       " 'Thomas A. Edison'}"
+      ]
+     },
+     "execution_count": 37,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "authors"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "979b79e1",
+   "metadata": {},
+   "source": [
+    "**TASK: Create a list of all the quotes on the first page.**"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "id": "f2f81f42",
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "#CODE HERE"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "id": "288e4655",
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "quotes = []\n",
+    "for quote in soup.select(\".text\"):\n",
+    "    quotes.append(quote.text)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "id": "98402610",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”',\n",
+       " '“It is our choices, Harry, that show what we truly are, far more than our abilities.”',\n",
+       " '“There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”',\n",
+       " '“The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.”',\n",
+       " \"“Imperfection is beauty, madness is genius and it's better to be absolutely ridiculous than absolutely boring.”\",\n",
+       " '“Try not to become a man of success. Rather become a man of value.”',\n",
+       " '“It is better to be hated for what you are than to be loved for what you are not.”',\n",
+       " \"“I have not failed. I've just found 10,000 ways that won't work.”\",\n",
+       " \"“A woman is like a tea bag; you never know how strong it is until it's in hot water.”\",\n",
+       " '“A day without sunshine is like, you know, night.”']"
+      ]
+     },
+     "execution_count": 15,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "quotes"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "aec8dcc3",
+   "metadata": {},
+   "source": [
+    "**TASK: Inspect the site and use Beautiful Soup to extract the top ten tags from the requests text shown on the top right from the home page (e.g Love,Inspirational,Life, etc...).**"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "id": "5d2074b5",
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "# CODE HERE"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "id": "39b6c57e",
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "soup = bs4.BeautifulSoup(res.text,'lxml')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "id": "9af876f1",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[<span class=\"tag-item\">\n",
+       " <a class=\"tag\" href=\"/tag/love/\" style=\"font-size: 28px\">love</a>\n",
+       " </span>, <span class=\"tag-item\">\n",
+       " <a class=\"tag\" href=\"/tag/inspirational/\" style=\"font-size: 26px\">inspirational</a>\n",
+       " </span>, <span class=\"tag-item\">\n",
+       " <a class=\"tag\" href=\"/tag/life/\" style=\"font-size: 26px\">life</a>\n",
+       " </span>, <span class=\"tag-item\">\n",
+       " <a class=\"tag\" href=\"/tag/humor/\" style=\"font-size: 24px\">humor</a>\n",
+       " </span>, <span class=\"tag-item\">\n",
+       " <a class=\"tag\" href=\"/tag/books/\" style=\"font-size: 22px\">books</a>\n",
+       " </span>, <span class=\"tag-item\">\n",
+       " <a class=\"tag\" href=\"/tag/reading/\" style=\"font-size: 14px\">reading</a>\n",
+       " </span>, <span class=\"tag-item\">\n",
+       " <a class=\"tag\" href=\"/tag/friendship/\" style=\"font-size: 10px\">friendship</a>\n",
+       " </span>, <span class=\"tag-item\">\n",
+       " <a class=\"tag\" href=\"/tag/friends/\" style=\"font-size: 8px\">friends</a>\n",
+       " </span>, <span class=\"tag-item\">\n",
+       " <a class=\"tag\" href=\"/tag/truth/\" style=\"font-size: 8px\">truth</a>\n",
+       " </span>, <span class=\"tag-item\">\n",
+       " <a class=\"tag\" href=\"/tag/simile/\" style=\"font-size: 6px\">simile</a>\n",
+       " </span>]"
+      ]
+     },
+     "execution_count": 18,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "soup.select('.tag-item')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "id": "f036bae9",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "\n",
+      "love\n",
+      "\n",
+      "\n",
+      "inspirational\n",
+      "\n",
+      "\n",
+      "life\n",
+      "\n",
+      "\n",
+      "humor\n",
+      "\n",
+      "\n",
+      "books\n",
+      "\n",
+      "\n",
+      "reading\n",
+      "\n",
+      "\n",
+      "friendship\n",
+      "\n",
+      "\n",
+      "friends\n",
+      "\n",
+      "\n",
+      "truth\n",
+      "\n",
+      "\n",
+      "simile\n",
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "for item in soup.select(\".tag-item\"):\n",
+    "    print(item.text)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "b02882f2",
+   "metadata": {},
+   "source": [
+    "**TASK: Notice how there is more than one page, and subsequent pages look like this http://quotes.toscrape.com/page/2/. Use what you know about for loops and string concatenation to loop through all the pages and get all the unique authors on the website. Keep in mind there are many ways to achieve this, also note that you will need to somehow figure out how to check that your loop is on the last page with quotes. For debugging purposes, I will let you know that there are only 10 pages, so the last page is http://quotes.toscrape.com/page/10/, but try to create a loop that is robust enough that it wouldn't matter to know the amount of pages beforehand, perhaps use try/except for this, its up to you!**"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "id": "e6321230",
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "# CODE HERE"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "e65e40fa",
+   "metadata": {},
+   "source": [
+    "### Possible Solution #1 ( Assuming You Know Number of Pages)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 24,
+   "id": "836198a8",
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "url = 'http://quotes.toscrape.com/page/'"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 40,
+   "id": "4ada9b55",
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "authors = set()\n",
+    "\n",
+    "for page in range(1,10):\n",
+    "\n",
+    "    # Concatenate to get new page URL\n",
+    "    page_url = url+str(page)\n",
+    "    # Obtain Request\n",
+    "    res = requests.get(page_url)\n",
+    "    # Turn into Soup\n",
+    "    soup = bs4.BeautifulSoup(res.text,'lxml')\n",
+    "    # Add Authors to our set\n",
+    "    for name in soup.select(\".author\"):\n",
+    "        authors.add(name.text)\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "669a07d1",
+   "metadata": {},
+   "source": [
+    "### Possible Solution #2 ( Unknown Number of Pages, but knowledge of last page)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "8996b230",
+   "metadata": {},
+   "source": [
+    "Let's check what the last invalid page looks like:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 41,
+   "id": "bedac5a2",
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "# Choose some huge page number we know doesn't exist\n",
+    "page_url = url+str(9999999)\n",
+    "\n",
+    "# Obtain Request\n",
+    "res = requests.get(page_url)\n",
+    "\n",
+    "# Turn into Soup\n",
+    "soup = bs4.BeautifulSoup(res.text,'lxml')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 46,
+   "id": "8c98ceac",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<!DOCTYPE html>\n",
+       "<html lang=\"en\">\n",
+       "<head>\n",
+       "<meta charset=\"utf-8\"/>\n",
+       "<title>Quotes to Scrape</title>\n",
+       "<link href=\"/static/bootstrap.min.css\" rel=\"stylesheet\"/>\n",
+       "<link href=\"/static/main.css\" rel=\"stylesheet\"/>\n",
+       "</head>\n",
+       "<body>\n",
+       "<div class=\"container\">\n",
+       "<div class=\"row header-box\">\n",
+       "<div class=\"col-md-8\">\n",
+       "<h1>\n",
+       "<a href=\"/\" style=\"text-decoration: none\">Quotes to Scrape</a>\n",
+       "</h1>\n",
+       "</div>\n",
+       "<div class=\"col-md-4\">\n",
+       "<p>\n",
+       "<a href=\"/login\">Login</a>\n",
+       "</p>\n",
+       "</div>\n",
+       "</div>\n",
+       "<div class=\"row\">\n",
+       "<div class=\"col-md-8\">\n",
+       "\n",
+       "No quotes found!\n",
+       "\n",
+       "    <nav>\n",
+       "<ul class=\"pager\">\n",
+       "<li class=\"previous\">\n",
+       "<a href=\"/page/9999998/\"><span aria-hidden=\"true\">←</span> Previous</a>\n",
+       "</li>\n",
+       "</ul>\n",
+       "</nav>\n",
+       "</div>\n",
+       "<div class=\"col-md-4 tags-box\">\n",
+       "<h2>Top Ten tags</h2>\n",
+       "<span class=\"tag-item\">\n",
+       "<a class=\"tag\" href=\"/tag/love/\" style=\"font-size: 28px\">love</a>\n",
+       "</span>\n",
+       "<span class=\"tag-item\">\n",
+       "<a class=\"tag\" href=\"/tag/inspirational/\" style=\"font-size: 26px\">inspirational</a>\n",
+       "</span>\n",
+       "<span class=\"tag-item\">\n",
+       "<a class=\"tag\" href=\"/tag/life/\" style=\"font-size: 26px\">life</a>\n",
+       "</span>\n",
+       "<span class=\"tag-item\">\n",
+       "<a class=\"tag\" href=\"/tag/humor/\" style=\"font-size: 24px\">humor</a>\n",
+       "</span>\n",
+       "<span class=\"tag-item\">\n",
+       "<a class=\"tag\" href=\"/tag/books/\" style=\"font-size: 22px\">books</a>\n",
+       "</span>\n",
+       "<span class=\"tag-item\">\n",
+       "<a class=\"tag\" href=\"/tag/reading/\" style=\"font-size: 14px\">reading</a>\n",
+       "</span>\n",
+       "<span class=\"tag-item\">\n",
+       "<a class=\"tag\" href=\"/tag/friendship/\" style=\"font-size: 10px\">friendship</a>\n",
+       "</span>\n",
+       "<span class=\"tag-item\">\n",
+       "<a class=\"tag\" href=\"/tag/friends/\" style=\"font-size: 8px\">friends</a>\n",
+       "</span>\n",
+       "<span class=\"tag-item\">\n",
+       "<a class=\"tag\" href=\"/tag/truth/\" style=\"font-size: 8px\">truth</a>\n",
+       "</span>\n",
+       "<span class=\"tag-item\">\n",
+       "<a class=\"tag\" href=\"/tag/simile/\" style=\"font-size: 6px\">simile</a>\n",
+       "</span>\n",
+       "</div>\n",
+       "</div>\n",
+       "</div>\n",
+       "<footer class=\"footer\">\n",
+       "<div class=\"container\">\n",
+       "<p class=\"text-muted\">\n",
+       "                Quotes by: <a href=\"https://www.goodreads.com/quotes\">GoodReads.com</a>\n",
+       "</p>\n",
+       "<p class=\"copyright\">\n",
+       "                Made with <span class=\"sh-red\">❤</span> by <a href=\"https://scrapinghub.com\">Scrapinghub</a>\n",
+       "</p>\n",
+       "</div>\n",
+       "</footer>\n",
+       "</body>\n",
+       "</html>"
+      ]
+     },
+     "execution_count": 46,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "soup"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 47,
+   "id": "1ae075d0",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "True"
+      ]
+     },
+     "execution_count": 47,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# This solution requires that the string \"No quotes found!\" only occurs on the last page.\n",
+    "# If for some reason this string was on the other pages, we would need to be more detailed.\n",
+    "\"No quotes found!\" in res.text"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 48,
+   "id": "ecde8be8",
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "page_still_valid = True\n",
+    "authors = set()\n",
+    "page = 1\n",
+    "\n",
+    "while page_still_valid:\n",
+    "\n",
+    "    # Concatenate to get new page URL\n",
+    "    page_url = url+str(page)\n",
+    "    \n",
+    "    # Obtain Request\n",
+    "    res = requests.get(page_url)\n",
+    "    \n",
+    "    # Check to see if we're on the last page\n",
+    "    if \"No quotes found!\" in res.text:\n",
+    "        break\n",
+    "    \n",
+    "    # Turn into Soup\n",
+    "    soup = bs4.BeautifulSoup(res.text,'lxml')\n",
+    "    \n",
+    "    # Add Authors to our set\n",
+    "    for name in soup.select(\".author\"):\n",
+    "        authors.add(name.text)\n",
+    "        \n",
+    "    # Go to Next Page\n",
+    "    page += 1"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 49,
+   "id": "9b5cb568",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'Albert Einstein',\n",
+       " 'Alexandre Dumas fils',\n",
+       " 'Alfred Tennyson',\n",
+       " 'Allen Saunders',\n",
+       " 'André Gide',\n",
+       " 'Ayn Rand',\n",
+       " 'Bob Marley',\n",
+       " 'C.S. Lewis',\n",
+       " 'Charles Bukowski',\n",
+       " 'Charles M. Schulz',\n",
+       " 'Douglas Adams',\n",
+       " 'Dr. Seuss',\n",
+       " 'E.E. Cummings',\n",
+       " 'Eleanor Roosevelt',\n",
+       " 'Elie Wiesel',\n",
+       " 'Ernest Hemingway',\n",
+       " 'Friedrich Nietzsche',\n",
+       " 'Garrison Keillor',\n",
+       " 'George Bernard Shaw',\n",
+       " 'George Carlin',\n",
+       " 'George Eliot',\n",
+       " 'George R.R. Martin',\n",
+       " 'Harper Lee',\n",
+       " 'Haruki Murakami',\n",
+       " 'Helen Keller',\n",
+       " 'J.D. Salinger',\n",
+       " 'J.K. Rowling',\n",
+       " 'J.M. Barrie',\n",
+       " 'J.R.R. Tolkien',\n",
+       " 'James Baldwin',\n",
+       " 'Jane Austen',\n",
+       " 'Jim Henson',\n",
+       " 'Jimi Hendrix',\n",
+       " 'John Lennon',\n",
+       " 'Jorge Luis Borges',\n",
+       " 'Khaled Hosseini',\n",
+       " \"Madeleine L'Engle\",\n",
+       " 'Marilyn Monroe',\n",
+       " 'Mark Twain',\n",
+       " 'Martin Luther King Jr.',\n",
+       " 'Mother Teresa',\n",
+       " 'Pablo Neruda',\n",
+       " 'Ralph Waldo Emerson',\n",
+       " 'Stephenie Meyer',\n",
+       " 'Steve Martin',\n",
+       " 'Suzanne Collins',\n",
+       " 'Terry Pratchett',\n",
+       " 'Thomas A. Edison',\n",
+       " 'W.C. Fields',\n",
+       " 'William Nicholson'}"
+      ]
+     },
+     "execution_count": 49,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "authors"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "6c718022",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.8.11"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/Python/Projects/youtube-Video-Downloader/setup.txt b/Python/Projects/youtube-Video-Downloader/setup.txt
new file mode 100644
index 00000000..3ab6d097
--- /dev/null
+++ b/Python/Projects/youtube-Video-Downloader/setup.txt
@@ -0,0 +1,19 @@
+Python Version (>3.8)
+
+Module used -
+tkinter (8.6.9)
+pytube (10.8.0)
+
+
+---- pip install tk
+---- pip install pytube
+
+
+pytube used to retrive youtube video through link and download that youtube video
+tkinter module is used to create a gui.
+
+-- open the file and install the given py module and click run.
+-- copy the link of youtube video
+-- paste it 
+-- select the format and folder where to save
+-- click on the download button.
diff --git a/Python/Projects/youtube-Video-Downloader/yt.py b/Python/Projects/youtube-Video-Downloader/yt.py
new file mode 100644
index 00000000..f493c376
--- /dev/null
+++ b/Python/Projects/youtube-Video-Downloader/yt.py
@@ -0,0 +1,122 @@
+from tkinter import *
+from tkinter import ttk
+from tkinter import filedialog
+from pytube import YouTube # YouTube('https://youtu.be/2lAe1cqCOXo').streams.first().download()
+import time
+
+class Yt:
+    def __init__(self, SCREEN):
+        self. SCREEN = SCREEN
+        
+        # Gui title and geometry
+        self.SCREEN.geometry("800x500+350+160")
+        self.SCREEN.title("YTdownloader")
+        self.SCREEN.resizable(False, False)
+        
+        # Main frame
+        self.frame_main = Frame(self.SCREEN, bg="#000000")
+        self.frame_main.place(x=0,y=0, width=800, height=500)
+        
+        # heading lable
+        label_head = Label(self.frame_main, text="2thy YT Downloader", font=("Goudy old style", 20, "bold"), fg="white", bg="#000000").place(x=300, y=20)
+        
+        # Entry_link
+        label_paste = Label(self.frame_main, text="Paste the video URL here", font=("arial", 15, "bold"), fg="white", bg="#000000").place(x=40, y= 100)
+        
+
+        self.paste_link = Entry(self.frame_main, font="arial 11")
+        self.paste_link.place(x=300, y= 100, height=30, width=470)
+        
+        # Quality
+        label_paste = Label(self.frame_main, text="Choose format.", font=("arial", 15), fg="white", bg="#000000").place(x=40, y= 150)
+        self.options = ["High Quality", "Low Quality", "only Audio"]
+        self.type_select = ttk.Combobox(self.frame_main, values=self.options, width=23)
+        self.type_select.current(0)
+        self.type_select.place(x=200, y= 150, height=30, width=120)
+        
+        # Select path
+        self.select_path = Button(self.frame_main, text="Select folder", command=self.loc, fg="#000000", bg="#fff").place(x=400, y=145, height=40, width=240)
+        
+        
+        # progressbar and download
+        self.bar = ttk.Progressbar(self.frame_main, orient=HORIZONTAL, length=500, mode = 'determinate')
+        self.bar.place(x=40, y=220)
+        dwn_btn = Button(self.frame_main, text="Download", command=self.download, font="cosmic 10 bold", fg="white", bg="red").place(x=620, y=210, height=40, width=140)
+        
+        # errors
+        self.label_error = Label(self.frame_main, text="", font=("Goudy old style", 15, "bold"), fg="red", bg="#000000")
+        self.label_error.place(x=280, y= 270)
+        
+        # Output
+        self.label_output = Label(self.frame_main, text="-----------------------  Output  -----------------", 
+                                  font=("Goudy old style", 15, "bold"), fg="#fff", bg="#000000")
+        self.label_output.place(x=300, y= 320)
+        
+        # File name
+        self.file_name = Label(self.frame_main, text="Name:", font=("Goudy old style", 15, "bold"), fg="red", bg="#000000").place(x=40, y= 370)
+        
+        self.file_name_n = Label(self.frame_main, text="", font=("arial", 12, "bold"), fg="white", bg="#000000")
+        self.file_name_n.place(x=260, y= 375)
+        
+        
+        # file size
+        self.file_size = Label(self.frame_main, text="Size:", font=("Goudy old style", 15, "bold"), fg="red", bg="#000000").place(x=40, y=410)
+        
+        self.file_size_s = Label(self.frame_main, text="", font=("arial", 12, "bold"), fg="white", bg="#000000")
+        self.file_size_s.place(x=260, y=415)
+        
+        
+        
+        # file location
+        self.file_location = Label(self.frame_main, text="File directory:", font=("Goudy old style", 15, "bold"), fg="red", bg="#000000").place(x=40, y=450)
+        
+        self.file_location_l = Label(self.frame_main, text="", font=("arial", 10), fg="white", bg="#000000")
+        self.file_location_l.place(x=260, y=455)
+        
+        
+        
+    def loc(self):
+        self.directory = filedialog.askdirectory()
+          
+    def download(self):
+        yt_url = str(self.paste_link.get())
+        yt_link = YouTube(yt_url)
+        selected = self.type_select.get()
+        print(selected)
+        if self.paste_link.get() != "":
+            self.label_error.config(text="")
+            self.SCREEN.update()
+            
+            if selected == self.options[0]:
+                dn = yt_link.streams.filter(progressive=True).first()
+            elif selected == self.options[1]:
+                dn = yt_link.streams.filter(progressive=True).last()
+            elif selected == self.options[2]:
+                dn = yt_link.streams.filter(only_audio=True).first()
+                
+            
+            size = dn.filesize/1024000
+            size = round(size,1)
+            a=10
+            while True:
+                if a!=110:
+                    time.sleep(1)
+                    self.bar['value'] = a
+                    dn.download(self.directory)
+                    a += 10
+                    self.frame_main.update_idletasks()
+                else:
+                    self.label_error.config(text="Download Complete")
+                    break
+                        
+            self.file_name_n.config(text=yt_link.title)
+            self.file_size_s.config(text=f"{size}MB")
+            self.file_location_l.config(text=f"{self.directory}/{yt_link.title}")
+        else:
+            self.label_error.config(text="PLease enter the link.")
+        
+
+
+SCREEN = Tk()
+obj = Yt(SCREEN)
+SCREEN.mainloop()
diff --git a/Python/README.md b/Python/README.md
new file mode 100644
index 00000000..ae95c8c7
--- /dev/null
+++ b/Python/README.md
@@ -0,0 +1,2 @@
+## Put normal python questions and programs here!
+### Make New folder accordingly if needed for any concepts. 
diff --git a/Python/Utility/Check Internet Speed/CheckInternetSpeedUsingPython.ipynb b/Python/Utility/Check Internet Speed/CheckInternetSpeedUsingPython.ipynb
new file mode 100644
index 00000000..330648af
--- /dev/null
+++ b/Python/Utility/Check Internet Speed/CheckInternetSpeedUsingPython.ipynb	
@@ -0,0 +1,59 @@
+{
+  "nbformat": 4,
+  "nbformat_minor": 0,
+  "metadata": {
+    "colab": {
+      "name": "CheckInternetSpeedUsingPython.ipynb",
+      "provenance": []
+    },
+    "kernelspec": {
+      "name": "python3",
+      "display_name": "Python 3"
+    },
+    "language_info": {
+      "name": "python"
+    }
+  },
+  "cells": [
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "KTDP2Do4sigP"
+      },
+      "source": [
+        "#Internet Speed Test using Python\n",
+        "To calculate the speed of internet connection using Python, we have to install a Python library known as **speedtest**.\n",
+        ">To install this Python library on your system, you can use the pip command on your terminal or the command prompt mentioned below:\n",
+        "\n",
+        ">`pip install speedtest-cli`\n",
+        "\n",
+        "The Code below demostrates how we can perform an internet speed test using Python."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "cYL8hfzYsg1-"
+      },
+      "source": [
+        "!pip install speedtest-cli"
+      ],
+      "execution_count": null,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "2Z45CH2FtR73"
+      },
+      "source": [
+        "import speedtest\n",
+        "wifi  = speedtest.Speedtest()\n",
+        "print(\"Wifi Download Speed is \", wifi.download())\n",
+        "print(\"Wifi Upload Speed is \", wifi.upload())"
+      ],
+      "execution_count": null,
+      "outputs": []
+    }
+  ]
+}
\ No newline at end of file
diff --git a/Python/Utility/Check Internet Speed/CheckInternetSpeedUsingPython.py b/Python/Utility/Check Internet Speed/CheckInternetSpeedUsingPython.py
new file mode 100644
index 00000000..090051f4
--- /dev/null
+++ b/Python/Utility/Check Internet Speed/CheckInternetSpeedUsingPython.py	
@@ -0,0 +1,4 @@
+import speedtest
+wifi  = speedtest.Speedtest()
+print("Wifi Download Speed is ", wifi.download())
+print("Wifi Upload Speed is ", wifi.upload())
\ No newline at end of file
diff --git a/Python/Utility/Currency Converter/README.md b/Python/Utility/Currency Converter/README.md
new file mode 100644
index 00000000..9b972acf
--- /dev/null
+++ b/Python/Utility/Currency Converter/README.md	
@@ -0,0 +1,12 @@
+# Summary
+---
+A Simple CLI-based currency conversion utility.  
+Uses freecurrencyrates.com's api for fetching rates.
+
+
+<br>
+
+# Usage
+---
+Use the command: `./currency.py lookup_currency base_currency`  
+Example, `./currency.py usd inr` to fetch the rate of 1 usd in inr.
\ No newline at end of file
diff --git a/Python/Utility/Currency Converter/currency.py b/Python/Utility/Currency Converter/currency.py
new file mode 100644
index 00000000..eff41227
--- /dev/null
+++ b/Python/Utility/Currency Converter/currency.py	
@@ -0,0 +1,18 @@
+import json
+import sys
+import urllib.request
+
+if len(sys.argv) != 3:
+    print("Usage: ./currencyrates.py lookup_currency base_currency. Example: ./currencyrates.py cad usd")
+    sys.exit()
+
+currency = sys.argv[1]
+basecurrency = sys.argv[2]
+
+currencyurl = "http://freecurrencyrates.com/api/action.php?do=cvals&iso=" + currency + "&f=" + basecurrency + "&v=1&s=cbr"
+f = urllib.request.urlopen(currencyurl)
+obj = json.loads(f.read())
+result = "1 " + currency.upper() + " is "
+result+="{:,.2f}".format(1/obj[currency.upper()]) + " " + basecurrency.upper()
+
+print(result)
\ No newline at end of file
diff --git a/Python/Utility/Lazy Junk Organizer/README.md b/Python/Utility/Lazy Junk Organizer/README.md
new file mode 100644
index 00000000..a33acb60
--- /dev/null
+++ b/Python/Utility/Lazy Junk Organizer/README.md	
@@ -0,0 +1,15 @@
+# Summary
+---
+A File Sorter "Lazy Junk Organizer" Utility.
+Sorts all files in a directory according to their type.
+
+For example: .png, .jpg and .jpeg will be moved in a "Images" folder.
+Similarly, .mp4 and .mov files will be moved in a "Videos" folder.
+
+<br>
+
+# Usage
+---
+Place the python file in the directory you want sorted.
+Then simply run the lazyjunkorganier.py file in that directory.
+Files will automatically be sorted according to their extensions. 
\ No newline at end of file
diff --git a/Python/Utility/Lazy Junk Organizer/lazyjunkorganizer.py b/Python/Utility/Lazy Junk Organizer/lazyjunkorganizer.py
new file mode 100644
index 00000000..97f0f370
--- /dev/null
+++ b/Python/Utility/Lazy Junk Organizer/lazyjunkorganizer.py	
@@ -0,0 +1,50 @@
+import os 
+from pathlib import Path 
+
+DIRECTORIES = { 
+	"Html": [".html5", ".html", ".htm", ".xhtml"], 
+	"Images": [".jpeg", ".jpg", ".tiff", ".gif", ".bmp", ".png", ".bpg", "svg", 
+			".heif", ".psd"], 
+	"Videos": [".avi", ".flv", ".wmv", ".mov", ".mp4", ".webm", ".vob", ".mng", 
+			".qt", ".mpg", ".mpeg", ".3gp"], 
+	"Documents": [".oxps", ".epub", ".pages", ".docx", ".doc", ".fdf", ".ods", 
+				".odt", ".pwi", ".xsn", ".xps", ".dotx", ".docm", ".dox", 
+				".rvg", ".rtf", ".rtfd", ".wpd", ".xls", ".xlsx", ".ppt", 
+				"pptx", ".pdf"], 
+	"Archives": [".a", ".ar", ".cpio", ".iso", ".tar", ".gz", ".rz", ".7z", 
+				".dmg", ".rar", ".xar", ".zip"], 
+	"Audio": [".aac", ".aa", ".aac", ".dvf", ".m4a", ".m4b", ".m4p", ".mp3", 
+			".msv", "ogg", "oga", ".raw", ".vox", ".wav", ".wma"], 
+	"Plaintext": [".txt", ".in", ".out"], 
+	"Python": [".py", ".ipynb", ".py3", ".pyc", ".pyo", ".pyx", ".pyw"], 
+	"Exe": [".exe"], 
+	"Shell": [".sh", ".bat"] 
+} 
+
+FILE_FORMATS = {file_format: directory 
+				for directory, file_formats in DIRECTORIES.items() 
+				for file_format in file_formats} 
+
+
+def organize_junk(): 
+	for entry in os.scandir(): 
+		if entry.is_dir(): 
+			continue
+		file_path = Path(entry) 
+		file_format = file_path.suffix.lower() 
+		if file_format in FILE_FORMATS: 
+			directory_path = Path(FILE_FORMATS[file_format]) 
+			directory_path.mkdir(exist_ok=True) 
+			file_path.rename(directory_path.joinpath(file_path)) 
+
+		for dir in os.scandir(): 
+			try: 
+				os.rmdir(dir)
+			except: 
+				pass
+
+if __name__ == "__main__": 
+	organize_junk() 
+
+x = os.scandir()
+y = [print(Path(i).suffix.lower()) for i in x]
\ No newline at end of file
diff --git a/Python/Utility/Morse Code Tool/README.md b/Python/Utility/Morse Code Tool/README.md
new file mode 100644
index 00000000..75de1400
--- /dev/null
+++ b/Python/Utility/Morse Code Tool/README.md	
@@ -0,0 +1,11 @@
+# Summary
+---
+A CLI-based [morse code](https://www.britannica.com/topic/Morse-Code) encoder/decoder utility. 
+English can be converted into Morse Code and vice Versa.
+
+<br>
+
+# Usage
+---
+Simply run the "morse code.py" file in any terminal or python shell.
+Choose a mode (1) or (2), enter your input and program will convert it accordingly.
\ No newline at end of file
diff --git a/Python/Utility/Morse Code Tool/morse code.py b/Python/Utility/Morse Code Tool/morse code.py
new file mode 100644
index 00000000..cc143a62
--- /dev/null
+++ b/Python/Utility/Morse Code Tool/morse code.py	
@@ -0,0 +1,143 @@
+import os
+import winsound
+import time
+
+timeunit = 300
+frequency = 2500
+dit = timeunit * 1
+dash = timeunit * 3
+inter_space = 1 * 0.300
+space = 3 * 0.300
+word_space = 7 * 0.300
+morse_code_dict = {'A': '.-', 'B': '-...',
+                   'C': '-.-.', 'D': '-..', 'E': '.',
+                   'F': '..-.', 'G': '--.', 'H': '....',
+                   'I': '..', 'J': '.---', 'K': '-.-',
+                   'L': '.-..', 'M': '--', 'N': '-.',
+                   'O': '---', 'P': '.--.', 'Q': '--.-',
+                   'R': '.-.', 'S': '...', 'T': '-',
+                   'U': '..-', 'V': '...-', 'W': '.--',
+                   'X': '-..-', 'Y': '-.--', 'Z': '--..',
+                   '1': '.----', '2': '..---', '3': '...--',
+                   '4': '....-', '5': '.....', '6': '-....',
+                   '7': '--...', '8': '---..', '9': '----.',
+                   '0': '-----', ',': '--..--', '.': '.-.-.-',
+                   '?': '..--..', '/': '-..-.', '-': '-....-',
+                   '(': '-.--.', ')': '-.--.-', ';': '_._._.',
+                   ':': '___...', "'": '.____.',
+                   '"': '._.._.', '=': '_..._', '+': '._._.',
+                   '*': '_.._', '@': '.__._.'}
+
+
+def main():
+
+    while True:
+        os.system("cls")
+
+        choose = input('''MORSE CODE DIT-DASH BEEP-BOOP
+
+(1) ENG --> MORSE
+(2) MORSE --> ENG
+[Q to quit]
+Enter: ''')
+
+        if choose == '1':
+            message = input('\nText: ')
+            output = encrypt(message)
+            # print(f"\nEnglish: {message}")
+            print(f"Morse Code:\n{output}")
+            print("\n[BEEPING MORSE CODE]")
+            for word in output.split("  "):
+                for ch in word:
+                    if ch == ".":
+                        winsound.Beep(frequency, dit)
+                        time.sleep(inter_space)
+
+                    elif ch == "-":
+                        winsound.Beep(frequency, dash)
+                        time.sleep(inter_space)
+
+                    elif ch == " ":
+                        time.sleep(space)
+
+                    else:
+                        for _ in range(8):
+                            winsound.Beep(frequency, dit)
+
+                else:
+                    time.sleep(word_space)
+            print("[OVER AND OUT]")
+
+            input("\n[Press Enter to convert again]")
+
+        elif choose == '2':
+            print(
+                "\nGUIDLINES: '.' for dot, '-' for dash, '  ' double-spaces between words\n")
+            message = input('Morse: ')
+            output = decrypt(message)
+            # print(f"\nMorse Code: {message}")
+            print(f"Decrypted Text:\n{output}")
+            input("\n[Press Enter to convert again]")
+
+        elif choose.upper() == 'Q':
+            print("\nExiting . . .")
+            time.sleep(1)
+            os.system('cls')
+            break
+
+        else:
+            os.system("cls")
+
+
+def encrypt(message):
+    cipher = ''
+    for letter in message:
+        if letter.upper() not in list(morse_code_dict.keys()) and letter != " ":
+            cipher += letter + " "
+            continue
+
+        if (letter != ' '):
+            cipher += morse_code_dict[letter.upper()] + ' '
+
+        else:
+            cipher += ' '
+
+    return cipher
+
+
+def decrypt(message):
+    message += ' '
+    decipher = ''
+    morsym = ''
+
+    for letter in message:
+
+        if (letter != ' '):
+            i = 0
+            morsym += letter
+
+        # if morsym not in list(morse_code_dict.keys()):
+        #     decipher += " [ERROR] "
+        else:
+            i += 1
+
+            if i == 2:
+                decipher += ' '
+
+            else:
+                if morsym not in list(morse_code_dict.values()):
+                    decipher += "[ERROR]"
+                    morsym = ''
+                    continue
+
+                else:
+
+                    decipher += list(morse_code_dict.keys()
+                                     )[list(morse_code_dict.values()).index(morsym)]
+                    morsym = ''
+
+    return decipher
+
+
+if __name__ == "__main__":
+    main()
diff --git a/Python/Utility/Password Generator/README.md b/Python/Utility/Password Generator/README.md
new file mode 100644
index 00000000..520f1d9f
--- /dev/null
+++ b/Python/Utility/Password Generator/README.md	
@@ -0,0 +1,14 @@
+# Summary
+---
+A CLI-based password generator utility. 
+Two types of passwords can be generated:
+1. xxx-xxx-xxx type (for eg. sjw-jsd-apq)
+2. random type (for eg. z8lt0yey*f3xm)
+
+
+<br>
+
+# Usage
+---
+Simply run the .py file in terminal or python shell.
+Choose a mode (1) or (2) and it will generate a pwd!
\ No newline at end of file
diff --git a/Python/Utility/Password Generator/passwd gen.py b/Python/Utility/Password Generator/passwd gen.py
new file mode 100644
index 00000000..45752344
--- /dev/null
+++ b/Python/Utility/Password Generator/passwd gen.py	
@@ -0,0 +1,56 @@
+import random
+import time
+from os import system
+
+
+def main():
+    while True:
+        system('cls')
+        print("[PASSWORD GENERATOR]")
+        pwdtype = input('''
+(1) xxx-xxx-xxx type
+(2) random type
+ENTER: ''')
+
+        if pwdtype == '1':
+            passwd = gen_typeone()
+            print("\n[YOUR PASSWORD]")
+            print(f"> {passwd}")
+            input("\n[PRESS ENTER]")
+
+        elif pwdtype == '2':
+            passwd = gen_typetwo()
+            print("\n[YOUR PASSWORD]")
+            print(f"> {passwd}")
+            input("\n[PRESS ENTER]")
+
+        else:
+            continue
+
+
+
+def gen_typeone():
+    alphabet = 'abcdefghijklmnopqrstuvwxyz'
+    passwd = "-".join(("".join(random.sample(alphabet,k=3))) for _ in range(3))
+    return passwd
+
+
+def gen_typetwo():
+    alphabet = 'abcdefghijklmnopqrstuvwxyz'
+    numbers = '1234567890'
+    symbols = '@$*-_#+'
+    passwd = ""
+    numsym = random.choice([1,2,3])
+    numnum = random.choice([3,4,5])
+    numalpha = 13 - numsym - numnum
+    passwd = random.choices(alphabet, k=numalpha) + random.choices(numbers, k=numnum) + random.choices(symbols, k=numsym)
+    
+    for _ in range(3):
+        random.shuffle(passwd)
+
+    passwd  = "".join(passwd)
+    return passwd
+
+if __name__ == "__main__":
+    main()
+
diff --git a/Python/Utility/Phone Number Details/PhoneNumberDetailsUsingPython.ipynb b/Python/Utility/Phone Number Details/PhoneNumberDetailsUsingPython.ipynb
new file mode 100644
index 00000000..f0204836
--- /dev/null
+++ b/Python/Utility/Phone Number Details/PhoneNumberDetailsUsingPython.ipynb	
@@ -0,0 +1,97 @@
+{
+  "nbformat": 4,
+  "nbformat_minor": 0,
+  "metadata": {
+    "colab": {
+      "name": "PhoneNumberDetailsUsingPython.ipynb",
+      "provenance": []
+    },
+    "kernelspec": {
+      "name": "python3",
+      "display_name": "Python 3"
+    },
+    "language_info": {
+      "name": "python"
+    }
+  },
+  "cells": [
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "dI17RPaEmJRo"
+      },
+      "source": [
+        "#Phone Number Details using Python\n",
+        "To get the details of any number, we can use an amazing Python module known as **phonenumbers** . This module is created by [David Drysdale](https://www.linkedin.com/in/david-drysdale-1578771/) and you can use it to get the details of any phone number from anywhere in the world.\n",
+        "\n",
+        ">To install this Python module on your system, you can use the pip command on your terminal or the command prompt mentioned below:\n",
+        "\n",
+        ">`pip install phonenumbers`\n",
+        "\n",
+        "There are a lot of details you can find about a number using this Python module. The code below demonstrate how you can find some of the basic details about a phone number with the help of Python."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "CmWqnK0gnjIG",
+        "colab": {
+          "base_uri": "https://localhost:8080/"
+        },
+        "outputId": "60ea5ca9-82de-4472-f2d7-b6f93125fa99"
+      },
+      "source": [
+        "!pip install phonenumbers"
+      ],
+      "execution_count": 2,
+      "outputs": [
+        {
+          "output_type": "stream",
+          "name": "stdout",
+          "text": [
+            "Collecting phonenumbers\n",
+            "  Downloading phonenumbers-8.12.33-py2.py3-none-any.whl (2.6 MB)\n",
+            "\u001b[K     |████████████████████████████████| 2.6 MB 5.1 MB/s \n",
+            "\u001b[?25hInstalling collected packages: phonenumbers\n",
+            "Successfully installed phonenumbers-8.12.33\n"
+          ]
+        }
+      ]
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "colab": {
+          "base_uri": "https://localhost:8080/"
+        },
+        "id": "esV9KSv4mD0I",
+        "outputId": "6a27b4f4-343c-4dd9-9701-081e45c88611"
+      },
+      "source": [
+        "import phonenumbers as ph\n",
+        "from phonenumbers import carrier\n",
+        "from phonenumbers import geocoder\n",
+        "from phonenumbers import timezone\n",
+        "\n",
+        "number = input(\"Enter Phone Number: \") \n",
+        "number = ph.parse(number)\n",
+        "print(\"Time Zone: \",timezone.time_zones_for_number(number))\n",
+        "print(\"Carrier Name: \",carrier.name_for_number(number, \"en\"))\n",
+        "print(\"Location: \",geocoder.description_for_number(number, \"en\"))"
+      ],
+      "execution_count": 4,
+      "outputs": [
+        {
+          "output_type": "stream",
+          "name": "stdout",
+          "text": [
+            "Enter Phone Number: +911234567890\n",
+            "Time Zone:  ('Asia/Calcutta',)\n",
+            "Carrier Name:  \n",
+            "Location:  Baghpat/Baraut, Uttar Pradesh\n"
+          ]
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/Python/Utility/Phone Number Details/PhoneNumberDetailsUsingPython.py b/Python/Utility/Phone Number Details/PhoneNumberDetailsUsingPython.py
new file mode 100644
index 00000000..52feead3
--- /dev/null
+++ b/Python/Utility/Phone Number Details/PhoneNumberDetailsUsingPython.py	
@@ -0,0 +1,10 @@
+import phonenumbers as ph
+from phonenumbers import carrier
+from phonenumbers import geocoder
+from phonenumbers import timezone
+
+number = input("Enter Phone Number: ") 
+number = ph.parse(number)
+print("Time Zone: ",timezone.time_zones_for_number(number))
+print("Carrier Name: ",carrier.name_for_number(number, "en"))
+print("Location: ",geocoder.description_for_number(number, "en"))
\ No newline at end of file
diff --git a/Python/Utility/README.md b/Python/Utility/README.md
new file mode 100644
index 00000000..87552653
--- /dev/null
+++ b/Python/Utility/README.md
@@ -0,0 +1,4 @@
+# Summary
+Folder for scripts and programs that serve a useful purpose and may be of help in any way, such as - A Password Generator, A File Sorter, or perhaps a Currency Convertor! 
+
+Add your script in a folder with a readme.md describing how to use it.
\ No newline at end of file
diff --git a/Python/Utility/Random Item Chooser/README.md b/Python/Utility/Random Item Chooser/README.md
new file mode 100644
index 00000000..7102403f
--- /dev/null
+++ b/Python/Utility/Random Item Chooser/README.md	
@@ -0,0 +1,14 @@
+# Summary
+---
+A CLI-based random item chooser.
+There are three functions:
+1. Dice Roll: rolls a dice 1-6
+2. Coin Flip: flips a coin
+3. Item Picker: picks n items from given list 
+
+<br>
+
+# Usage
+---
+Simply run the .py file in terminal or python shell.
+Choose a function, (1), (2) or (3) and follow the steps.
\ No newline at end of file
diff --git a/Python/Utility/Random Item Chooser/choose.py b/Python/Utility/Random Item Chooser/choose.py
new file mode 100644
index 00000000..d6749fd3
--- /dev/null
+++ b/Python/Utility/Random Item Chooser/choose.py	
@@ -0,0 +1,190 @@
+import random
+import time 
+from os import system
+
+
+def main():
+    while True:
+        system('cls')
+        print("[WHEN IN DOUBT, LET THE PROGRAM DECIDE]")
+        print(r'''
+                         .-.
+                         '-'
+                        //
+               _..---._/|
+             .' ."     '-.
+            /__/          \      *
+           ====_____     __|     :
+          /#   #""" |   /()\    :    ..*
+          |#   #    |   \__/    : .'' 
+          \#___#____|      /   :::.. .
+           \______________|_...ä_: .. '*
+  ()       // /\||||)))))))      '   . .
+ .( \_     \\_\//   _-'.'/        |   * ..
+( )  |^|^|^|ooo/  _#\.//"""_      |   . . .
+(_)_.'v|v|v|     / \#  \_ / '_  _'    . .  
+           | _ _/_/     /'./_-|"         . .
+           /#_#__"""-._ /#  \__)       .  .   
+           |__   ""-._ |##               . . .
+           |  ""|-"""-_/##              . .    
+           /""--\__.-|                       .
+           \-_.-<__ /                   .   .
+           /-_| /  \
+           \-_| \_-<.                        .  .
+           <_-/ <_.-\                    .
+           <_-|  |_.-|                        .
+      .----|   \__\  |                 .
+     |     ."""   '.  |                       .
+      .___|        |__|  (c) NamelessOne
+          '.__..."""''')
+
+        choose = input('''
+(1) Roll a dice
+(2) Pick a thing
+(3) Flip a coin
+ENTER: ''')
+
+        if choose == '1':
+            roll_dice()
+
+        elif choose == '2':
+            pick_thing()
+
+        elif choose == '3':
+            flip_coin()
+
+        else:
+            print("\n// error: unknown option!")
+            time.sleep(2)
+            system('cls')
+
+
+def roll_dice():
+    while True:
+        system('cls')
+        print("[DICE ROLLING SIMULATOR]")
+        print(r'''
+               (( _______
+     _______     /\O    O\
+    /O     /\   /  \      \
+   /   O  /O \ / O  \O____O\ ))
+((/_____O/    \\    /O     /
+  \O    O\    / \  /   O  /
+   \O    O\ O/   \/_____O/
+    \O____O\/ ))          ))
+  ((''')
+        result = random.randint(1,6)
+        print(f"\n[DICE SHOWS {result}]")
+        choose = input("\n// Press enter to roll again\n// Q to go back to menu ")
+        if choose == "":
+            pass
+
+        else:
+            system('cls')
+            break
+
+
+def flip_coin():
+    while True:
+        system('cls')
+        print("[COIN FLIP SIMULATOR]")
+        result = random.choice(["H","T",])
+        if result == 'H':
+            print(r'''
+        _.-'~~`~~'-._
+     .'`  B   E   R  `'.
+    / I               T \
+  /`       .-'~"-.       `\
+ ; L      / `-    \      Y ;
+;        />  `.  -.|        ;
+|       /_     '-.__)       |
+|        |-  _.' \ |        |
+;        `~~;     \\        ;
+ ;          /      \\)     ;
+  \        '.___.-'`"     /
+   `\                   /`
+     '._   1 9 9 7   _.'
+        `'-..,,,..-'`''')
+
+            print("\n[IT'S A HEADS]")
+
+        else:
+            print(r'''
+        _.-'~~`~~'-._
+     .'`  B   E   R  `'.
+    / I               T \
+  /`          _          `\
+ ; L         /"|         Y ;
+;          u | |u           ;
+|           \| |/           |
+|            |_|            |
+;          _//<,-,          ;
+ ;        (__)(_/)         ;
+  \                       /
+   `\                   /`
+     '._   1 9 9 7   _.'
+        `'-..,,,..-'`''')
+
+            print("\n[IT'S A TAILS]")
+
+        choose = input("\n// Press enter to roll again\n// Q to go back to menu ")
+        if choose == "":
+            pass
+
+        else:
+            system('cls')
+            break
+
+
+def pick_thing():
+    while True:    
+        system('cls')
+        print("[RANDOM ITEM PICKER]")
+        print(r'''
+  .---------.
+  |.-------.|
+  ||>run#  ||
+  ||       ||
+  |"-------'|etf
+.-^---------^-.
+| ---~   AMiGA|
+"-------------\'''')
+        things = input("\n// List of items separated by '/': ").split("/")
+        counter = input("// Number of items to pick: " )
+        try:
+            counter = int(counter)
+
+        except:
+            print("\n// error: should be an integer!")
+            time.sleep(2)
+            continue
+
+        thing = random.choices(things,k=counter)
+        toPrint = ", ".join(thing)[:-2]
+
+        system('cls')
+        print("[RANDOM ITEM PICKER]")
+        print(r'''
+  .---------.
+  |.-------.|
+  ||>run#  ||
+  ||       ||
+  |"-------'|etf
+.-^---------^-.
+| ---~   AMiGA|
+"-------------\'''')
+
+        print(f"\n[THE PROGRAM PICKS: {toPrint}]")
+
+        choose = input("\n// Press enter to roll again\n// Q to go back to menu ")
+        if choose == "":
+            pass
+
+        else:
+            system('cls')
+            break
+
+
+
+if __name__ == "__main__":
+    main()
\ No newline at end of file
diff --git a/Python/Utility/Shutdown Computer/ShutdownComputerUsingPython.ipynb b/Python/Utility/Shutdown Computer/ShutdownComputerUsingPython.ipynb
new file mode 100644
index 00000000..9af44a1d
--- /dev/null
+++ b/Python/Utility/Shutdown Computer/ShutdownComputerUsingPython.ipynb	
@@ -0,0 +1,50 @@
+{
+  "nbformat": 4,
+  "nbformat_minor": 0,
+  "metadata": {
+    "colab": {
+      "name": "ShutdownComputerUsingPython.ipynb",
+      "provenance": []
+    },
+    "kernelspec": {
+      "name": "python3",
+      "display_name": "Python 3"
+    },
+    "language_info": {
+      "name": "python"
+    }
+  },
+  "cells": [
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "dfhfm9WVuuch"
+      },
+      "source": [
+        "#Shutdown Computer using Python\n",
+        "To shutdown the system using Python programming language, one must have some knowledge of the OS module in Python. It comes preinstalled in the Python standard library, so you don’t need to write a pip command to install it. \n",
+        "\n",
+        "###OS Module Use\n",
+        ">From reading or writing a file to shut down your system using Python, the OS module can be used in any task that depends on your system’s operating system.\n",
+        "\n",
+        "###To shutdown the computer with Python, be sure to ***save and close all running files*** except the code editor where you wrote the Python program to shutdown th system. \n",
+        "\n",
+        "The Code below Demostrates how to shutdown the computer using Python."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "XIVKb2_Lt4gW"
+      },
+      "source": [
+        "import os\n",
+        "def shutdown_PC():\n",
+        "    os.system(\"shutdown /s /t 1\")\n",
+        "shutdown_PC()"
+      ],
+      "execution_count": null,
+      "outputs": []
+    }
+  ]
+}
\ No newline at end of file
diff --git a/Python/Utility/Shutdown Computer/ShutdownComputerUsingPython.py b/Python/Utility/Shutdown Computer/ShutdownComputerUsingPython.py
new file mode 100644
index 00000000..3855f4ac
--- /dev/null
+++ b/Python/Utility/Shutdown Computer/ShutdownComputerUsingPython.py	
@@ -0,0 +1,4 @@
+import os
+def shutdown_PC():
+    os.system("shutdown /s /t 1")
+shutdown_PC()
\ No newline at end of file
diff --git a/Python/Utility/Text to Handwriting/TextToHandwritingUsingPython.ipynb b/Python/Utility/Text to Handwriting/TextToHandwritingUsingPython.ipynb
new file mode 100644
index 00000000..8c4284f6
--- /dev/null
+++ b/Python/Utility/Text to Handwriting/TextToHandwritingUsingPython.ipynb	
@@ -0,0 +1,63 @@
+{
+  "nbformat": 4,
+  "nbformat_minor": 0,
+  "metadata": {
+    "colab": {
+      "name": "TextToHandwritingUsingPython.ipynb",
+      "provenance": []
+    },
+    "kernelspec": {
+      "name": "python3",
+      "display_name": "Python 3"
+    },
+    "language_info": {
+      "name": "python"
+    }
+  },
+  "cells": [
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "Rf6jsJqDzSbb"
+      },
+      "source": [
+        "#Text to Handwriting using Python\n",
+        "To convert text to handwriting, there is a library known as **PyWhatKit** in Python. It provides a lot of useful features, one can explore them [here](https://pypi.org/project/pywhatkit/).\n",
+        "\n",
+        ">To Install PyWhatKit, Run the following command in Terminal or Command prompt:\n",
+        ">`pip install pywhatkit`\n",
+        "\n",
+        "In the code below, I first imported the pywhatkit and OpenCV libraries in Python. Here pywhatkit is used to convert text to handwritten text and OpenCV is used to visualize the image in which we are writing handwritten text."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "KmKR8Qr0wqaO"
+      },
+      "source": [
+        "!pip install pywhatkit"
+      ],
+      "execution_count": null,
+      "outputs": []
+    },
+    {
+      "cell_type": "code",
+      "metadata": {
+        "id": "HtrQdmOl0p52"
+      },
+      "source": [
+        "import pywhatkit as kit\n",
+        "import cv2\n",
+        "\n",
+        "kit.text_to_handwriting(\"Hello, Welcome to Text to Handwriting Program.\", save_to=\"handwriting.png\")\n",
+        "img = cv2.imread(\"handwriting.png\")\n",
+        "cv2.imshow(\"Text to Handwriting\", img)\n",
+        "cv2.waitKey(0)\n",
+        "cv2.destroyAllWindows()"
+      ],
+      "execution_count": null,
+      "outputs": []
+    }
+  ]
+}
\ No newline at end of file
diff --git a/Python/Utility/Text to Handwriting/TextToHandwritingUsingPython.py b/Python/Utility/Text to Handwriting/TextToHandwritingUsingPython.py
new file mode 100644
index 00000000..170f3bef
--- /dev/null
+++ b/Python/Utility/Text to Handwriting/TextToHandwritingUsingPython.py	
@@ -0,0 +1,8 @@
+import pywhatkit as kit
+import cv2
+
+kit.text_to_handwriting("Hello, Welcome to Text to Handwriting Program.", save_to="handwriting.png")
+img = cv2.imread("handwriting.png")
+cv2.imshow("Text to Handwriting", img)
+cv2.waitKey(0)
+cv2.destroyAllWindows()
\ No newline at end of file
diff --git a/Python/basic-concept/1_type_data.py b/Python/basic-concept/1_type_data.py
new file mode 100644
index 00000000..0c53b0f6
--- /dev/null
+++ b/Python/basic-concept/1_type_data.py
@@ -0,0 +1,44 @@
+"""
+author: https://github.com/alif-arrizqy
+lesson: type data in python
+"""
+
+# text = str
+# numeric = int, float
+# sequence = list, tuple, range
+# mapping = dict
+# boolean = bool
+
+# str
+x = "Hello World"
+print(x)
+
+# int 
+x = 12
+print(x)
+
+# float
+x = 21.2
+print(x)
+
+# list
+x = ["apple", "banana", "watermelon"]
+print(x)
+
+# tuple
+x = ("apple", "banana", "watermelon")
+print(x)
+
+# range
+x = range(4)
+print(x)
+
+# dict
+x = {"name": "alif", "age": 22}
+print(x)
+
+# boolean
+x = True
+print(x)
+y = False
+print(y)
\ No newline at end of file
diff --git a/Python/basic-concept/2_variable.py b/Python/basic-concept/2_variable.py
new file mode 100644
index 00000000..8df507c7
--- /dev/null
+++ b/Python/basic-concept/2_variable.py
@@ -0,0 +1,11 @@
+"""
+author: https://github.com/alif-arrizqy
+lesson: basic python - print
+"""
+
+# case 1
+var = "Hello World"
+print(var)
+
+# case 2
+print("Hello World")
\ No newline at end of file
diff --git a/Python/basic-concept/3_if_else_statement.py b/Python/basic-concept/3_if_else_statement.py
new file mode 100644
index 00000000..bae41456
--- /dev/null
+++ b/Python/basic-concept/3_if_else_statement.py
@@ -0,0 +1,13 @@
+"""
+author: https://github.com/alif-arrizqy
+lesson: if else statement
+"""
+
+x = 12
+y = 6
+
+if x > y:
+    print("X is greater than Y")
+else:
+    print("X is less than Y")
+
diff --git a/Python/basic-concept/4_boolean.py b/Python/basic-concept/4_boolean.py
new file mode 100644
index 00000000..cd01b225
--- /dev/null
+++ b/Python/basic-concept/4_boolean.py
@@ -0,0 +1,13 @@
+"""
+author: https://github.com/alif-arrizqy
+lesson: boolean logic
+"""
+
+print(20 > 8)
+# output: True
+
+print(8 > 20)
+# output: False
+
+print(9==9)
+# output: True
\ No newline at end of file
diff --git a/Python/basic-concept/5_operators.py b/Python/basic-concept/5_operators.py
new file mode 100644
index 00000000..b2651e59
--- /dev/null
+++ b/Python/basic-concept/5_operators.py
@@ -0,0 +1,81 @@
+"""
+author: https://github.com/alif-arrizqy
+lesson: Operators in python
+"""
+
+# Python Aritmethics Operators
+"""
++ = addition
+- = substraction
+* = multiplication
+/ = division
+% = modulus
+** = exponentiation
+// = floor division
+"""
+
+# +
+print(12 + 5)
+# -
+print(12 - 5)
+# *
+print(5 * 4)
+# /
+print(20 / 2)
+# %
+print(5 / 2)
+# **
+print(2**5)
+# same as 2*2*2*2*2
+# floor division
+print(15 // 2) 
+#the floor division // rounds the result down to the nearest whole number
+
+# python Assignment Operators
+"""
+= 
++=
+-=
+*=
+/=
+"""
+
+# example
+x = 4
+x += 2
+x -= 2
+x *= 2
+x /= 2
+
+
+# Python Comparison Operators
+"""
+=== equal
+!= not equal
+> greater than
+< greater than
+>= greater than or equal to
+<= less than or equal to
+"""
+
+# example
+x = 20
+y = 6
+
+x == y
+x != y
+x > y
+x < y
+x >= y
+y <= y
+
+# Python Logical Operators
+"""
+and
+or
+not
+"""
+
+x < 5 and x < 10
+x > 4 or x > 6
+not(x < 2 and x < 10)
\ No newline at end of file
diff --git a/Python/basic-concept/6_while_loop.py b/Python/basic-concept/6_while_loop.py
new file mode 100644
index 00000000..af8c1031
--- /dev/null
+++ b/Python/basic-concept/6_while_loop.py
@@ -0,0 +1,9 @@
+"""
+author: https://github.com/alif-arrizqy
+lesson: while loops in python
+With the while loop we can execute a set of statements as long as a condition is true.
+"""
+
+x = 8
+while x < 12:
+    print(x)
\ No newline at end of file
diff --git a/Python/basic-concept/7_for_loop.py b/Python/basic-concept/7_for_loop.py
new file mode 100644
index 00000000..9e2fec73
--- /dev/null
+++ b/Python/basic-concept/7_for_loop.py
@@ -0,0 +1,10 @@
+"""
+author: https://github.com/alif-arrizqy
+lesson: for loop python - range
+"""
+
+for x  in range(13):
+    print(x)
+
+for y in range(1, 10):
+    print(y)
\ No newline at end of file
diff --git a/Python/commonElementsInaList.py b/Python/commonElementsInaList.py
new file mode 100644
index 00000000..2553f8be
--- /dev/null
+++ b/Python/commonElementsInaList.py
@@ -0,0 +1,14 @@
+#read two lists a and b ,write a function that returns a list that contains only the elements that are common to both the lists.
+
+a=[]
+b=[]
+newlist=[]
+
+for i in a:
+    if i in b:
+        if i in newlist:
+            continue
+        newlist.append(i)
+        
+        
+print(newlist)
diff --git a/Python/count_words_with_specific_alphabet_in_file.py b/Python/count_words_with_specific_alphabet_in_file.py
new file mode 100644
index 00000000..e114c480
--- /dev/null
+++ b/Python/count_words_with_specific_alphabet_in_file.py
@@ -0,0 +1,14 @@
+# First we define a variable "to_find" which contains the alphabet to be checked for in the file
+# fo is the file which is to be read.
+
+
+to_find="e"
+fo = open('E:/file1.txt' ,'r+')
+count=0
+
+for line in fo:
+    for word in line.split():
+        if word.find(to_find)!=-1:
+            count=count+1
+                
+print(count)
diff --git a/Python/fibonacci.py b/Python/fibonacci.py
new file mode 100644
index 00000000..9cdc84bf
--- /dev/null
+++ b/Python/fibonacci.py
@@ -0,0 +1,17 @@
+# Find fibonacci number with given index
+def fibonacci(idx):
+    if idx < 0:
+        print("Index can not be less than 0")
+    # First fibonacci Number = 0
+    elif idx == 0:
+        return 0
+    # Second fibonacci Number = 1
+    elif idx == 1:
+        return 1
+        # Next fibonacci number is sum of previous two fibonacci numbers
+    else:
+        return fibonacci(idx-1) + fibonacci(idx-2)
+
+
+index = int(input("Enter index: "))
+print(fibonacci(index))
diff --git a/Python/fibonacci_series.py b/Python/fibonacci_series.py
new file mode 100644
index 00000000..8b84bb7f
--- /dev/null
+++ b/Python/fibonacci_series.py
@@ -0,0 +1,34 @@
+# given a variable n (user input), the program
+# prints fibinacci series upto n-numbers
+
+def fibonacci(n):
+    """A simple function to print fibonacci sequence of n-numbers"""
+
+    # check if n is correct
+    # we can only allow n >=1 and n as an integer number
+    try:
+        n = int(n)
+    except ValueError:
+        raise TypeError("fibonacci series is only available for n-digits, where n is an integer, and n >= 1")
+        
+    if n < 1:
+        raise ValueError("fibonacci series is only available for n-digits, where n is an integer, and n >= 1")
+        
+    # when we are assured that the value of n is correct,
+    # we can find the fibonacci sequence
+    # and finally return it as a string seperated by space
+    if n == 1:
+        series = [0]
+    elif n == 2:
+        series = [0, 1]
+    else:
+        series = [0, 1]
+        for _ in range(n - 2):
+            series.append(sum(series[-2:]))
+            
+    return " ".join(map(str, series))
+
+
+if __name__ == "__main__":
+    n = input("Enter the Number of Elements of Fibonacci Series (n >= 1, and type(n) = int): ")
+    print(fibonacci(n))
diff --git a/Python/greatestAndSmallestInput.py b/Python/greatestAndSmallestInput.py
new file mode 100644
index 00000000..5ad4414b
--- /dev/null
+++ b/Python/greatestAndSmallestInput.py
@@ -0,0 +1,23 @@
+n = int(input("please enter the number of inputs => "))
+s=0
+for a in range(0,n):
+    s = int(input("please enter a number => "))
+    d = s
+    if a == 0:
+      m=s
+      g=s
+      largest = m
+      smallest = g
+    #m = s
+    if d > m:
+        largest = d
+        m = d
+    if d < g:
+      smallest = d
+      g = d
+
+    #print(s)
+
+if n>0:
+    print("largest  => ",largest)
+    print("smallest =>",smallest)
diff --git a/Python/haversine.py b/Python/haversine.py
new file mode 100644
index 00000000..303d3fe5
--- /dev/null
+++ b/Python/haversine.py
@@ -0,0 +1,32 @@
+# distance between two points in xy-coourdinate reference system
+# can be calculated using euclidean, manhattan and other known
+# metrices. however, distance between two points on earth has to
+# be calculated using haversine distance, since earth is not flat
+# and while calculating distance, the curvature has to be considered.
+# the given function calculates haversine distance using `numpy` library
+# and is inspired from sklearns haversine distance calculation function:
+# https://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.haversine_distances.html
+
+import numpy as np
+
+def haversineDistance(lon1, lat1, lon2, lat2):
+    """Calculate the Distance b/w two Geographic Points"""
+
+    dlon = lon2 - lon1 # delta Longitude
+    dlat = lat2 - lat1 # delta Latitude
+
+    a = np.sin(dlat/2.0)**2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon/2.0)**2
+    c = 2 * np.arcsin(np.sqrt(a))
+
+    R = 6371 # radius of earth
+
+    return R * c # distance in kilometer
+
+
+if __name__ == "__main__":
+    lon1 = float(input("Enter Point-1's Longitude: "))
+    lat1 = float(input("Enter Point-1's Latitude: "))
+    lon2 = float(input("Enter Point-2's Longitude: "))
+    lat2 = float(input("Enter Point-2's Latitude: "))
+
+    print(f"Distance b/w {lon1, lat1} and {lon2, lat2} is {haversineDistance(lon1, lat1, lon2, lat2)} km.")
diff --git a/Python/hello_world.py b/Python/hello_world.py
deleted file mode 100644
index 316c8899..00000000
--- a/Python/hello_world.py
+++ /dev/null
@@ -1,5 +0,0 @@
-# This program outputs Hello World! to the terminal
-# the print() statement is used with "Hello World!" as an argument.
-# Defining a variable with string "Hello World!" and then using it as the argument would also work.
-
-print ("Hello World!")
diff --git a/Python/lucas_series.py b/Python/lucas_series.py
new file mode 100644
index 00000000..4e2ca842
--- /dev/null
+++ b/Python/lucas_series.py
@@ -0,0 +1,44 @@
+# given a variable n (user input), the program
+# prints lucas series upto n-numbers
+# BACKGROUND: Lucas series is similar to fibonacci series, except
+# the first two elements of the series can be anything
+
+def lucas(n, elem):
+    """A simple function to print lucas series of n-numbers"""
+
+    # check if n is correct
+    # we can only allow n >=3 and n as an integer number
+    # since we always expect user to provide two elements
+    # these two elements will be the starting number of the series
+    try:
+        n = int(n)
+    except ValueError:
+        raise TypeError("lucas series is only available for n-digits, where n is an integer, and n >= 3")
+        
+    if n < 3:
+        raise ValueError("lucas series is only available for n-digits, where n is an integer, and n >= 1")
+
+    # evaluate user-input elements
+    try:
+        elem = eval(elem)
+    except SyntaxError:
+        raise TypeError("unable to understand type of first two elements of the series")
+
+    if type(elem) == tuple:
+        # convert `elem` to list
+        # so that we can append new values into list
+        elem = list(elem)
+        
+    # when we are assured that the value of n is correct,
+    # we can now calculate the lucas series upto n-elements
+    # and finally return it as a string seperated by space
+    for _ in range(n - 2):
+        elem.append(sum(elem[-2:]))
+            
+    return " ".join(map(str, elem))
+
+
+if __name__ == "__main__":
+    n = input("Enter the Number of Elements of Lucas Series (n >= 3, and type(n) = int): ")
+    elememnts = input("Enter the First Two Elements of Lucas Series (example input `[1, 2]`, `(1, 2)`, `1, 2`): ")
+    print(lucas(n, elememnts))
diff --git a/Python/occurenceOfAlphabet.py b/Python/occurenceOfAlphabet.py
new file mode 100644
index 00000000..318ac621
--- /dev/null
+++ b/Python/occurenceOfAlphabet.py
@@ -0,0 +1,12 @@
+# Counts the number of times the alphabet defined as "inp"
+# occurs in the string "str1"
+
+
+str1 = input("pls input string  =>")
+inp = input("character  =>")
+x=len(str1)
+sumd=0
+for i in range(0,x):
+    if str1[i]==inp:
+        sumd=sumd+1
+print("No. of ocurences =",sumd)
diff --git a/Python/palindrome.py b/Python/palindrome.py
new file mode 100644
index 00000000..5365cb7c
--- /dev/null
+++ b/Python/palindrome.py
@@ -0,0 +1,12 @@
+# First we take an input which is assigned to the variable "text"
+# Then we use the python string slice method to reverse the string
+# When both the strings are compared and an appropriate output is made
+
+
+text=input("Enter the string to be checked: ")
+palindrom_text= text[::-1]
+
+if text==palindrom_text:
+    print("Palindrome")
+else:
+    print("Not Palindrome")
diff --git a/Python/primenumber.py b/Python/primenumber.py
new file mode 100644
index 00000000..052214f7
--- /dev/null
+++ b/Python/primenumber.py
@@ -0,0 +1,18 @@
+
+def primeNumber(n):
+    if (n==2):
+        return True
+    if n==1  or n%2==0:
+        return False
+    i=2
+    while i*i<=n:
+        if n%i==0:
+            return False
+        i+=1
+    return True
+if __name__=="__main__":
+    n=int(input(""))
+    if primeNumber(n):
+        print(f"{n} is a prime number")
+    else:
+        print(f"{n} is not a prime number")
\ No newline at end of file
diff --git a/Python/pyramid.py b/Python/pyramid.py
new file mode 100644
index 00000000..e7c64913
--- /dev/null
+++ b/Python/pyramid.py
@@ -0,0 +1,22 @@
+# Python 3.x code to demonstrate star pattern
+ 
+# Function to demonstrate printing pattern
+def pypart(n):
+     
+    # outer loop to handle number of rows
+    # n in this case
+    for i in range(0, n):
+     
+        # inner loop to handle number of columns
+        # values changing acc. to outer loop
+        for j in range(0, i+1):
+         
+            # printing stars
+            print("* ",end="")
+      
+        # ending line after each row
+        print("\r")
+ 
+# Driver Code
+n = 5
+pypart(n)
diff --git a/Python/replace.py b/Python/replace.py
new file mode 100644
index 00000000..98e460bc
--- /dev/null
+++ b/Python/replace.py
@@ -0,0 +1,20 @@
+def replace(str,a,b):
+    if len(str) == 1:
+        if str == a:
+            return b
+        else:
+            return str
+    
+    if str[0] == a:
+        return b + replace(str[1:],a,b)
+    else:
+        return str[0] + replace(str[1:],a,b)
+
+str = 'Hacktoburfest2021'
+#Opops there is a mistake in the spelling , Let's replace
+
+replaced_str = replace(str,'u','e')
+
+print(replaced_str) #Output = Hacktoberfest2021
+
+# we have replaced it 🥳🥳🥳
diff --git a/Python/serial.py b/Python/serial.py
new file mode 100644
index 00000000..dda8ffe5
--- /dev/null
+++ b/Python/serial.py
@@ -0,0 +1,14 @@
+import serial
+# https://pyserial.readthedocs.io/en/latest/
+
+def read_Serial(serial_device):
+    # gets data from serial port
+    line_read = serial_device.readline()
+    return line_read
+
+if (__name__) == "__main__":
+    # Must define serial port here, currently it is COM3
+    serial_device = serial.Serial(port='COM3')
+    while(1):
+        if serial_device.in_waiting:
+            print(read_serial())
diff --git a/Python/sum of two number.py b/Python/sum of two number.py
new file mode 100644
index 00000000..c200c161
--- /dev/null
+++ b/Python/sum of two number.py	
@@ -0,0 +1,3 @@
+a=int(input ("first number"))
+b=int(input ("second number"))
+print("Addition of",a,"+",b,"is",a+b)
\ No newline at end of file
diff --git a/Python/urlshortner.py b/Python/urlshortner.py
new file mode 100644
index 00000000..ec31e07b
--- /dev/null
+++ b/Python/urlshortner.py
@@ -0,0 +1,14 @@
+import urllib
+import requests
+import json
+
+
+def shorten(link):
+    key = '' # Your cutt.ly api key
+    url = urllib.parse.quote(link)
+    r = requests.get(f'http://cutt.ly/api/api.php?key={key}&short={url}')
+    y = json.loads(r.text)
+    return y['url']['shortLink']
+
+url = input("Enter url you want to shorten=>")
+print("Your shortened url:", shorten(url))
diff --git a/README.md b/README.md
index 9d323259..26cca4e5 100644
--- a/README.md
+++ b/README.md
@@ -1,109 +1,123 @@
-[![Hacktoberfest 2021](./assets/hacktober.png)](https://hacktoberfest.digitalocean.com/)
-## [Hactoberfest FAQs](https://hacktoberfest.digitalocean.com/faq)
-# Programming-Basics
+
+# <h1 align="center">Programming-Basics</h1>
 <div align="center">
 
 ![Hactoberfest](https://img.shields.io/badge/Hactoberfest-%E2%9D%A4-red)    
 ![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-orange.svg)
 ![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square) 
 ![Open Source Love](https://img.shields.io/badge/Open%20Source-%E2%9D%A4-red)
-![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)
-![Begginers Friendly](https://img.shields.io/badge/Begginer%20Friendly%20-Yes-orange)
-[![GitHub issues](https://img.shields.io/github/issues/Astrodevil/Programming-Basics)](https://github.com/Astrodevil/Programming-Basics/issues)
-[![GitHub forks](https://img.shields.io/github/forks/Astrodevil/Programming-Basics)](https://github.com/Astrodevil/Programming-Basics/network)
-[![GitHub stars](https://img.shields.io/github/stars/Astrodevil/Programming-Basics)](https://github.com/Astrodevil/Programming-Basics/stargazers)
+![Contributions Welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)
+![Beginners Friendly](https://img.shields.io/badge/Beginner%20Friendly%20-Yes-orange)
+[![GitHub Issues](https://img.shields.io/github/issues/Astrodevil/Programming-Basics)](https://github.com/Astrodevil/Programming-Basics/issues)
+[![GitHub Forks](https://img.shields.io/github/forks/Astrodevil/Programming-Basics)](https://github.com/Astrodevil/Programming-Basics/network)
+[![GitHub Stars](https://img.shields.io/github/stars/Astrodevil/Programming-Basics)](https://github.com/Astrodevil/Programming-Basics/stargazers)
 
 </div>
 
 # About❓
-Want to start your open-source journey? You are at right place🎯
+Want To Start your Open-Source Journey Without Facing Difficulties?,If Yes, Then You Are at The Right Place!🎯
+
+
+**Don't Know How to Begin Your Journey in Hacktober Fest? Follow Our [Tutorials](https://github.com/Astrodevil/Programming-Basics/blob/main/assets/hacktoberfest-guide.md).**
 
-This project contains basic solutions, source codes, book pdfs related to different programming languages🤗. As everyone is learning one or many programming languages, so contribution to this project will be very easy for you.
+This Project Contains Basic Solutions, Source Codes, Projects, Games, Book Pdfs related to Different Programming Languages🤗. As Everyone is Learning One or More Programming Languages, So Contribution to This Project Will be Very Easy for You!.
 
-You can also take help from this project towards your learning or you can contribute to make this more helpful for others.
 
-**So, What are you waiting for?**
+You can Also Take Help from This Project Towards Your Learning or You Can Contribute to Make This More Helpful for Others.
+
+**So, What are you Waiting For?**
+# This Project is a part of the following Open Source Program❤️
+<p align="center">
+<table>
+<tbody><tr>
+<td align="center"><a href="https://hacktoberfest.digitalocean.com/"  target="_blank"><img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSzxUuUFuwuTwouTwDseIuzwkLBsDa6Z_0BzYX_x0jpqA&s" alt="Hacktoberfest" width="200"/><br><sub><b> Hacktoberfest 2022 </b></sub></a></td> </a></td>
+</table>
+    &nbsp;&nbsp;
+
+**[Hactoberfest FAQs](https://hacktoberfest.digitalocean.com/faq)**
 
 # Contributing Guidelines📝
-Thank you for your interest in contributing to our Repo! Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
+Thanks a Ton for Showing Your Interest in Contributing to our Repo! Pull requests are Welcome. For Major Changes, Please Open an Issue First to Discuss What you would like to Change.
 
 
-To start contributing, follow the below guidelines: 
+To Start Contributing To This Repo, Follow the Below Guidelines: 
 
-**1.**  **Star** and **Fork** [this](https://github.com/Astrodevil/Programming-Basics) repository.
+**1.**  **Star** and **Fork** [this](https://github.com/Astrodevil/Programming-Basics) Repository.
 
-**2.**  Clone your forked copy of the project.
+**2.**  Clone your Forked Copy of the Project.
 
 ```
 git clone https://github.com/<your_user_name>/Programming-Basics.git
 ```
 
-**3.** Navigate to the project directory :file_folder: .
+**3.** Navigate to The Project Directory :file_folder: .
 
 ```
 cd Programming-Basics
 ```
 
-**4.** Add a reference(remote) to the original repository.
+**4.** Add a Reference(remote) to the Original Repository.
 
 ```
 git remote add upstream https://github.com/Astrodevil/Programming-Basics.git 
 ```
 
-**5.** Check the remotes for this repository.
+**5.** Check the Remotes for This Repository.
 
 ```
 git remote -v
 ```
 
-**6.** Always take a pull from the upstream repository to your master branch to keep it at par with the main project(updated repository).
+**6.** Always Take a Pull from the Upstream Repository to your Master Branch to Keep it at par with the Main Project(The Updated Repository).
 
 ```
 git pull upstream main
 ```
 
-**7.** Create a new branch.
+**7.** Create a New Branch.
 
 ```
 git checkout -b <your_branch_name>
 ```
 
-**8.** Perfom your desired changes to the code base.
+**8.** Perfom Your Desired Changes to the Code Base.
 
-**9.** Track your changes:heavy_check_mark: .
+**9.** Track your Changes:heavy_check_mark: .
 
 ```
 git add . 
 ```
 
-**10.** Commit your changes .
+**10.** Commit your Changes .
 
 ```
-git commit -m "Relevant message"
+git commit -m "(Type a Relevant and Appropriate Message)"
 ```
 
-**11.** Push the committed changes in your feature branch to your remote repo.
+**11.** Push the Committed Changes in your Feature Branch to your Remote Repo.
 
 ```
 git push -u origin <your_branch_name>
 ```
 
-**12.** To create a pull request, click on `compare and pull requests`.
+**12.** To Create a Pull Request, Click on  `Compare and Pull requests`.
+
+**13.** Add Appropriate Title and Description to your Pull Request Explaining your Changes and Efforts Done.
 
-**13.** Add appropriate title and description to your pull request explaining your changes and efforts done.
+**14.** Click on  `Create Pull Request`.
 
-**14.** Click on `Create Pull Request`.
 
+**15.** Wooohoo! You have Successfully Made a PR to the Programming-Basics :boom: . Wait for your Submission to be Accepted and Your PR to be Merged!.
 
-**15.** Woohoo! You have made a PR to the Programming-Basics :boom: . Wait for your submission to be accepted and your PR to be merged.
+**Not Able to Understand How to Contribute? Let's Go Through [Simple Tutorials](https://github.com/Astrodevil/Programming-Basics/blob/main/assets/hacktoberfest-guide.md) on How to Begin.**
 
-**Thank you for your interest in contributing to our Repo!🏼**
+**Thanks a Ton for Showing Your Interest in Contributing to Our Repo!🏼**
 
-**Kudos to you🎈**
+**Kudos to you!🎈**
 
 
 
-# Our valuable Contributors👩‍💻👨‍💻 :
+# Our Valuable Contributors👩‍💻👨‍💻 :
 <a href="https://github.com/Astrodevil/Programming-Basics/graphs/contributors">
   <img src="https://contributors-img.web.app/image?repo=Astrodevil/Programming-Basics" />
 </a>
diff --git a/Useful-Books/C++/C++ programming today by Johnston, Barbara (z-lib.org).pdf b/Useful-Books/C++/C++ programming today by Johnston, Barbara (z-lib.org).pdf
new file mode 100644
index 00000000..0ba443ad
Binary files /dev/null and b/Useful-Books/C++/C++ programming today by Johnston, Barbara (z-lib.org).pdf differ
diff --git a/Useful-Books/C++/CP_handbook.pdf b/Useful-Books/C++/CP_handbook.pdf
new file mode 100644
index 00000000..ab4448e3
Binary files /dev/null and b/Useful-Books/C++/CP_handbook.pdf differ
diff --git a/Useful-Books/C++/D.S. Malik - C++ Programming. Program Design including Data Structures-Cengage (2018).pdf b/Useful-Books/C++/D.S. Malik - C++ Programming. Program Design including Data Structures-Cengage (2018).pdf
new file mode 100644
index 00000000..036cec8f
Binary files /dev/null and b/Useful-Books/C++/D.S. Malik - C++ Programming. Program Design including Data Structures-Cengage (2018).pdf differ
diff --git a/Useful-Books/C++/Data_Structures_and_Algorithms_in_C_Plus_Plus_Adam_Drozdek.pdf b/Useful-Books/C++/Data_Structures_and_Algorithms_in_C_Plus_Plus_Adam_Drozdek.pdf
new file mode 100644
index 00000000..d762e5eb
Binary files /dev/null and b/Useful-Books/C++/Data_Structures_and_Algorithms_in_C_Plus_Plus_Adam_Drozdek.pdf differ
diff --git a/assets/Website/img/HacktoberFest 2021.png b/assets/Website/img/HacktoberFest 2021.png
new file mode 100644
index 00000000..bb8e04e5
Binary files /dev/null and b/assets/Website/img/HacktoberFest 2021.png differ
diff --git a/assets/Website/script.js b/assets/Website/script.js
new file mode 100644
index 00000000..425f4c5a
--- /dev/null
+++ b/assets/Website/script.js
@@ -0,0 +1 @@
+!function(){window;const e=document.documentElement;if(e.classList.remove("no-js"),e.classList.add("js"),document.body.classList.contains("has-animations")){(window.sr=ScrollReveal()).reveal(".reveal-on-scroll",{duration:600,distance:"20px",easing:"cubic-bezier(0.5, -0.01, 0, 1.005)",origin:"bottom",interval:100})}}();
diff --git a/assets/Website/style.css b/assets/Website/style.css
new file mode 100644
index 00000000..2e5f5ac9
--- /dev/null
+++ b/assets/Website/style.css
@@ -0,0 +1,1494 @@
+/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */
+@import url("https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap");
+code {
+  padding-left: 2px;
+}
+header {
+  background-color: #ffc898;
+}
+/*  Header background color initialy: FEAB6A */
+
+/* F9F3DF */
+html {
+  line-height: 1.15;
+  -ms-text-size-adjust: 100%;
+  -webkit-text-size-adjust: 100%;
+}
+body {
+  margin: 0;
+}
+article,
+aside,
+footer,
+header,
+nav,
+section {
+  display: block;
+}
+h1 {
+  font-size: 2em;
+  margin: 0.67em 0;
+  font-family: "Kaushan Script", cursive !important;
+  font-weight: 500;
+  font-size: 50px;
+}
+figcaption,
+figure,
+main {
+  display: block;
+}
+figure {
+  margin: 1em 40px;
+}
+hr {
+  -webkit-box-sizing: content-box;
+  box-sizing: content-box;
+  height: 0;
+  overflow: visible;
+}
+pre {
+  font-family: monospace, monospace;
+  font-size: 1em;
+}
+a {
+  background-color: transparent;
+  -webkit-text-decoration-skip: objects;
+}
+abbr[title] {
+  border-bottom: none;
+  text-decoration: underline;
+  -webkit-text-decoration: underline dotted;
+  text-decoration: underline dotted;
+}
+b,
+strong {
+  font-weight: inherit;
+}
+b,
+strong {
+  font-weight: bolder;
+}
+code,
+kbd,
+samp {
+  font-family: monospace, monospace;
+  font-size: 1em;
+}
+dfn {
+  font-style: italic;
+}
+mark {
+  background-color: #ff0;
+  color: #000;
+}
+small {
+  font-size: 80%;
+}
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+sub {
+  bottom: -0.25em;
+}
+sup {
+  top: -0.5em;
+}
+audio,
+video {
+  display: inline-block;
+}
+audio:not([controls]) {
+  display: none;
+  height: 0;
+}
+img {
+  border-style: none;
+}
+svg:not(:root) {
+  overflow: hidden;
+}
+button,
+input,
+optgroup,
+select,
+textarea {
+  font-family: sans-serif;
+  font-size: 100%;
+  line-height: 1.15;
+  margin: 0;
+}
+button,
+input {
+  overflow: visible;
+}
+button,
+select {
+  text-transform: none;
+}
+[type="reset"],
+[type="submit"],
+button,
+html [type="button"] {
+  -webkit-appearance: button;
+}
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner,
+button::-moz-focus-inner {
+  border-style: none;
+  padding: 0;
+}
+[type="button"]:-moz-focusring,
+[type="reset"]:-moz-focusring,
+[type="submit"]:-moz-focusring,
+button:-moz-focusring {
+  outline: 1px dotted ButtonText;
+}
+fieldset {
+  padding: 0.35em 0.75em 0.625em;
+}
+legend {
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  color: inherit;
+  display: table;
+  max-width: 100%;
+  padding: 0;
+  white-space: normal;
+}
+progress {
+  display: inline-block;
+  vertical-align: baseline;
+}
+textarea {
+  overflow: auto;
+}
+[type="checkbox"],
+[type="radio"] {
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  padding: 0;
+}
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+[type="search"] {
+  -webkit-appearance: textfield;
+  outline-offset: -2px;
+}
+[type="search"]::-webkit-search-cancel-button,
+[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+::-webkit-file-upload-button {
+  -webkit-appearance: button;
+  font: inherit;
+}
+details,
+menu {
+  display: block;
+}
+summary {
+  display: list-item;
+}
+canvas {
+  display: inline-block;
+}
+template {
+  display: none;
+}
+[hidden] {
+  display: none;
+}
+blockquote,
+caption,
+dd,
+dl,
+fieldset,
+figure,
+form,
+hr,
+ol,
+pre,
+table,
+td,
+th,
+ul {
+  margin: 0;
+  padding: 0;
+}
+[tabindex="-1"]:focus {
+  outline: 0;
+}
+body,
+button,
+input,
+select,
+textarea {
+  -webkit-font-smoothing: antialiased;
+  -webkit-text-size-adjust: 100%;
+}
+a:active,
+a:hover {
+  outline: 0;
+}
+[role="button"],
+a,
+button,
+input,
+label,
+select,
+textarea {
+  -ms-touch-action: manipulation;
+  touch-action: manipulation;
+}
+ol,
+ul {
+  margin-bottom: 0.8rem;
+}
+ol ol,
+ol ul,
+ul ol,
+ul ul {
+  margin-bottom: 0;
+}
+code,
+kbd,
+pre,
+samp {
+  font-family: Monaco, Menlo, Consolas, monospace;
+}
+b,
+strong {
+  line-height: inherit;
+}
+em,
+i {
+  font-style: italic;
+  line-height: inherit;
+}
+table {
+  display: table;
+  max-width: 100%;
+}
+td,
+th {
+  line-height: 1.6rem;
+  vertical-align: middle;
+}
+th {
+  text-align: left;
+}
+form {
+  font-size: 1rem;
+}
+fieldset {
+  border: 0;
+  min-width: 0;
+}
+legend {
+  line-height: inherit;
+  margin: 0;
+}
+input,
+optgroup,
+select,
+textarea {
+  line-height: inherit;
+}
+input,
+label,
+select {
+  vertical-align: middle;
+}
+input[type="file"] {
+  display: block;
+  width: 100%;
+}
+textarea {
+  height: auto;
+  resize: vertical;
+}
+input:focus,
+select:focus,
+textarea:focus {
+  outline: 0;
+}
+.select select:focus:-moz-focusring {
+  color: transparent;
+  text-shadow: 0 0 0 #000;
+}
+select[multiple],
+select[size] {
+  height: auto;
+}
+.select--list:after {
+  content: none !important;
+}
+select::-ms-expand {
+  display: none;
+}
+option {
+  color: #262b3a;
+  background-color: #fff;
+}
+fieldset[disabled] input,
+input[disabled],
+input[readonly] {
+  cursor: not-allowed;
+  opacity: 1;
+  pointer-events: none;
+}
+button {
+  line-height: inherit;
+  vertical-align: middle;
+}
+@media screen and (max-width: 50em) {
+  input,
+  select,
+  textarea {
+    font-size: 16px;
+  }
+}
+embed,
+iframe,
+img,
+object {
+  display: inline-block;
+  vertical-align: middle;
+}
+iframe {
+  border: 0;
+}
+img {
+  border: 0;
+  font-style: italic;
+  height: auto;
+  -ms-interpolation-mode: bicubic;
+}
+svg {
+  max-height: 100%;
+}
+.gm-style img {
+  max-width: none;
+}
+html {
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  font-family: Montserrat, Avenir, "Avenir Next", Trebuchet, Verdana, sans-serif;
+  font-size: 14px;
+  font-style: normal;
+  font-weight: 400;
+  min-height: 100%;
+  -webkit-tap-highlight-color: transparent;
+}
+@media screen and (min-width: 40em) {
+  html {
+    font-size: 16px;
+  }
+}
+*,
+:after,
+:before {
+  -webkit-box-sizing: inherit;
+  box-sizing: inherit;
+}
+body {
+  background-color: #f2f2f2 !important;
+  color: #262b3a;
+  line-height: 1.6rem;
+  margin: 0;
+  padding: 0;
+  -moz-osx-font-smoothing: grayscale;
+}
+::selection {
+  background-color: #294ace;
+  color: #fff;
+  text-shadow: none;
+}
+img::selection {
+  background: 0 0;
+}
+img::-moz-selection {
+  background: 0 0;
+}
+.is-revealing {
+  visibility: hidden;
+}
+
+.btn {
+  display: inline-block;
+  margin-bottom: 1rem;
+  color: rgba(0, 0, 0, 0.8);
+  background-color: rgba(0, 0, 0, 0.08);
+  border-color: transparent;
+  border-style: solid;
+  border-width: 1px;
+  border-radius: 0.3rem;
+  transition: color 0.2s, background-color 0.2s, border-color 0.2s;
+}
+.btn:hover {
+  color: #3b3b3b;
+  text-decoration: none;
+  background-color: rgba(255, 255, 255, 0.2);
+  border-color: transparent;
+  transition: color 0.2s, background-color 0.2s, border-color 0.2s;
+}
+.btn + .btn {
+  margin-left: 1rem;
+}
+@media screen and (min-width: 64em) {
+  .btn {
+    padding: 0.75rem 1rem;
+  }
+}
+@media screen and (min-width: 42em) and (max-width: 64em) {
+  .btn {
+    padding: 0.6rem 0.9rem;
+    font-size: 0.9rem;
+  }
+}
+@media screen and (max-width: 42em) {
+  .btn {
+    display: block;
+    width: 100%;
+    padding: 0.75rem;
+    font-size: 0.9rem;
+  }
+  .btn + .btn {
+    margin-top: 1rem;
+    margin-left: 0;
+  }
+}
+.container {
+  margin-left: auto;
+  margin-right: auto;
+  max-width: 900px;
+  width: 90%;
+}
+.container--lg {
+  margin-left: auto;
+  margin-right: auto;
+  max-width: 1100px;
+  width: 90%;
+}
+canvas,
+iframe,
+img,
+svg,
+video {
+  max-width: 100%;
+}
+.logo {
+  max-height: 300px;
+}
+.download {
+  max-height: 45px;
+}
+.mentioned {
+  max-height: 80px;
+}
+.illustration--small {
+  max-height: 80px;
+}
+.icon {
+  height: 30px;
+}
+.cta-image {
+  max-height: 100px;
+}
+.form-control {
+  background-image: none;
+  border: 1px solid transparent;
+  border-radius: 7px;
+  color: #262b3a;
+  display: block;
+  font-family: Montserrat, Avenir, "Avenir Next", Trebuchet, Verdana, sans-serif;
+  font-size: 1rem;
+  line-height: 1.6rem;
+  max-width: 100%;
+  padding: 0.65rem 0.8rem 0.55rem;
+  width: 100%;
+  -moz-osx-font-smoothing: grayscale;
+}
+.label {
+  cursor: default;
+  display: inline-block;
+  max-width: 100%;
+}
+.legend {
+  display: block;
+  white-space: normal;
+  width: 100%;
+}
+.form--stacked .checkbox,
+.form--stacked .input,
+.form--stacked .label,
+.form--stacked .radio,
+.form--stacked .select,
+.form--stacked .textarea {
+  display: block;
+  width: 100%;
+}
+.form--inline .form-control {
+  display: inline-block;
+  vertical-align: middle;
+  width: auto;
+}
+.form--inline .checkbox,
+.form--inline .radio {
+  display: inline-block;
+  vertical-align: middle;
+}
+.select {
+  color: #262b3a;
+  display: block;
+  position: relative;
+}
+.select select {
+  background-color: #fff;
+  border: 1px solid #abb2c9;
+  border-radius: 7px;
+  color: #262b3a;
+  cursor: pointer;
+  display: inline-block;
+  font-family: Montserrat, Avenir, "Avenir Next", Trebuchet, Verdana, sans-serif;
+  line-height: 1.6rem;
+  margin: 0;
+  outline: 0;
+  padding: 0.65rem 0.8rem 0.55rem;
+  width: 100%;
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none;
+}
+.select select > option {
+  background-color: #fff;
+}
+.select:after {
+  border-top: 5px solid;
+  border-right: 5px solid transparent;
+  border-bottom: 5px solid transparent;
+  border-left: 5px solid transparent;
+  content: "";
+  display: inline-block;
+  height: 0;
+  margin-top: -2px;
+  pointer-events: none;
+  position: absolute;
+  right: 13px;
+  top: 50%;
+  width: 0;
+}
+::-webkit-input-placeholder {
+  color: #7380a4;
+  -webkit-font-smoothing: antialiased;
+}
+::-moz-placeholder {
+  color: #7380a4;
+  -moz-osx-font-smoothing: grayscale;
+}
+:-ms-input-placeholder {
+  color: #7380a4;
+}
+.grid-row {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-flex: 0;
+  -ms-flex: 0 1 auto;
+  flex: 0 1 auto;
+  -webkit-box-orient: horizontal;
+  -webkit-box-direction: normal;
+  -ms-flex-direction: row;
+  flex-direction: row;
+  -ms-flex-wrap: wrap;
+  flex-wrap: wrap;
+  margin: 0 -0.8rem;
+}
+@media screen and (max-width: 40em) {
+  .grid-row {
+    margin: 0 auto;
+  }
+}
+.grid-column {
+  -webkit-box-flex: 1;
+  -ms-flex: 1 0 0%;
+  flex: 1 0 0%;
+  padding: 0 0.8rem;
+}
+@media screen and (max-width: 40em) {
+  .grid-column {
+    -webkit-box-flex: 1;
+    -ms-flex-positive: 1;
+    flex-grow: 1;
+    -ms-flex-preferred-size: 100%;
+    flex-basis: 100%;
+    max-width: 100%;
+    padding: 0;
+    margin-left: 0;
+  }
+}
+.grid-row--flex-cells > .grid-column {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+}
+.grid-row--top {
+  -webkit-box-align: start;
+  -ms-flex-align: start;
+  align-items: flex-start;
+}
+.grid-row--center {
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
+}
+.grid-row--bottom {
+  -webkit-box-align: end;
+  -ms-flex-align: end;
+  align-items: flex-end;
+}
+.column--top {
+  -ms-flex-item-align: start;
+  align-self: flex-start;
+}
+.column--center {
+  -ms-flex-item-align: center;
+  align-self: center;
+}
+.column--bottom {
+  -ms-flex-item-align: end;
+  align-self: flex-end;
+}
+.span-12,
+.span-whole {
+  -ms-flex-preferred-size: 100%;
+  flex-basis: 100%;
+  max-width: 100%;
+}
+.span-6,
+.span-half {
+  -ms-flex-preferred-size: 50%;
+  flex-basis: 50%;
+  max-width: 50%;
+}
+.span-4,
+.span-one-third {
+  -ms-flex-preferred-size: 33.33333%;
+  flex-basis: 33.33333%;
+  max-width: 33.33333%;
+}
+.span-8,
+.span-two-thirds {
+  -ms-flex-preferred-size: 66.66667%;
+  flex-basis: 66.66667%;
+  max-width: 66.66667%;
+}
+.span-3,
+.span-one-fourth {
+  -ms-flex-preferred-size: 25%;
+  flex-basis: 25%;
+  max-width: 25%;
+}
+.span-two-fourths {
+  -ms-flex-preferred-size: 50%;
+  flex-basis: 50%;
+  max-width: 50%;
+}
+.span-9,
+.span-three-fourths {
+  -ms-flex-preferred-size: 75%;
+  flex-basis: 75%;
+  max-width: 75%;
+}
+.span-one-fifth {
+  -ms-flex-preferred-size: 20%;
+  flex-basis: 20%;
+  max-width: 20%;
+}
+.span-two-fifths {
+  -ms-flex-preferred-size: 40%;
+  flex-basis: 40%;
+  max-width: 40%;
+}
+.span-three-fifths {
+  -ms-flex-preferred-size: 60%;
+  flex-basis: 60%;
+  max-width: 60%;
+}
+.span-four-fifths {
+  -ms-flex-preferred-size: 80%;
+  flex-basis: 80%;
+  max-width: 80%;
+}
+.span-1 {
+  -ms-flex-preferred-size: 8.33333%;
+  flex-basis: 8.33333%;
+  max-width: 8.33333%;
+}
+.span-2 {
+  -ms-flex-preferred-size: 16.66667%;
+  flex-basis: 16.66667%;
+  max-width: 16.66667%;
+}
+.span-5 {
+  -ms-flex-preferred-size: 41.66667%;
+  flex-basis: 41.66667%;
+  max-width: 41.66667%;
+}
+.span-7 {
+  -ms-flex-preferred-size: 58.33333%;
+  flex-basis: 58.33333%;
+  max-width: 58.33333%;
+}
+.span-10 {
+  -ms-flex-preferred-size: 83.33333%;
+  flex-basis: 83.33333%;
+  max-width: 83.33333%;
+}
+.span-11 {
+  -ms-flex-preferred-size: 91.66667%;
+  flex-basis: 91.66667%;
+  max-width: 91.66667%;
+}
+.offset-12 {
+  margin-left: 100%;
+}
+.offset-6,
+.offset-half {
+  margin-left: 50%;
+}
+.offset-4,
+.offset-one-third {
+  margin-left: 33.33333%;
+}
+.offset-8,
+.offset-two-thirds {
+  margin-left: 66.66667%;
+}
+.offset-3,
+.offset-one-fourth {
+  margin-left: 25%;
+}
+.offset-two-fourths {
+  margin-left: 50%;
+}
+.offset-9,
+.offset-three-fourths {
+  margin-left: 75%;
+}
+.offset-one-fifth {
+  margin-left: 20%;
+}
+.offset-two-fifths {
+  margin-left: 40%;
+}
+.offset-three-fifths {
+  margin-left: 60%;
+}
+.offset-four-fifths {
+  margin-left: 80%;
+}
+.offset-1 {
+  margin-left: 8.33333%;
+}
+.offset-2 {
+  margin-left: 16.66667%;
+}
+.offset-5 {
+  margin-left: 41.66667%;
+}
+.offset-7 {
+  margin-left: 58.33333%;
+}
+.offset-10 {
+  margin-left: 83.33333%;
+}
+.offset-11 {
+  margin-left: 91.66667%;
+}
+.default-links a,
+.default-links a:link,
+.default-links a:visited,
+.link,
+.link:link,
+.link:visited {
+  color: #294ace;
+  text-decoration: none;
+  -webkit-transition: color 0.2s ease-out;
+  transition: color 0.2s ease-out;
+}
+.default-links a:focus,
+.default-links a:hover,
+.link:focus,
+.link:hover {
+  color: #213ba3;
+}
+.default-links a:active,
+.link:active {
+  background-image: none;
+  color: #142464;
+  outline: 0;
+  -webkit-transition: color 0.2s ease-out;
+  transition: color 0.2s ease-out;
+}
+.link--text {
+  border-bottom: 1px solid #294ace;
+}
+.no-bullets {
+  list-style: none;
+}
+.list--indented {
+  padding-left: 2.4rem;
+}
+.list--inline {
+  font-size: 0;
+}
+.list--inline li {
+  display: inline-block;
+  font-size: 1rem;
+}
+@media screen and (max-width: 40em) {
+  .order-1 {
+    -webkit-box-ordinal-group: 2;
+    -ms-flex-order: 1;
+    order: 1;
+  }
+  .order-2 {
+    -webkit-box-ordinal-group: 3;
+    -ms-flex-order: 2;
+    order: 2;
+  }
+  .order-3 {
+    -webkit-box-ordinal-group: 4;
+    -ms-flex-order: 3;
+    order: 3;
+  }
+}
+.h1,
+h1 {
+  font-size: 2.1rem;
+}
+.h2,
+h2 {
+  font-size: 1.8rem;
+}
+.h3,
+h3 {
+  font-size: 1.3rem;
+}
+.h4,
+dl,
+h4,
+ol,
+p,
+ul {
+  font-size: 1rem;
+}
+.h5,
+h5 {
+  font-size: 0.618rem;
+}
+.h6,
+.small,
+h6,
+small {
+  font-size: 0.618rem;
+}
+@media screen and (min-width: 40em) {
+  .h1,
+  h1 {
+    font-size: 4.236rem;
+  }
+  .h2,
+  h2 {
+    font-size: 2.618rem;
+  }
+  .h3,
+  h3 {
+    font-size: 1.618rem;
+  }
+  .h4,
+  dl,
+  h4,
+  ol,
+  p,
+  ul {
+    font-size: 1rem;
+  }
+  .h5,
+  h5 {
+    font-size: 0.618rem;
+  }
+  .h6,
+  .small,
+  h6,
+  small {
+    font-size: 0.618rem;
+  }
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+  font-family: "Source Serif Pro", Georgia, Times, serif;
+  font-weight: 700;
+  line-height: 1;
+  margin-top: 0;
+  margin-bottom: 0.8rem;
+  text-rendering: optimizeLegibility;
+}
+h6 {
+  color: #4a5472;
+}
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6 {
+  line-height: 1;
+  margin-bottom: 0.8rem;
+}
+p {
+  margin: 0;
+}
+.small,
+small {
+  font-weight: 400;
+  line-height: 1;
+  font-size: 0.8rem;
+}
+hr {
+  border: 0;
+  border-top: 1px solid #abb2c9;
+  display: block;
+  height: 1px;
+}
+.blockquote {
+  border-left: 4px solid #abb2c9;
+  font-family: Montserrat, Avenir, "Avenir Next", Trebuchet, Verdana, sans-serif;
+  font-size: 1.3rem;
+  font-style: italic;
+  max-width: 100%;
+  margin-bottom: 0.8rem;
+  padding-left: 1.2rem;
+}
+.blockquote:after,
+.blockquote:before {
+  content: "";
+}
+.bold {
+  font-weight: 700;
+}
+.regular {
+  font-weight: 400;
+}
+.italic {
+  font-style: italic;
+}
+.align--left {
+  text-align: left;
+}
+.align--center {
+  text-align: center;
+}
+.align--right {
+  text-align: right;
+}
+.align--justify {
+  text-align: justify;
+}
+.line-height--base {
+  line-height: 1.6rem;
+}
+.line-height--heading {
+  line-height: 1;
+}
+.font--heading {
+  font-family: "Source Serif Pro", Georgia, Times, serif;
+}
+.font--reading {
+  font-family: "Source Serif Pro", Georgia, Times, serif;
+}
+.font--ui {
+  font-family: Montserrat, Avenir, "Avenir Next", Trebuchet, Verdana, sans-serif;
+}
+.border--full {
+  border-color: #262b3a;
+  border-style: solid;
+  border-width: 1px;
+}
+.border--top {
+  border-top-color: #abb2c9;
+  border-top-style: solid;
+  border-top-width: 1px;
+}
+.border--right {
+  border-right-color: #abb2c9;
+  border-right-style: solid;
+  border-right-width: 1px;
+}
+.border--bottom {
+  border-bottom-color: #abb2c9;
+  border-bottom-style: solid;
+  border-bottom-width: 1px;
+}
+.border--left {
+  border-left-color: #abb2c9;
+  border-left-style: solid;
+  border-left-width: 1px;
+}
+.border--none {
+  border: 0;
+}
+.rounded {
+  border-radius: 7px;
+}
+.rounded--top {
+  border-radius: 7px 7px 0 0;
+}
+.rounded--right {
+  border-radius: 0 7px 7px 0;
+}
+.rounded--bottom {
+  border-radius: 0 0 7px 7px;
+}
+.rounded--left {
+  border-radius: 7px 0 0 7px;
+}
+.circle {
+  border-radius: 50%;
+}
+.text--white {
+  color: #fff;
+}
+.text--lightest-gray {
+  color: #abb2c9;
+}
+.text--light-gray {
+  color: #7380a4;
+}
+.text--gray {
+  color: #4a5472;
+}
+.text--dark-gray {
+  color: #262b3a;
+}
+.text--darkest-gray {
+  color: #020203;
+}
+.text--primary-color {
+  color: #294ace;
+}
+.text--secondary-color {
+  color: #69f0ae;
+}
+.text--tertiary-color {
+  color: #ff5252;
+}
+.bg--white {
+  background-color: #fff;
+}
+.bg--lightest-gray {
+  background-color: #abb2c9;
+}
+.bg--light-gray {
+  background-color: #7380a4;
+}
+.bg--gray {
+  background-color: #4a5472;
+}
+.bg--dark-gray {
+  background-color: #262b3a;
+}
+.bg--darkest-gray {
+  background-color: #020203;
+}
+.bg--primary-color {
+  background-color: #294ace;
+}
+.bg--secondary-color {
+  background-color: #69f0ae;
+}
+.bg--tertiary-color {
+  background-color: #ff5252;
+}
+.m0 {
+  margin: 0;
+}
+.mt0 {
+  margin-top: 0;
+}
+.mr0 {
+  margin-right: 0;
+}
+.mb0 {
+  margin-bottom: 0;
+}
+.ml0 {
+  margin-left: 0;
+}
+.m1 {
+  margin: 0.8rem;
+}
+.mt1 {
+  margin-top: 0.8rem;
+}
+.mr1 {
+  margin-right: 0.8rem;
+}
+.mb1 {
+  margin-bottom: 0.8rem;
+}
+.ml1 {
+  margin-left: 0.8rem;
+}
+.m2 {
+  margin: 2rem;
+}
+.mt2 {
+  margin-top: 2rem;
+}
+.mr2 {
+  margin-right: 2rem;
+}
+.mb2 {
+  margin-bottom: 2rem;
+}
+.ml2 {
+  margin-left: 2rem;
+}
+.m3 {
+  margin: 3.2rem;
+}
+.mt3 {
+  margin-top: 3.2rem;
+}
+.mr3 {
+  margin-right: 3.2rem;
+}
+.mb3 {
+  margin-bottom: 3.2rem;
+}
+.ml3 {
+  margin-left: 3.2rem;
+}
+.m4 {
+  margin: 4.4rem;
+}
+.mt4 {
+  margin-top: 4.4rem;
+}
+.mr4 {
+  margin-right: 4.4rem;
+}
+.mb4 {
+  margin-bottom: 4.4rem;
+}
+.ml4 {
+  margin-left: 4.4rem;
+}
+.p-mb {
+  margin-bottom: 0.8rem;
+}
+.centered {
+  margin-right: auto;
+  margin-left: auto;
+}
+.p0 {
+  padding: 0;
+}
+.pt0 {
+  padding-top: 0;
+}
+.pr0 {
+  padding-right: 0;
+}
+.pb0 {
+  padding-bottom: 0;
+}
+.pl0 {
+  padding-left: 0;
+}
+.p1 {
+  padding: 0.8rem;
+}
+.pt1 {
+  padding-top: 0.8rem;
+}
+.pr1 {
+  padding-right: 0.8rem;
+}
+.pb1 {
+  padding-bottom: 0.8rem;
+}
+.pl1 {
+  padding-left: 0.8rem;
+}
+.p2 {
+  padding: 2rem;
+}
+.pt2 {
+  padding-top: 2rem;
+}
+.pr2 {
+  padding-right: 2rem;
+}
+.pb2 {
+  padding-bottom: 2rem;
+}
+.pl2 {
+  padding-left: 2rem;
+}
+.p3 {
+  padding: 3.2rem;
+}
+.pt3 {
+  padding-top: 3.2rem;
+}
+.pr3 {
+  padding-right: 3.2rem;
+}
+.pb3 {
+  padding-bottom: 3.2rem;
+}
+.pl3 {
+  padding-left: 3.2rem;
+}
+.p4 {
+  padding: 4.4rem;
+}
+.pt4 {
+  padding-top: 4.4rem;
+}
+.pr4 {
+  padding-right: 4.4rem;
+}
+.pb4 {
+  padding-bottom: 4.4rem;
+}
+.pl4 {
+  padding-left: 4.4rem;
+}
+.relative {
+  position: relative;
+}
+.absolute {
+  position: absolute;
+}
+.fixed {
+  position: fixed;
+}
+.top--0 {
+  top: 0;
+}
+.right--0 {
+  right: 0;
+}
+.bottom--0 {
+  bottom: 0;
+}
+.left--0 {
+  left: 0;
+}
+.z1 {
+  z-index: 1;
+}
+.z2 {
+  z-index: 2;
+}
+.z3 {
+  z-index: 3;
+}
+.z4 {
+  z-index: 4;
+}
+.z5 {
+  z-index: 5;
+}
+.vertical--top {
+  vertical-align: top;
+}
+.vertical--middle {
+  vertical-align: middle;
+}
+.vertical--bottom {
+  vertical-align: bottom;
+}
+.block {
+  display: block;
+}
+.inline-block {
+  display: inline-block;
+}
+.inline {
+  display: inline;
+}
+.flex {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+}
+.overflow--scroll {
+  overflow: scroll;
+}
+.overflow--hidden {
+  overflow: hidden;
+}
+.overflow--visible {
+  overflow: visible;
+}
+.overflow--auto {
+  overflow: auto;
+}
+.show-on-mobile {
+  display: none !important;
+}
+@media screen and (max-width: 40em) {
+  .block-on-mobile,
+  .show-on-mobile {
+    display: block !important;
+  }
+  .hide-on-mobile {
+    display: none !important;
+  }
+  .align--center-on-mobile {
+    text-align: center !important;
+  }
+  .no-mr-on-mobile {
+    margin-right: 0 !important;
+  }
+}
+.float--left {
+  float: left;
+}
+.float--right {
+  float: right;
+}
+.float--none {
+  float: none;
+}
+.full-width {
+  width: 100%;
+}
+.half-width {
+  width: 50%;
+}
+.fit {
+  max-width: 100%;
+}
+.clearfix:after,
+.clearfix:before {
+  content: "";
+  display: table;
+}
+.clearfix:after {
+  clear: both;
+}
+* {
+  box-sizing: border-box;
+}
+
+body {
+  margin: 0px;
+  font-family: "segoe ui";
+}
+
+.nav {
+  height: 50px;
+  width: 100%;
+  background-color: #4d4d4d;
+  position: relative;
+}
+
+.nav > .nav-header {
+  display: inline;
+}
+
+.nav > .nav-header > .nav-title {
+  display: inline-block;
+  font-size: 22px;
+  color: #fff;
+  padding: 10px 10px 10px 10px;
+}
+
+.nav > .nav-btn {
+  display: none;
+}
+
+.nav > .nav-links {
+  display: inline;
+  float: right;
+  font-size: 18px;
+}
+
+.nav > .nav-links > a {
+  display: inline-block;
+  padding: 13px 10px 13px 10px;
+  text-decoration: none;
+  color: #efefef;
+}
+
+.nav > .nav-links > a:hover {
+  background-color: rgba(0, 0, 0, 0.3);
+}
+
+.nav > #nav-check {
+  display: none;
+}
+
+@media (max-width: 600px) {
+  .nav > .nav-btn {
+    display: inline-block;
+    position: absolute;
+    right: 0px;
+    top: 0px;
+  }
+  .nav > .nav-btn > label {
+    display: inline-block;
+    width: 50px;
+    height: 50px;
+    padding: 13px;
+  }
+  .nav > .nav-btn > label:hover,
+  .nav #nav-check:checked ~ .nav-btn > label {
+    background-color: rgba(0, 0, 0, 0.3);
+  }
+  .nav > .nav-btn > label > span {
+    display: block;
+    width: 25px;
+    height: 10px;
+    border-top: 2px solid #eee;
+  }
+  .nav > .nav-links {
+    position: absolute;
+    display: block;
+    width: 100%;
+    background-color: #333;
+    height: 0px;
+    transition: all 0.3s ease-in;
+    overflow-y: hidden;
+    top: 50px;
+    left: 0px;
+  }
+  .nav > .nav-links > a {
+    display: block;
+    width: 100%;
+  }
+  .nav > #nav-check:not(:checked) ~ .nav-links {
+    height: 0px;
+  }
+  .nav > #nav-check:checked ~ .nav-links {
+    height: calc(100vh - 50px);
+    overflow-y: auto;
+  }
+}
diff --git a/assets/hacktober.png b/assets/hacktober.png
index 27fa4df1..c1aa979a 100644
Binary files a/assets/hacktober.png and b/assets/hacktober.png differ
diff --git a/assets/hacktoberfest-guide.md b/assets/hacktoberfest-guide.md
new file mode 100644
index 00000000..0a8ddaeb
--- /dev/null
+++ b/assets/hacktoberfest-guide.md
@@ -0,0 +1,135 @@
+# How to begin with hacktober fest 2021
+
+> Hacktoberfest encourages participation in the open source community, which grows bigger every year. Complete the 2021 challenge and earn a limited edition T-shirt.  
+
+> Hacktoberfest, in its 8th year, is a month-long celebration of open source software run by DigitalOcean. During the month of October, we invite you to join open-source software enthusiasts, beginners, and the developer community by contributing to open-source projects. 
+
+![Hacktoberfest_Wallpaper_desktop-02](https://user-images.githubusercontent.com/40369168/135885122-0931eeb0-ef6c-4ac7-9842-9d555c58a467.png)
+
+
+You can do this in a variety of ways:
+
+- Prepare and share your project for collaboration
+- Contribute to the betterment of a project via pull requests
+- Organize an event
+- Mentor others
+- Donate directly to open source projects
+
+**So what are the various steps to perform in order to participate & get your PRs(Pull Requests) accepted and added to fest?**
+
+*Here you'll find all these simple questions !
+So, let's get started. Let's assume you're a developer who'll participate in this fest & contribute to the open source repos.*
+
+# Prerequisites
+
+- [ ] GitHub profile
+- [ ] Coder/Developer's mindset
+
+# Steps to perform
+
+### **Registeration**
+1. The very first thing is to login into your github profile in your browser.
+2. Navigate to the [Hacktober Fest 2021](https://hacktoberfest.digitalocean.com/) url.
+3. Sign Up with your github profile. (You may also use your gitlab profile)
+4. Click on Start Hacking button.
+5. Here marks the ending of registeration part in Hacktobert Fest 2021.
+
+---
+### **Uploading your project in GitHub account**
+
+Created your project in local computer? Let's upload into your github account.
+
+1. Click on New button in the top-right corner of your account
+2. Put some name for your repo. It'll be unique for your account. Make sure it'll be the name of your project. Don't name it as Elon Musk's son ! :laugh:
+3. Click on Add File button & select Upload existing file from dropdown.
+4. Drag & Drop the directory into the space or else Browse through the computer to upload full directory. Don't upload files individually.
+5. Click on Commit changes button to upload & save repo.
+6. Your repo with the required files is uploaded with complete content. 
+
+*P.S. - Make sure you've uploaded README.MD file for attractive look of your repo.*
+
+---
+
+### **Find repos who're participating in Hacktober Fest 2021 so that your work will be added in this fest**
+
+1. Go to search bar of GitHub
+2. Search for hacktoberfest2021
+3. Chose any one of them. 
+
+My Suggestion: If you're a fresher, just search for the repo having some simple programs. Search with the required language which you're more familiar.
+
+---
+
+### **How to raise an Issue before raising PR**
+
+> Question should be why to raise an issue before PR. Answer is simple - Maybe your idea/code maybe already contributed by other fellow developer.  
+&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;OR   
+Maintainer doens't want particular type of code/project in his repo. So, he can deny for that Pull Request.
+
+1. Click on Issue tab
+2. Click on New Issue button
+3. Give necessary information about your idea of new project which you want to contribute
+4. Click on Raise Issue button in bottom
+5. Moderator/Maintainer will review the issue/idea for project & assign you with a Issue no. (for eg. - #35)
+6. Mention the Issue no in Pull Request for better maintainibility.
+
+---
+
+### **How to upload your own projects & contribute to open-source**
+
+1. Hope you've found the repo you want to contribute. Go to the repo & click on fork button on the top-right corner.
+  
+2. GitHub will ask where to fork it. Click on your `username/repo-name` link
+  
+3. Upload the necessary folder/files in the specified place in repo.
+
+*That's it programmer !*
+
+---
+
+### **How to do a PR (Pull Request) ?**
+> Don't think too much, if you've successfully completed 4 PRs in same repo also, you'll be eligible for that swag/tshirts by Digital Ocean. :happy:
+
+1. After uploading the folder/files, click on Pull Request button in top corner.
+2. Click on New Pull Request.
+  ![image](https://user-images.githubusercontent.com/40369168/135883341-56f8dcdc-6fbf-4dc8-ba6b-c7feee4fbd9a.png)
+
+3. Make sure New Pull Request should not be conflicting ones. Mostly, it doesn't but be sure.
+  ![image](https://user-images.githubusercontent.com/40369168/135883604-25c68ec5-f35c-4a85-85eb-b4eded7ce55d.png)
+
+5. Give necessary information about your newly added files/folder which you've created.
+  
+6. Click on Create Pull Request button to complete the overall Pull Request.
+  ![image](https://user-images.githubusercontent.com/40369168/135883837-eb24f0ec-cb90-4f74-83ac-c57b52683cc5.png)
+
+7. Now,your job is completed. Moderator/Maintainer of the repo will review the project & once satisfied, he'll merge the commit into `main` branch.
+
+---
+
+Login to [Hacktober fest 2021](https://hacktoberfest.digitalocean.com/) & see the updated status of the Pull Requests by you.
+
+> | Project name | Status |  
+> |---|---|
+
+This will be the format under Contributions Tab.
+
+<br><br><br>
+
+**This is my leaderboard for this year on 04/10/2021** 🔽
+![image](https://user-images.githubusercontent.com/40369168/135886109-d10941ca-94ee-43e7-a88a-adfb6af1f6e6.png)
+
+**Below is my tracker for today i.e. 04/10/2021** 🔽
+![image](https://user-images.githubusercontent.com/40369168/135886288-b84b6cb8-950c-48b3-bbfe-2bd7802f8770.png)
+
+
+---
+
+> I've tried to cover every small detail I've gone through. If anyone have doubt do raise an issue, I'll try to cover that also. If you've any questions, they're also welcomed !
+
+# Author
+
+[Nitin Kumar](https://github.com/nitinkumar30/)
+
+
+
+
diff --git a/index.html b/index.html
new file mode 100644
index 00000000..61816f8d
--- /dev/null
+++ b/index.html
@@ -0,0 +1,265 @@
+<!doctype html>
+<html lang="en-us">
+
+<head>
+
+    <!-- Meta -->
+    <meta charset="utf-8">
+    <meta http-equiv="x-ua-compatible" content="ie=edge">
+    <meta name="viewport" content="width=device-width,initial-scale=1">
+
+    <title>Programming Basics</title>
+    <meta name="description" content="">
+
+    <!-- The compiled CSS file -->
+    <link rel="stylesheet" href="./assets/Website/style.css">
+    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
+        integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
+
+    <!-- Web fonts -->
+    <link href="https://fonts.googleapis.com/css?family=Montserrat:400,400i,700|Source+Serif+Pro:700" rel="stylesheet">
+    <link rel="preconnect" href="https://fonts.googleapis.com">
+    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+    <link href="https://fonts.googleapis.com/css2?family=Kaushan+Script&display=swap" rel="stylesheet">
+    <!-- favicon.ico. Place these in the root directory. -->
+    <link rel="shortcut icon" href="favicon.ico">
+
+</head>
+
+<body class="has-animations">
+
+
+    <!-- Header -->
+    <header class="align--center pt3">
+        <div class="container--lg border--bottom pb3">
+            <h1 class="mb2" >Programming Basics</h1>
+            <h3 class="mb2">Start your Open Source Journey Here.</h3>
+            <span>
+                <a href="https://github.com/Astrodevil/Programming-Basics/" class="btn">View on Github</a>
+            </span>
+        </div>
+    </header>
+    <!--Nav bar added-->
+  <div class="nav">
+  <input type="checkbox" id="nav-check">
+  
+  <div class="nav-btn">
+    <label for="nav-check">
+      <span></span>
+      <span></span>
+      <span></span>
+    </label>
+  </div>
+  
+  <div class="nav-links">
+    <a href="#about" >About</a>
+    <a href="#guidelines" >Guidelines</a>
+    <a href="#contributor" >Contributer</a>
+    <a href="#support" >Support</a>
+    <a href="#developer" >Devlopers</a>
+    <a href="#opensource">Other Open Source Festival</a>
+  </div>
+</div>
+<!--Nav bar end-->
+    <main id="about">
+        <!-- Focus -->
+        <div class="container--lg pt1 pb1">
+            <a href="https://hacktoberfest.digitalocean.com/"><img class=""
+                    src="./assets/Website/img/HacktoberFest 2021.png" alt="HacktoberFest2021"></a>
+            <div class="grid-row grid-row--center">
+                <div class="grid-column span-1"></div>
+                <div class="grid-column mt3 mb2">
+                    <div class="border--bottom pb2 mb2">
+                        <h2>About❓</h2>
+                        <p>Want to start your open-source journey? You are at right place🎯<br><br>
+                            This project contains basic solutions, source codes, book pdfs related to different
+                            programming languages🤗. As everyone is learning one or many programming languages, so
+                            contribution to this project will be very easy for you.<br><br>
+                            You can also take help from this project towards your learning or you can contribute to make
+                            this more helpful for others.<br><br>
+                            So, What are you waiting for?</p>
+                    </div>
+                </div>
+                <div class="grid-column span-1"></div>
+            </div>
+            <div class="grid-row grid-row--center">
+                <div class="grid-column span-1"></div>
+                <div class="grid-column mt3 mb2">
+                    <div class="border--bottom pb2 mb2">
+                        <h2 id ="guidelines">Contributing Guidelines 📝</h2>
+                        <p>Thank you for your interest in contributing to our Repo! Pull requests are welcome. For major
+                            changes, please open an issue first to discuss what you would like to change.<br><br>
+                            To start contributing, follow the below guidelines:<br><br>
+                        <ol>
+                            1. Star and Fork this repository.<br><br>
+                            2. Clone your forked copy of the project.<br><br>
+                            <code style="width: 150px;">
+                                    git clone https://github.com/&lt;your_user_name&gt;/Programming-Basics.git
+                                </code><br><br>
+                            3. Navigate to the project directory 📁 .<br><br>
+                            <code>
+                                    cd Programming-Basics
+                                </code><br><br>
+                            4. Add a reference(remote) to the original repository.<br><br>
+                            <code>
+                                    git remote add upstream https://github.com/Astrodevil/Programming-Basics.git 
+                                </code><br><br>
+                            5. Check the remotes for this repository.<br><br>
+                            <code>
+                                    git remote -v
+                                </code><br><br>
+                            6. Always take a pull from the upstream repository to your master branch to keep it at par
+                            with the main project(updated repository).<br><br>
+                            <code>
+                                    git pull upstream main
+                                </code><br><br>
+                            7. Create a new branch.<br><br>
+                            <code>
+                                    git checkout -b &lt;your_branch_name&gt;
+                                </code><br><br>
+                            8. Perfom your desired changes to the code base.<br><br>
+                            9. Track your changes✔️ .<br><br>
+                            <code>
+                                    git add . 
+                                </code><br><br>
+                            10. Commit your changes .<br><br>
+                            <code>
+                                    git commit -m "Relevant message"
+                                </code><br><br>
+                            11. Push the committed changes in your feature branch to your remote repo.<br><br>
+                            <code>
+                                    git push -u origin &lt;your_branch_name&gt;
+                                </code><br><br>
+                            12. To create a pull request, click on compare and pull requests.<br><br>
+                            13. Add appropriate title and description to your pull request explaining your
+                            changes and efforts done.<br><br>
+                            14. Click on Create Pull Request.<br><br>
+                            15. Woohoo! You have made a PR to the Programming-Basics 💥 . Wait for your
+                            submission to be accepted and your PR to be merged.<br>
+                        </ol>
+                        </p>
+                    </div>
+                </div>
+            </div>
+
+            <div class="grid-row grid-row--center">
+                <div class="grid-column span-1"></div>
+                <div class="grid-column mt3 mb2">
+                    <div class="border--bottom pb2 mb2 ">
+                     
+                        <h2  id ="opensource">Other Open Source Program :</h2>
+                     
+
+                        <div class="d-flex justify-content-between">
+                        <span>
+                            <a href="https://summerofcode.withgoogle.com/">
+
+                            <img src="https://summerofcode.withgoogle.com/static/img/summer-of-code-logo.svg" width="100px" height="100px">
+
+                            </a>
+                            
+                        </span>
+                         <span>
+                            
+                            <a href="https://gssoc.girlscript.tech
+                            ">
+
+                            <img src="https://gssoc.girlscript.tech/images/favicon/favicon.png" width="100px" height="100px">
+
+                            </a>
+                        
+                        </span>
+                        
+                         <span>
+                            
+                            <a href="https://osoc.be
+                            ">
+
+                            <img src="https://osoc.be/img/logo/logo-osoc-color.svg" width="100px" height="100px">
+
+                            </a>
+                        
+                        </span>
+                        
+                           
+                         <span>
+                            
+                            <a href="http://www.pclubsummerofcode.in/static/mentors/img/pclub-logo-white.png
+                            ">
+
+                            <img src="http://www.pclubsummerofcode.in/static/mentors/img/pclub-logo-white.png" width="100px" height="100px">
+
+                            </a>
+                        
+                        </span>
+                        
+                         <span>
+                            
+                            <a href="https://codeheat.org
+                            ">
+
+                            <img src="https://codeheat.org/img/logo-dark.png" width="100px" height="100px">
+
+                            </a>
+                        
+                        </span>
+                        <span>
+                        <a href="https://opensourceinternships.herokuapp.com/">..more
+                        </a>
+                        </span>
+
+
+                        </div>
+                    </div>
+                </div>
+            </div>
+            
+
+
+            <div class="grid-row grid-row--center">
+                <div class="grid-column span-1"></div>
+                <div class="grid-column mt3 mb2">
+                    <div class="border--bottom pb2 mb2">
+                        <h2 id ="contributor">Our valuable Contributors👩‍💻👨‍💻 :</h2>
+                        <span><a href="https://github.com/Astrodevil/Programming-Basics/graphs/contributors">
+                                <img src="https://contributors-img.web.app/image?repo=Astrodevil/Programming-Basics" />
+                            </a></span>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+    </main>
+
+    <!-- Footer -->
+
+    <footer class="pt1 pb3 align--center-on-mobile">
+        <div class="container">
+            <div class="grid-row">
+                <div class="grid-column mt2 span-half">
+                    <p id="developer">Developed by <a href="https://www.linkedin.com/in/-sahibsingh-/">Sahib Singh</a> & <a href="https://www.linkedin.com/in/nishant-kumar-4231061b4"> Nishant Kumar</a></p>
+                </div>
+            </div>
+        </div>
+    </footer>
+    <div id="support">
+         <script data-name="BMC-Widget" data-cfasync="false" src="https://cdnjs.buymeacoffee.com/1.0.0/widget.prod.min.js" data-id="Astrodevil" data-description="Support me on Buy me a coffee!" data-message="" data-color="#40DCA5" data-position="Right" data-x_margin="50" data-y_margin="50">
+</script>
+    </div>
+    <!-- Scroll reveal -->
+    <script src="https://unpkg.com/scrollreveal@4.0.0/dist/scrollreveal.min.js"></script>
+    <!-- The compiled JavaScript file -->
+    <script src="./assets/Website/script.js"></script>
+    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"
+        integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
+        crossorigin="anonymous"></script>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
+        integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
+        crossorigin="anonymous"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
+        integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
+        crossorigin="anonymous"></script>
+
+</body>
+
+</html>
\ No newline at end of file
