#include <iostream>
#include <vector>
template <typename String>
struct First {
using ArrayType = std::vector<int>;
};
template <typename String, typename T>
struct Second {
void go() { std::cout << "General\n"; }
};
template <typename String>
struct Second < String, typename First<String>::ArrayType > {
void go() { std::cout << "Specialized\n"; }
};
int main() {
Second < std::vector<int>, std::vector<int> > second;
second.go();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFN0cmluZz4Kc3RydWN0IEZpcnN0IHsKCXVzaW5nIEFycmF5VHlwZSA9IHN0ZDo6dmVjdG9yPGludD47Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RyaW5nLCB0eXBlbmFtZSBUPgpzdHJ1Y3QgU2Vjb25kIHsKCXZvaWQgZ28oKSB7IHN0ZDo6Y291dCA8PCAiR2VuZXJhbFxuIjsgfQp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFN0cmluZz4Kc3RydWN0IFNlY29uZCA8IFN0cmluZywgdHlwZW5hbWUgRmlyc3Q8U3RyaW5nPjo6QXJyYXlUeXBlID4gewoJdm9pZCBnbygpIHsgc3RkOjpjb3V0IDw8ICJTcGVjaWFsaXplZFxuIjsgfQp9OwoKCmludCBtYWluKCkgewoJU2Vjb25kIDwgc3RkOjp2ZWN0b3I8aW50Piwgc3RkOjp2ZWN0b3I8aW50PiA+IHNlY29uZDsKCXNlY29uZC5nbygpOwoJcmV0dXJuIDA7Cn0=