#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n, m;
	n = 5; // Number of processes
	m = 3; // Number of resources

	vector<vector<int>> Max
	{
		{ 6, 5, 3 },
		{ 4, 2, 1 },
		{ 5, 1, 2 },
		{ 1, 0, 2 },
		{ 5, 2, 3 }
	};
	vector < vector<int>> Alloc
	{
		{ 1, 0, 2 },
		{ 3, 1, 0 },
		{ 0, 1, 1 },
		{ 1, 0, 1 },
		{ 1, 0, 2 }
	};
	vector<int> Total { 7, 5, 7 }; // Total initial available resources
	vector<int>Avail(m); // Available resources after allocation
	for (int j = 0; j < m; j++)
	{
		int s = 0;
		for (int i = 0; i < n; i++)
		{
			s += Alloc[i][j];
		}
		Avail[j] = Total[j] - s;
	}

	vector<int>Exec(n, 0);
	vector<vector<int>> Need( n , vector<int> (m));
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
			Need[i][j] = Max[i][j] - Alloc[i][j];
	}
	int k, c = 0;
	vector<int>seq;
	while (c < n)
	{
		for (int i = 0; i < n; i++)
		{
			if (Exec[i] == 0)
			{
				int mark = 0;
				for (int j = 0; j < m; j++)
				{
					if (Need[i][j] > Avail[j])
					{
						mark = 1;
						break;
					}
				}
				if (mark == 0)
				{
					seq.push_back(i + 1);
					for (k = 0; k < m; k++)
					{
						Avail[k] += Alloc[i][k];
					}
					Exec[i] = 1;
				}
			}
		}
		c++;
	}
	cout << "The safe sequence of execution is ";
	for (int i = 0; i < n ; i++)
	{
		if (i == n - 1)
			cout << " P" << seq[i] << "\n";
		else
			cout << " P" << seq[i] << " ->";
	}
}