Text this: Joint uplink and downlink resource allocation for D2D communication based on weighted bipartite graph matching and interference clustering