Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define pb push_back
- #define ALL(o) (o).begin(),(o).end()
- #define fo(n) for(int i=0;i<n;i++)
- #define fos(o,n) for(int i=o;i<=n;i++)
- struct tr{
- string s;
- int n;
- };
- bool cmp( tr a , tr b ){
- if( a.s.size() != b.s.size() ) return a.s.size() < b.s.size();
- else return a.s < b.s;
- }
- int main(){
- int T;
- scanf( "%d\n" , &T );
- while( T-- ){
- vector<tr> p;
- map<string,int> mp;
- string s , ss;
- getline( cin , s );
- bool numb = 0 , strb = 0 , no = 0;
- int num = 0;
- fo( s.size() ){
- if( s[i] == '(' ) numb = 1;
- else if( s[i] == ')' ){
- tr tmp;
- tmp.n = num;
- tmp.s = ss;
- if( s[i - 1] != '(' ) {
- ++mp[ ss ];
- p.pb( tmp );
- }
- num = numb = strb = 0;
- ss = "";
- }
- else if( s[i] == ',' ){
- numb = 0;
- strb = 1;
- }
- else if( numb ){
- num *= 10;
- num += s[i] - 48;
- }
- else if( strb ){
- ss += s[i];
- }
- }
- sort( ALL(p) , cmp );
- for( int i = 1 ; i < p.size() ; ++i ) {
- string tmp;
- for( int j = 0 ; j < p[i].s.size() - 1 ; ++j ) tmp += p[i].s[j];
- if( mp[ p[i].s ] > 1 || !mp[ tmp ] ) {
- no = 1;
- puts( "not complete" );
- break;
- }
- }
- if( no ) continue;
- cout << p[0].n;
- fos( 1 , p.size() - 1 ) cout << ' ' << p[i].n;
- puts( "" );
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement