pragma solidity ^0.5.0;

contract Contract2 {
    
    string[] messages;
    uint256 counter;
    
    event ReceiveMessage (
        address messageSender,
        string message,
        uint256 messageNumber
    );
    
	constructor() public{
	    counter = 0;
	}

	function sendMessage(string memory message) public returns (uint256) {
	    counter = messages.push(message);
	    emit ReceiveMessage (msg.sender, message, counter);
	    return counter;
	}

	function getMessage(uint256 index) public view returns (string memory) {
	    require(index <= counter, "Index too large");
	    return messages[index];
	}	
	
	function getNumber() public view returns (uint256) {
	    return counter;
	}
	
}
