#include <stdio.h>
#include <stdlib.h>
#include <string.h>

enum {
	SIZE = 8192
};

size_t count(const char *s, int c)
{
	size_t r;

	for (r = 0; *s; r += *s++ == (char) c)
		;
	return r;
}

size_t max_strcspn(const char *s, int c)
{
	size_t max, tmp;

	for (max = tmp = 0; *s; s++) {
		if (*s != (char) c) {
			tmp++;
			continue;
		}
		if (tmp > max)
			max = tmp;
		tmp = 0;
	}
	return max;
}

char *fill(char *to, size_t longest, size_t lines, const char *from)
{
	char *save = to;
	size_t n;

	for (n = longest; lines; from++)
		if (*from == '\n') {
			memset(to, ' ', n);
			to += n;
			n = longest;
			lines--;
		} else {
			*to++ = *from;
			n--;
		}
	return save;
}

char *readall(FILE *iop)
{
	char buf[SIZE];
	size_t a = 0, n;
	char *r, *tmp;

	for (r = 0; (n = fread(buf, 1, SIZE, iop)) == SIZE; r = tmp) {
		if (!(tmp = realloc(r, a + SIZE))) {
			free(r);
			return 0;
		}
		memcpy(tmp + SIZE, buf, SIZE);
		a += SIZE;
	}
	if (!(tmp = realloc(r, a + n + 1))) {
		free(r);
		return 0;
	}
	memcpy(tmp + a, buf, n);
	tmp[a + n] = '\0';
	return tmp;
}

int main(void)
{
	size_t lines, longest;
	char *ptr, *s;

	if (!(s = readall(stdin))
	 || !(ptr = malloc((lines = count(s, '\n')) *
			   (longest = max_strcspn(s, '\n'))))) {
		free(s);
		return EXIT_FAILURE;
	}
	fill(ptr, longest, lines, s);
	for (size_t i = 0; i < longest; i++) {
		for (size_t n = 0; n < lines; n++)
			putchar(ptr[longest * n + i]);
		puts("");
	}
	free(s);
	free(ptr);
}