#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
class Solution{
public :
vector< string> removeSubfolders( vector< string> & S) {
int i;
vector< string> res;
set< string> st;
int N = S.size ( ) ;
sort( S.begin ( ) , S.end ( ) ) ;
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
string tmp = S[ i] ;
while ( tmp.size ( ) ) {
int j;
for ( j= ( tmp.size ( ) ) - 1 ; j>= ( 0 ) ; j-- ) {
if ( tmp[ j] == '/' ) {
break ;
}
}
tmp = tmp.substr ( 0 ,j) ;
if ( st.count ( tmp) ) {
break ;
}
}
if ( tmp.size ( ) == 0 ) {
st.insert ( S[ i] ) ;
res.push_back ( S[ i] ) ;
}
}
return res;
}
}
;
// cLay varsion 20191102-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class Solution {
// public:
// vector<string> removeSubfolders(vector<string>& S) {
// vector<string> res;
// set<string> st;
// int N = S.size();
// sort(S.begin(), S.end());
// rep(i,N){
// string tmp = S[i];
// while(tmp.size()){
// rrep(j,tmp.size()) if(tmp[j]=='/') break;
// tmp = tmp.substr(0,j);
// if(st.count(tmp)) break;
// }
// if(tmp.size()==0) st.insert(S[i]), res.push_back(S[i]);
// }
// return res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbWFpbiBkdW1teV9tYWluCmludCBtYWluKCl7CiAgcmV0dXJuIDA7Cn0KI3VuZGVmIG1haW4KY2xhc3MgU29sdXRpb257CiAgcHVibGljOgogIHZlY3RvcjxzdHJpbmc+IHJlbW92ZVN1YmZvbGRlcnModmVjdG9yPHN0cmluZz4mIFMpewogICAgaW50IGk7CiAgICB2ZWN0b3I8c3RyaW5nPiByZXM7CiAgICBzZXQ8c3RyaW5nPiBzdDsKICAgIGludCBOID0gUy5zaXplKCk7CiAgICBzb3J0KFMuYmVnaW4oKSwgUy5lbmQoKSk7CiAgICBmb3IoaT0oMCk7aTwoTik7aSsrKXsKICAgICAgc3RyaW5nIHRtcCA9IFNbaV07CiAgICAgIHdoaWxlKHRtcC5zaXplKCkpewogICAgICAgIGludCBqOwogICAgICAgIGZvcihqPSh0bXAuc2l6ZSgpKS0xO2o+PSgwKTtqLS0pewogICAgICAgICAgaWYodG1wW2pdPT0nLycpewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdG1wID0gdG1wLnN1YnN0cigwLGopOwogICAgICAgIGlmKHN0LmNvdW50KHRtcCkpewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmKHRtcC5zaXplKCk9PTApewogICAgICAgIHN0Lmluc2VydChTW2ldKTsKICAgICAgICByZXMucHVzaF9iYWNrKFNbaV0pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KfQo7Ci8vIGNMYXkgdmFyc2lvbiAyMDE5MTEwMi0xCgovLyAtLS0gb3JpZ2luYWwgY29kZSAtLS0KLy8gI2RlZmluZSBtYWluIGR1bW15X21haW4KLy8ge30KLy8gI3VuZGVmIG1haW4KLy8gCi8vIGNsYXNzIFNvbHV0aW9uIHsKLy8gcHVibGljOgovLyAgIHZlY3RvcjxzdHJpbmc+IHJlbW92ZVN1YmZvbGRlcnModmVjdG9yPHN0cmluZz4mIFMpIHsKLy8gICAgIHZlY3RvcjxzdHJpbmc+IHJlczsKLy8gICAgIHNldDxzdHJpbmc+IHN0OwovLyAgICAgaW50IE4gPSBTLnNpemUoKTsKLy8gICAgIHNvcnQoUy5iZWdpbigpLCBTLmVuZCgpKTsKLy8gICAgIHJlcChpLE4pewovLyAgICAgICBzdHJpbmcgdG1wID0gU1tpXTsKLy8gICAgICAgd2hpbGUodG1wLnNpemUoKSl7Ci8vICAgICAgICAgcnJlcChqLHRtcC5zaXplKCkpIGlmKHRtcFtqXT09Jy8nKSBicmVhazsKLy8gICAgICAgICB0bXAgPSB0bXAuc3Vic3RyKDAsaik7Ci8vICAgICAgICAgaWYoc3QuY291bnQodG1wKSkgYnJlYWs7Ci8vICAgICAgIH0KLy8gICAgICAgaWYodG1wLnNpemUoKT09MCkgc3QuaW5zZXJ0KFNbaV0pLCByZXMucHVzaF9iYWNrKFNbaV0pOwovLyAgICAgfQovLyAgICAgcmV0dXJuIHJlczsKLy8gICB9Ci8vIH07Cg==