import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
//문제
//태그와 문자로 구성되어있다.
//문자만 구별하여 뒤집는다.
//예제 입력
//baekjoon online judge
//<open>tag<close>
//예제 출력
//noojkeab enilno egduj
//<open>gat<close>
//풀이
//1. 태그 내부, 외부에 있는지 판단한다
//2. 외부에 있는 단어를 뒤집는다
//Boolean으로 <, > 안에 있는지 조건걸고
//true일 경우에만 뒤집으면 될듯????
//아마.....
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine().trim(); //받은 문자열의 공백 제거
StringBuilder result = new StringBuilder(); //태그 저장장소
StringBuilder wordBuilder = new StringBuilder(); //단어 저장장소
//태그 내부/ 외부 판단할 변수
boolean inTag = false;
for (int i = 0; i < input.length(); i++) {
char ch = input.charAt(i);
// 태그가 있을 경우
if (ch == '<') {
inTag = true;
// 이미 단어가 쌓인 경우 출력하고 초기화
if (wordBuilder.length() > 0) {
result.append(reverseWord(wordBuilder.toString()));
wordBuilder.setLength(0); // StringBuilder 초기화
}
result.append('<');
//태그가 끝났는지 판단
} else if (ch == '>') {
inTag = false;
result.append('>');
} else if (inTag) {
// 태그 내부의 경우 그대로 반환
result.append(ch);
//단어처리
} else {
if (ch == ' ') {
// 공백을 만나면 이전까지 쌓인 단어를 뒤집어서 결과에 추가하고 공백 추가
result.append(reverseWord(wordBuilder.toString()));
result.append(' '); // 결과에 공백 추가
wordBuilder.setLength(0); // StringBuilder 초기화
} else {
// 공백이 아니면 단어 누적
wordBuilder.append(ch);
}
}
}
System.out.println(result.toString());
}
// 단어를 뒤집는 함수
private static String reverseWord(String word) {
return new StringBuilder(word).reverse().toString();
}
}