## Task
Given an array of strings, reverse them and their order in such way that their length stays the same as the length of the original inputs.

### Example:

```
Input:  {"I", "like", "big", "butts", "and", "I", "cannot", "lie!"}
Output: {"!", "eilt", "onn", "acIdn", "ast", "t", "ubgibe", "kilI"}
```

Good luck!

Difficulty: EASY
Starter code: def reverse(a):
	

Solutions:
def reverse(a):
	s = reversed(''.join(a))
	return [''.join((next(s) for _ in w)) for w in a]


def reverse(a):
	s = ''.join(a)[::-1]
	(l, x) = ([], 0)
	for i in a:
		l.append(s[x:x + len(i)])
		x += len(i)
	return l


def reverse(a):
	s = list(''.join(a))
	return [''.join((s.pop() for _ in w)) for w in a]


from itertools import islice

def reverse(a):
	cs = (c for s in reversed(a) for c in reversed(s))
	return [''.join(islice(cs, 0, len(s))) for s in a]


def reverse(a):
	s = iter(''.join(a)[::-1])
	return [''.join((next(s) for _ in range(len(w)))) for w in a]


def reverse(a):
	r = list(''.join(a))
	return [''.join((r.pop() for c in w)) for w in a]


def reverse(a):
	b = ''.join(a)[::-1]
	l = []
	for i in a:
		l.append(b[:len(i)])
		b = b[len(i):]
	return l


def reverse(a):
	letters = ''.join(a)[::-1]
	(result, chunk_size) = ([], 0)
	for word in a:
		result.append(letters[chunk_size:chunk_size + len(word)])
		chunk_size += len(word)
	return result


def reverse(a):
	reversed_str = ''.join(a)[::-1]
	final_arr = []
	start = 0
	finish = len(a[0])
	for i in range(1, len(a) + 1):
		final_arr.append(reversed_str[start:finish])
		start = finish
		if len(a) > i:
			finish = start + len(a[i])
	return final_arr


from itertools import islice

def reverse(a):
	it = iter(''.join((x[::-1] for x in reversed(a))))
	return [''.join(islice(it, len(x))) for x in a]