Modeling Software Architecutes and Styles with Graph Grammars and Constraint Solving