#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>
#include <utility>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <queue>
 
using namespace std;
 
#define pb(n)	push_back(n)
#define mp(n,m) make_pair(n,m)
#define fi 	first
#define se 	second
#define all(r) (r).begin(),(r).end()

#define rep(i,n) for(int i=0; i<(n); i++)
#define repc(i,a,b) for(int i=(a); i<(b); i++)

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
 
const int IMAX=((1<<30)-1)*2+1;
const double EPS=1e-10;
//int mod=1000000007;


vector<string> split(string s,char c){
	stringstream ss(s);
	string t;
	vector<string> ret;
	while(getline(ss,t,c)){
		ret.pb(t);
	}
	return ret;
}

vector<vector<string> > split_vss(vector<string> s,char c){
	vector<vector<string> > ret;
	for(int i=0; i<s.size(); i++){
		stringstream ss(s[i]);
		string t;
		vector<string> u;
		while(getline(ss,t,c)){
			u.pb(t);
		}
		ret.pb(u);
	}
	return ret;
}

vector<vector<vector<string> > > split_vsss(vector<vector<string> >  s,char c){
	vector<vector<vector<string> > > ret;
	for(int i=0; i<s.size(); i++){
		vector<vector<string> > w;
		for(int j=0; j<s[i].size(); j++){
			stringstream ss(s[i][j]);
			string t;
			vector<string> u;
			while(getline(ss,t,c)){
				u.pb(t);
			}
			w.pb(u);
		}
		ret.pb(w);
	}
	return ret;
}


int main(){
	string s;
	getline(cin,s);
	set<string> se;
	bool f=false;
	vector<string> vs=split(s,' ');
	vector<vector<string> > vss=split_vss(vs,'.');
	vector<vector<vector<string> > > vsss=split_vsss(vss,',');
	for(int i=0; i<vsss.size(); i++){
		for(int j=0; j<vsss[i].size(); j++){
			for(int k=0; k<vsss[i][j].size(); k++){
				if(vsss[i][j][k].size()>=3&&vsss[i][j][k].size()<=6){
					if(se.count(vsss[i][j][k])==0){
						if(f)cout<<" ";
						cout<<vsss[i][j][k];
						f=true;
						se.insert(vsss[i][j][k]);
					}
				}
			}
		}
	}
	cout<<endl;
}