#include <iostream>
using namespace std;

enum IP_family {
	addr_IPv4,
	addr_IPv6,
	addr_unknown
};

const char *to_string (IP_family f) {
	switch (f) {
	case addr_IPv6:
		return "IPv6";
	case addr_IPv4:
		return "IPv4";
	default:
		return "unknown";
	}
}

IP_family addr_type (const string &addr) {
	if (addr.find_first_of (':') != string::npos)
		return addr_IPv6;
	if (addr.find_first_of ('.') != string::npos)
		return addr_IPv4;
	return addr_unknown;
}

ostream &operator<< (ostream &os, IP_family f) {
	return os << to_string (f);
}

void test (const string &str) {
	cout << "\"" << str << "\" is " << addr_type(str) << endl;
}

int main() {
	test ("46.227.16.8");
	test ("2a01:6e00:10:410::2");
	test ("42");
	return 0;
}
